[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;Code language: PHP (php)

実行すると、

0.36200823385353Code language: plaintext (plaintext)

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

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

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

実行すると、

-1.8740597436463Code language: plaintext (plaintext)

結果はマイナスなので、三角形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";
}Code language: PHP (php)

実行すると、

A <= BCode language: plaintext (plaintext)

三角形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";
}Code language: PHP (php)

実行すると、

A > BCode language: plaintext (plaintext)

if文

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

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

if (条件式) {
    処理1
}Code language: plaintext (plaintext)

if else文の形式です。

if (条件式) {
    処理1
} else {
    処理2
}Code language: plaintext (plaintext)

if elseif else文もあります。

if (条件式) {
    処理1
} elseif (条件式) {
    処理2
} else {
    処理3
}Code language: plaintext (plaintext)

条件式

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

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

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

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

<?php
if (True) {
    echo "if";
} else {
    echo "else";
}Code language: PHP (php)

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

<?php
if (False) {
    echo "if";
} else {
    echo "else";
}Code language: PHP (php)

次に、$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";
}Code language: PHP (php)
a < bCode language: PHP (php)

次のスクリプトは、$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";
}Code language: PHP (php)
a >= bCode language: PHP (php)

比較演算子

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
}Code language: plaintext (plaintext)

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

// よくない例

if (条件式)
    処理1Code language: plaintext (plaintext)

1行1コマのスゴロク

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

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

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

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

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

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

1: <?phpCode language: PHP (php)

次の行に進みます。

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

2行目

2: $a = 0;Code language: PHP (php)

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

3行目

3: $b = 1;Code language: PHP (php)

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

4行目

4: if ($a < $b) {
Code language: PHP (php)

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

5行目

5:    echo "a < b";
Code language: PHP (php)

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

6行目

6: } else {
Code language: PHP (php)

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

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

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

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

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

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

1: <?phpCode language: PHP (php)

次の行に進みます。

2行目

2: $a = 2;Code language: PHP (php)

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

3行目

3: $b = 1;Code language: PHP (php)

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

4行目

4: if ($a < $b) {
Code language: PHP (php)

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

7行目

7:    echo "a >= b";
Code language: PHP (php)

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

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

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

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

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