ホーム > プログラミング > もし~ならどうする? if~else if~else

もし~ならどうする? if~else if~else

[`evernote` not found]
[`grow` not found]
[`livedoor` not found]
[`yahoo` not found]
Delicious にシェア
このエントリーをはてなブックマークに追加

プログラムには、条件が成り立つか否かで実行を制御する
条件分岐」というものがあります。
これがわかると、いかにもプログラムらしくなり、
プログラミングの面白みが増します。

「もし、参加者が6人以上なら、ワゴン車を借りる」

例えばこの場合、条件は「参加者が6人以上」で、
これが成り立てば、「ワゴン車を借りる」わけですが、
これをプログラム風に翻訳するとこう書けます。

if ( 参加者 >= 6 ) {
    ワゴン車を借りる;
}


「if」が条件分岐の始まりを示す印になっており、
これに続けて括弧内に「条件式」を書き、
次に、条件が成り立った時に「実行する文」を書く、という作りになってます。

if文の書式

if ( 条件式 ) {
    実行文;
}

ちなみに、実行する文を挟んでる大括弧({})は、
例文のように実行する文が一つの場合は省略も可能。

if ( 参加者 >= 6 ) 
    ワゴン車を借りる;

以下のように文が2つ以上の時は省略できません。

if ( 参加者 >= 6 ) {
    ワゴン車を借りる;
    2部屋予約する;
}

さて、ここまでは、条件が成り立った時の事だけですが、
条件が成り立たない時のことも分岐したいことがあります。

「もし、参加者が6人以上なら、ワゴン車を借りる。
 そうでなければ、自家用車で行く。」

これをプログラム風に翻訳するとこう書けます。

if ( 参加者 >= 6 ) {
    ワゴン車を借りる;
} else {
    自家用車で行く;
}

if(条件式)実行文の後、「else」 につづけて、
条件が成り立たない時に実行する文を書けばよいだけです。

if ( 条件式 ) {
    実行文;
} else {
    実行文;
}

これで、条件が成り立つ時と成り立たない時、
2種類の実行を制御できましたが、複数の条件で分岐したい事もあります。

「もし、参加者が6人以上なら、ワゴン車を借りる。
そうでない時、参加者が3人以上なら、自家用車で行く。
そうでない時は、中止する。」

こういうときは、else if を使ってこう書けます。

if ( 参加者 >= 6 ) {
    ワゴン車を借りる;
} else if ( 参加者 >= 3 ) {
    自家用車で行く;
} else {
    中止する;
}

これで条件が複数ある時も、処理を分岐することが出来ます。
条件がもっとある時も同じ書き方でOK。

if ( 条件式1 ) {
    実行文1;
} else if ( 条件式2 ) {
    実行文2;
} else if ( 条件式3 ) {
    実行文3;
} else if ( 条件式4 ) {
    実行文4;
} else {
    実行文5;
}

ただ、if文では、上から順番に条件が評価されますが、
条件が成り立つと、それ以降の条件式は評価されません。
順番を間違えると絶対に実行されない文が生まれますので
条件式の順番はよく考えましょう。

if ( 参加者 >= 3 ) {
    自家用車で行く;
} else if ( 参加者 >= 6 ) {    // 先に参加者 >=3が成り立つので
    ワゴン車を借りる;           // これが実行されることは無い
} else {
    中止する;
}

さあ、ここまでがわかれば、
条件分岐を含む文章をPHPのコードに翻訳できます。

◆原文
「もし、参加者が6人以上なら、ワゴン車を借りる。
そうでない時参加者が3人以上なら、自家用車で行く。
そうでない時は、中止する。」

◆PHPのコード

<?php
// 参加者数
$Sankashya = 6;

if ( $Sankashya >= 6 ) {
    echo 'ワゴン車を借りる';
} else if ( $Sankashya >= 3 ) {
    echo '自家用車で行く';
} else {
    echo '中止する';
}
?>

では、実際に確かめてみましょう。
上のコードに適当な名前を付けて、PHPが実行可能なディレクトリに保存します。
test.php と言う名前で、ローカルPCのドキュメントルートに保存したとすると、
ブラウザのURL欄に次のように入力すれば
このPHPスクリプトが実行されます。

http://localhost/test.php

$Sankashya = 6; なので、当然ブラウザには
ワゴン車を借りる」が表示されます。
これを $Sankashya = 3; に書き換えれば
自家用車で行く」が表示されます。

でもこれだと、
参加者数が変わる度にコードを書き換えなければならず
実用的でもないし、面白くもありません。そこで
$Sankashya をスーパーグローバル変数で初期化して、
プログラムの外部から処理分岐を確認できるよう書き換えてみます。

<?php
// 参加者数
$Sankashya = $_GET['s'];

if ( $Sankashya >= 6 ) {
    echo 'ワゴン車を借りる';
} else if ( $Sankashya >= 3 ) {
    echo '自家用車で行く';
} else {
    echo '中止する';
}
?>

$_GET はPHPが提供するスーパーグローバル変数のひとつで、
URLの?の後に続く「変数名=値」のペアを格納していて、
プログラムのどこからでも利用することが出来ます。

例えばURLがこうなっていれば
http://localhost/test.php?s=6

プログラム中で$_GET['s']と書くことによって6を得ることができます。

さあ、test.php を直したところで、URLのの部分を色々と書き換えてみて
どの文が実行されるか確かめてみてください。
http://localhost/test.php?s=3

少しは、プログラミングの可能性みたいなものを
感じていただけたでしょうか。
条件分岐(if文)に焦点を絞ったので
説明が足りないところがいくつかあります。
最後にこれらを補足してしめたいと思います。

 * * *

<?php ?>
PHPの開始タグ(<?php)と終了タグ(?>)です。
この間に書かれたものがプログラムとして評価されます。
この外は、単なるテキストとして、ブラウザにそのまま出力されます。
基本的な構文

//
プログラム中にコメントを埋め込み、コードの保守を助けることが出来ます。
// から行末までがコメントとみなされます。
複数行にわたる場合などは /* ~ */ で挟む方法もあります。

$Sankashya
$ に続いて _(アンダーバー)又はアルファベットで始まる連続した文字は、
変数と呼ばれる値を格納しておく入れ物です。
名前は任意に付ける事ができます。
$_GETも変数の一種ですが、
スーパーグローバル変数と呼ばれるPHPが用意する特殊な変数です
変数

=
代入演算子 と呼び、左辺に右辺をコピーします。
$Sankashya = 6 というのは、
変数$Sankashya に 6 を コピー(初期化)すると言う意味で
$Sankashya と 6が等しいと言うことではありません。
代入演算子

>=
比較演算子のひとつで、 右辺と左辺の値の大小の関係を示してます。
比較演算子

;
セミコロンは、文の最後につけて、文の区切りを表します。
命令の分離

if(式) ~ else if(式) ~ else
PHPの制御構造のひとつで、
式を評価して実行する文を分岐させることが出来ます。
制御構造

echo
この後に続く値を出力(表示)せよという言語構造のひとつです。
echo ‘ワゴン車を借りる’; は、「ワゴン車を借りる」 を出力します。
echo

次も条件分岐 ⇒ またまた処理を分岐する switch

コメント:2

こはる 2011-07-13 水

仕事でWordPressを使うようになり
phpも少し必要になって
どこからどうしていいのか
全く分からなかったのですが
そうやって考えていくのですね。
勉強になりました。
ありがとうございました。

ゆうじ 2011-07-14 木

お役に立てたようでなによりです

コメントフォーム
入力した情報を記憶する
accessLogging

ホーム > プログラミング > もし~ならどうする? if~else if~else

Ad
Apache
MySQL
PHP
お気に入り
ん。。。。。。広告
アーカイブ
Ad

ページの上部に戻る