私が始めてこの業界に飛び込んだ時のノートを久しぶりに開きました。
そこには、初めて触れたプログラミング言語『PHP』について、必死で取った汚いメモが残っていました。
今回は、初心に帰って
初めてプログラムを学んだ時の手順をノートの清書がてら
ブログに記事として残したいと思います。
基本はPHPの初歩的な内容ですが、プログラムとはなんぞや?
的な事から学んで行きましたので、これからプログラムを勉強する方の参考になればと
思います。
まずはプログラミングの作法!インデントの付け方について
プログラムは読みやすく書く事がとても大事です。
そして、社内で誰が見ても見やすくする必要があります。
もし、コードを書いた本人がケガや病気で倒れた場合、誰かがプロジェクトを引き継がなければなりません。
そうなった時に、コードの記述ルールがしっかりしていないと、
読んで解析するだけで疲れてしまいます。
ですので、社内ではコーディングルールとして、
プログラムコードの書き方に一定のルールを設けます。
あくまで、内の会社でのコーディングルールですので、
絶対というわけではありませんが、参考にして頂ければ幸いです。
まず、プログラムの『プ』の字も知らない内から、一番初めに学んだ事はインデントの
付け方でした。
ルールとしては、
■インデントはプログラムを見やすくするもの。目線の手すりの様なものなので、必ず整える事
■タブのサイズは半角4つ分(この頃はTABというものの存在さえ知りませんでした)
■処理のブロック毎にインデントの階層を深くする(プログラム未経験でしたので、処理?ブロック?って感じでした)
■HTMLのインデントは半角スペース一つ。要素の入れ子毎に深くする
(HTMLは横に長いので、なるべくインデントは小さくする)
正直、プログラム未経験だった私にとって、何を言っているのかもチンプンカンプン。
重要性もハテナな感じでしたが、今となってはとても重要な事で、一番初めに大前提として
教えられた意味が分かります(教える側が読みやすくってのもあるとは思いますがw)
プログラミング言語のPHP
『これから学んで貰うのは、PHPというプログラミング言語です』
ここで初めてPHPという言葉に出会いました。
私が一番初めに学んだプログラミング言語です。
下記は、殴り書きの様に残されたノートのメモを抜粋します。
とても基本的な事で、改めて基本中の基本なんだなと実感します。
■PHPは『<?php ~~~~~~~~~~~~~ ?>』の中に記述します。
■プログラムは上から下へ向かって処理が流れていく
■その中で、『echo "hoge"』の様に書くと、『hoge』と画面に出力される。
(標準出力や、関数の書き方等は置いておいて、まずは何も考えずechoの書き方を丸暗記)
■文字列はダブルクオーテーションで囲う必要が有る。
■行毎に、処理の最後にはセミコロンを付ける
■ドットで複数の文字列等を繋げる事が出来る
■『$変数名』という形で、『変数』というものを定義出来る。
上記の事を学びながら、初めはいわゆる画面出力『Hello World』です。
$string = "文字列だよ"; echo $string;
画面に出たーー!!っという喜びは特に無く、
『で?次は?コレだけじゃ何にも面白くないよ』というのが正直な感想でした。
文字列をダブルクオーテーションで囲むって事や、echoというものの書き方は暗記でした。
ドットで文字列を繋げるっていうのも、何となくの理解度で、
文字が増えてきたり、何行かに分かれてきたりすると
必然的にダブルクオーテーションやドットが増えていきますが、
目をチカチカさせながらダブルクオーテーションとドットの記述間違いを探していたのを覚えています。
ここで変数というのもとの初めての出会いです。
変数というのは、名前の付いた入れ物。その入れ物に値を入れるのは『=』で代入する。
変数は、名前の前に『変数だよ!』っと示すように『$』を記述する。
一旦箱に入れたら、それは入れた値と同じように扱える。
なので、
$string = "文字列だよ"; echo $string;
『$string』という変数に『文字列だよ』という文字列を代入し、
『echo』で『$string』を出力しようとすると、『$string』の中身は『文字列だよ』が入っているので、
画面には『文字列だよ』と表示される。
不思議と、変数という概念は素直に受け入れる事が出来ましたが、
更にコードがごちゃごちゃしてきて、ひたすら目が痛かったです。
初めての制御構文『if』との出会い
ここで制御構文という言葉を始めて聞きました。
そして、まずは『if』という制御構文を勉強します。
『if』は、条件文によって実行する処理を切り替える事が出来ます。
条件分岐と言う形ですね。条件によって、処理の内容が分岐する。分かれ道の様なイメージです。
書き方は、
if( 条件文 ){ }
条件文の内容が『真』ならば、その後に書かれた波括弧の中身が実行される。
条件文の内容が『偽』ならば、その後に書かれた波括弧の中身は実行されない。
『真?偽?って何?』
が一番初めの感想です。
条件分岐の書き方は、それはそうとして覚えるだけかと思うので、
特に問題視していませんでしたが、この『真』『偽』という言葉が
聞きなれないせいか、全然頭に入って来ませんでした。
更に深く質問してみると
『 真=1 偽=0 』
もー何を言っているのかサッパリです。
とりあえず、この『真』『偽』の考え方についてはスルーしました
(隊長、分かったフリをしていました。すいません)
ですが、『if()』の括弧の中の条件が正しい時に波括弧の中が実行されるという事は
理解出来ていました。
では、正しいっていうのはどういう事?
ここで、比較演算子の登場です。
比較演算子を使って条件式を作成しよう
比較演算子というのは、左辺の値と右辺の値を比較する為の演算子で、
主に下記の様な比較演算子があります。
■『==』は等しい
■『!=』は等しくない
■『<』は未満、超過
■『<=』は以下、以上
■『>』は超過、未満
■『>=』は以上、以下
( !== や === 等の型を意識した比較は、ゆくゆくの独自学習に回します)
『if()』の括弧の中で、上記の比較演算子を使って質問をするイメージですね。
例えば、『3と3は等しいですか?』というのを式にすると、
if( 3 == 3 ){ echo "波括弧の中の処理が実行されました"; }
となります。括弧の中は質問のイメージですので、
『3と3は等しいですか?』の質問に対する答えは『YES』なので、
波括弧の中の処理が実行されます。
これが、
if( 3 != 3 ){ echo "波括弧の中の処理が実行されました"; }
だと、『3と3は等しくないですか?』という質問に対して、答えは『NO』です。
ですので、上記の例だと波括弧の中身は実行されません。
他の比較演算子についても同じような感じです。
そして、このままですと簡単な質問しかする事が出来ません。
実際のプログラムだと、もう少し条件が複雑な場合も出てきます。
そこで登場するのが、日本語で言うと『もしくは』と『尚且つ』を表現する論理演算子です。
式に使う記号に直しますと『もしくは=||』で『尚且つ=&&』です。
これは式と式を連結する時に使います。
例えば、『3と3は等しいですか?尚且つ、5と4は等しいですか?』という質問があったとすると、
if( 3==3 && 5==4 ){ echo "波括弧の中の処理が実行されました"; }
となります。
この場合は、『5と4は等しいですか?』の質問に対して『NO』が出ますので、
波括弧の中の処理は実行されません。
これは『尚且つ』だからです。
式の回答の言葉に直すと『式1の答えがYESで、尚且つ式2の答えもYESの場合は真』と言う事になります。
ですので、式1と式2の両方ともYESにならないと真とは評価されず、波括弧の中は実行されません。
そして、上記の式を『尚且つ』では無く、『もしくは』に直すと、
if( 3==3 || 5==4 ){ echo "波括弧の中の処理が実行されました"; }
式の回答の言葉に直すと『式1の答えがYES、もしくは式2の答えがYESの場合は真』と言う事になります。
ですので、式1か式2のどちらかがYESなら真と評価され、波括弧の中身が実行されます。
また、この式の中では数学の計算式を使う事も出来ます。
条件式に数学で用いる計算を組み込もう
計算式で使う記号は、
■加算『+』( 足し算に使用します。数学と一緒ですね )
■減算『-』( 引き算に使用します。数学と一緒ですね )
■乗算『*』( 掛け算に使用します。数学でいう所の『×』ですね )
■除算『/』( 割り算に使用します。数学で言う所の『÷』ですね )
■剰余『%』( 割り算した結果の余りを求めます。余り聞きなれない演算子ですが、プログラムでは良く使います )
それでは動作を確認してみましょう。
$ans1 = 1 + 2; echo "3になったかな?答えは".$ans1; $ans2 = 5 - 3; echo "2になったかな?答えは".$ans2; $ans3 = 3 * 3; echo "9になったかな?答えは".$ans3; $ans4 = 10 / 2; echo "5になったかな?答えは".$ans4; $ans5 = 14 % 5; echo "4になったかな?答えは".$ans5;
如何ですか?正しい計算結果が表示されましたでしょうか?
色々と数値を変更して試して見ると、計算の感覚がつかめるかと思います。
また、剰余『%』につきましては初めは馴染めないかも知れませんが、
プログラムでは使用頻度高めですので、早めに感覚を掴んで起きましょう。
さて、上記の式を利用して『if』の条件を作成してみましょう
if( (1+2) == (13%5) && (5-3) != (3*3) ){ echo "波括弧の中の処理が実行されました"; }
一気に複雑になりましたね。
さて、これは波括弧の中身は実行されるのでしょうか?
正解は『実行される』です。
一つづつ分解して計算し、真と偽を確認してみて下さい。
そして、更に複雑にしてみたいと思います。
勿論、条件式の中には変数も使えます。
上記の式を変数に入れて見ましょう。
$int1 = 3; $int2 = 5; $int3 = 13; $int4 = 2; $int5 = 1; if( ( $int5 + $int4 ) == ( $int3 % $int2 ) && ( $int2 - $int1 ) != ( $int1 * $int1 ) ){ echo "波括弧の中の処理が実行されました"; }
如何ですか?変数に置き換えただけで、とても複雑に見えます。
しかし、コレは極端な例で、実際にはもう少し分かりやすく書きますので、
安心してください。
むしと、分かりやすく書く事が大前提ですので、
如何に読みやすく、理解しやすく記述出来るかが、実力を左右する指針にもなる事を忘れないで下さい。
もちろん、上記の式も先程の物と結果は同じですので、波括弧の中身は実行されます。
何れかの波括弧内のみ実行させたい時のifの書き方
これまで、『if()』の式の答えが真と評価される時は、波括弧の中身が実行されると
解説して参りました。
この、波括弧の中身の事を『ブロック』と言い、処理の塊を意味します。
少し難しい話になると『スコープ』といわれるものの範囲の指定にも使われます。
このブロックですが、
いくつか用意したブロックのうち、特定のブロックのみ処理したい場合があります。
そこで、『if』の使用を思いつくと思いますが、
いくつかの『if』の条件が、いずれも真と評価される事もあるかと思います。
しかし、ブロックの処理は特定のものしか実行して欲しく無い場合など。
そんな時に役に立つのが、
『else if()』です。
これは、前述の『if』が真と評価されなかった場合に式を判定する条件分岐です。
書き方は下記の様な形です。
if( 1 == 1 ){ echo "波括弧の中の処理が実行されました"; } else if( 2 == 2 ){ echo "else ifの中の処理が実行されました"; }
これで、一つ目の『if』が真と評価されなければ、『else if』がチェックされます。
今回の例ですと、『if』が真となりますので、『else if』の評価は行われません。
ですので、画面には『波括弧の中の処理が実行されました』とだけ表示されます。
では、これと同じように『if』だけで書くとどうなるのでしょう。
if( 1 == 1 ){ echo "波括弧の中の処理が実行されました。"; } if( 2 == 2 ){ echo "ifの中の処理が実行されました。"; }
上記では、一つ目の『if』が評価されてブロック内が実行されます。
同じように、二つ目の『if』でも評価が行われ、ブロック内が実行されます。
画面には、『波括弧の中の処理が実行されました。ifの中の処理が実行されました。』
と表示されます。
このように、特定のブロックだけに絞りたい場合は『else if』を活用しましょう。
また、いずれの式にも当てはまらなかった場合に実行するブロックも指定出来ます。
それには、『else』を使用します。
if( 1 == 1 ){ echo "波括弧の中の処理が実行されました"; } else if( 2 == 2 ){ echo "else ifの中の処理が実行されました"; } else{ echo "いずれも真と評価されませんでした"; }
『else』は、『いずれも真と評価されない場合に実行される』という事が条件ですので、
条件式を書く必要はありません。
プログラムでは、この様にして処理を枝分かれさせていくんですね。
続いて、PHPにおける基本的なデータ構造『配列』と『連想配列』について
プログラミング勉強ノートを元に解説します。
【PHP】プログラミング勉強ノート(配列,連想配列)