条件分岐

条件によって違うことをしたい場合には、if文という条件文を用います。

if文

if文は以下の形をしています。

if ( 条件式 ){ ブロック1 } else { ブロック2 };

ここで条件式は「条件判断をするための式」です。ブロック部分をインデントして

if ( 条件式 ){
       
    ブロック1
       
} else {
       
    ブロック2
          
};

と書いたほうがわかりやすいです。

プログラムの流れとしては、条件式が

が実行されます。

また、偽の場合に実行すべきものがない場合には、「 else { ブロック2 } 」の部分を省略することができます。

条件式

条件式には、等式や不等式に代表される真または偽の値(真理値)を持つ式を記述することができます。

複雑な条件式

複数の条件式の組み合わせで複雑な条件式を作ることができます。「かつ(and)」、「または(or)」などの論理演算子を使います。

真理値表(and、or、xor)

条件式1 条件式2 and or xor

真理値表(not)

条件式 not

例 「奇数かつ3の倍数であるかどうか」を判定するプログラム

$x = 9;  # 判定する数字
       
if ( ( $x % 2 == 1) and ( $x % 3 == 0 ) ) {
       
    print "$xは「奇数かつ3の倍数」です。\n";
       
} else {
       
    print "$xは「奇数かつ3の倍数」ではありません。\n";
       
};

発展

論理積と論理和は、正しくは真理値ではなく最後に評価した条件式の値を返します。従って、

$a && $bは、$aが偽ならば$a、そうでなければ$b
$a || $bは、$aが真ならば$a、そうでなければ$b

となります。これを利用して、エラーメッセージの出力などを行うこともできます。

複雑な分岐

3つ以上の場合分けをする場合はif文を重ねて分岐を行います。すなわち、if文の中でif文を使用します。このような使い方を「入れ子にする」といいます。

例 変数$xの値を3で割った余りで分岐する場合

#!/usr/local/bin/perl

if ( $x % 3 == 0 ) {
	print "3で割り切れます。";
} else {
	if ( $x % 3 == 1) {
	     print "3で割った余りは1です。";
	} else {
      	print "3で割った余りは2です。";
     };
};

このような場合、簡単に書く方法としてelsifが用いられます。elsifを用いたif文は以下の形をしています。入れ子の形にならないのでプログラムがわかりやすくなります。

if ( 条件式1 ){
    
    ブロック1
    
} elsif ( 条件式2) {
    
    ブロック2
      
} else {
   
    ブロック3
   
};

else部分をelsifに変えていくことで、さらに多くの場合分けでも対応することができます。

練習問題

入力された年がうるう年かどうかを判定するプログラムを作成せよ。うるう年になる条件は、「4で割り切れて100で割り切れないもの。または、400で割り切れるもの」とする。

練習問題の答