[PHP] 関数電卓なみの計算をしよう(4) if文

関数電卓とは

関数電卓すごすぎて、関数電卓なみとか言ってられないわ

三角形の面積を比べよう

底辺が2、高さが√5の三角形Aと底辺が3、高さが√3の三角形Bはどちらの面積が大きいか。

https://edu.casio.jp/cal/cal15/

例題では、三角形Bの面積から三角形Aの面積を引いて、プラスなら三角形Bが大きい、マイナスなら三角形Aが大きい、という判断をします。まず、ここまでをphpスクリプトで書いてみます。

<?php $a = 2 * sqrt(5) / 2; $b = 3 * sqrt(3) / 2; $c = $b - $a; echo $c;

実行すると、

0.36200823385353

結果はプラスなので、三角形Bのほうが大きいことがわかります。

試しに、三角形Aの底辺を2から4に変更して、

<?php $a = 4 * sqrt(5) / 2; $b = 3 * sqrt(3) / 2; $c = $b - $a; echo $c;

実行すると、

-1.8740597436463

結果はマイナスなので、三角形Aのほうが大きいことがわかります。

結果のプラスマイナスを見て判断するのではなく、「Aのほうが大きい」「Bのほうが大きい」と表示したいですね。どうしたらいいでしょうか。

そのためには、if else文を使います。

<?php $a = 2 * sqrt(5) / 2; $b = 3 * sqrt(3) / 2; if ($a <= $b) { echo "A <= B\n"; } else { echo "A > B\n"; }

実行すると、

A <= B

三角形Aの底辺を2から4に変更して、

<?php $a = 4 * sqrt(5) / 2; $b = 3 * sqrt(3) / 2; if ($a <= $b) { echo "A <= B\n"; } else { echo "A > B\n"; }

実行すると、

A > B

if文

if文は、数値を比較して、その結果によって、処理を選択します。

まず、if文だけの形式です。

if (条件式) { 処理1 }

if else文の形式です。

if (条件式) { 処理1 } else { 処理2 }

if elseif else文もあります。

if (条件式) { 処理1 } elseif (条件式) { 処理2 } else { 処理3 }

条件式

条件式とは、$a と $b を比較する式で、式を計算した結果、成立したらTrue、不成立ならFalseという値になります。

全て大文字のTRUE、FALSEと書くとどうなるの?

PHPのTrue、Falseは大文字小文字を区別しないから、TRUE、FALSEでもいいのよ。

次の場合、ifの条件式に直接Trueと書くと、"if" と表示されます。

<?php if (True) { echo "if"; } else { echo "else"; }

次の場合は、ifの条件式に直接Falseと書くと、"else" と表示されます。

<?php if (False) { echo "if"; } else { echo "else"; }

次に、$a < $b という式について考えます。

$aが0、$bが1の場合、成立するので、$a < $b の値は Trueになります。

$aが2、$bが1の場合、成立しないので、$a < $b の値は Falseになります。

次のスクリプトは、$aが0、$bが1なので、$a < $bが成立して、条件式がTrueになり、ifの処理が実行されて、"a < b" と表示されます。elseの処理は実行されません。

<?php $a = 0; $b = 1; if ($a < $b) { echo "a < b"; } else { echo "a >= b"; }
a < b

次のスクリプトは、$aが2、$bが1なので、$a < $bが成立しないので、条件式がFalseになり、ifの処理は実行されず、elseの処理が実行されて、"a >= b" と表示されます。

<?php $a = 2; $b = 1; if ($a < $b) { echo "a < b"; } else { echo "a >= b"; }
a >= b

比較演算子

PHP: 比較演算子 - Manual

数値の比較で使う演算子は、次のとおりです。

名前結果
$a == $b等しい$a$b に等しい時に TRUE
$a != $b等しくない$a$b に等しくない場合に TRUE
$a < $bより少ない$a$b より少ない時に TRUE
$a > $bより多い$a$b より多い時に TRUE
$a <= $bより少ないか等しい$a$b より少ないか等しい時に TRUE
$a >= $bより多いか等しい$a$b より多いか等しい時に TRUE

波カッコとインデント

波カッコ内は、必ずインデントしてください。

最近のテキストエディターは自動でインデントしてくれるわ

// よくない例 if (条件式) { 処理1 }

波カッコを省略できる場合もありますが、常に波カッコをつけるようにしてください。

// よくない例 if (条件式) 処理1

1行1コマのスゴロク

おおざっぱに言うと、phpスクリプトは、1行1コマのスゴロクに似ています。

プレーヤーは一人だけだね

サイコロの目は1しかないわ

次のスクリプトを1行づつ実行していく様子を見ましょう。

<?php $a = 0; $b = 1; if ($a < $b) { echo "a < b"; } else { echo "a >= b"; }

1行目からスタートします。phpの開始タグです。

1: <?php

次の行に進みます。

休む間もなく、次に進むんだね

2行目

2: $a = 0;

変数$aに0を代入しました。
次の行に進みます。

3行目

3: $b = 1;

変数$bに1を代入しました。
次の行に進みます。

4行目

4: if ($a < $b) {

$a < $b を計算すると、0 < 1 なので、Trueです。
ifの波カッコ内の最初の行、5行目へ移動します。

5行目

5: echo "a < b";

"a < b"を表示しました。
次の行に進みます。

6行目

6: } else {

ifの波カッコが閉じたので、ifの処理部はここで終わりです。
elseの波カッコ閉じの次の行、9行目へ移動します。

9行目はないので、phpスクリプトを終了します。

elseを実行する場合も説明してほしいわ

もうひとつのスクリプトを1行づつ実行していく様子を見ましょう。

<?php $a = 2; $b = 1; if ($a < $b) { echo "a < b"; } else { echo "a >= b"; }

1行目からスタートします。phpの開始タグです。

1: <?php

次の行に進みます。

2行目

2: $a = 2;

変数$aに2を代入しました。
次の行に進みます。

3行目

3: $b = 1;

変数$bに1を代入しました。
次の行に進みます。

4行目

4: if ($a < $b) {

$a < $b を計算すると、2 < 1 なので、Falseです。
elseの波カッコ内の最初の行、7行目へ移動します。

7行目

7: echo "a >= b";

"a >= b"を表示しました。
elseの波カッコ閉じの次の行、9行目へ移動します。

9行目はないので、phpスクリプトを終了します。

行ごとに見ていくなんて面倒だね

デバッグの基本よ、地味な作業が多いのよ

タイトルとURLをコピーしました