Perl初歩の初歩

プログラミング言語Perlの初心者のためのわかりやすい解説ブログ(を目指しています)

if / elsif / else もしも空を飛べたなら

2009-06-04 22:09:49 | 目次・はじめに

if は、「もし~だったら、…をする」というように、ある条件にあてはまったときにだけ実行するためのものです。

if ($hour < 12) { print '午前です'; }

基本形は、if ( 条件 ) { 条件があてはまったときの命令 } となります。
上の例では、$hour が 12未満だったときに、「午前です」と表示されます。

このとき、空白を詰めて書いたり、改行を入れて書いても構いません。

if($hour<12){print'午前です'}

if ($hour < 12) {
  print '午前中です';
}

できるだけ見やすく書くといいでしょう。

午前と表示するなら、ついでに午後も表示するようにしましょう。

if ($hour < 12) {
  print '午前です';
} else {
  print '午後です';
}

else は、必ず if とセットで使います。
if の条件にあてはまらなかったときに行うことを else の後の { } の間に書きます。
この場合は、$hour が 12未満のときには「午前です」、それ以外のときは「午後です」と表示されます。

ただ、上のプログラムには欠陥があるのがわかるでしょうか?

もし、$hour が -4 という数値だったらどうでしょうか?
あるいは、$hour が 125 とかいう大きな数値だったらどうでしょうか?

$hour が -4 のときは、12未満ですので「午前です」と、
$hour が 125 のときは、12未満ではないので「午後です」と表示されてしまいます。

そこで改良版はこうなります。

if ($hour >= 0 && $hour < 12) {
  print '午前です';
} elsif ($hour >= 12 && $hour < 24) {
  print '午後です';
} else {
  print '正しい時刻ではありません';
}

条件が複雑になり、途中に elsif が入りました。

elsif も if とセットで使い、if の条件にあてはまらなかった場合に、別の条件を用意して、それがあてはまれば直後の { } の中を実行します。

上の場合は、$hour が 0 以上 12 未満のときに、「午前です」と表示して、
$hour が 12 以上 24 未満のときに、「午後です」と表示して、
さらに、if の条件も elsif の条件にもあてはまらなかった場合に「正しい時刻ではありません」と表示します。

ここまでは大丈夫でしょうか? さらに複雑になります。

もし、$hour が 数値ではなくて文字だったらどうなるでしょうか?
仮に $hour = 'コロッケ' だったとすると、$hour >= 0 があてはまってしまいます。
「コロッケ」を無理やり数字とみなした場合、0 となるからです。

そこで、$hour が数字じゃなかった場合に備えて、さらに改良します。

$hour = 3;

if ($hour eq '' || $hour == 0 && $hour ne '0') {
  print '数字を入力してください';
} else {
  if ($hour >= 0 && $hour < 12) {
    print '午前です';
  } elsif ($hour >= 12 && $hour < 24) {
    print '午後です';
  } else {
    print '正しい時刻ではありません';
  }
}

大きく if と else で囲んで、その else の中に、さきほどまでの if が入っています。
このように、if や elsif else の中にさらに if elsif else を入れることもできます。
上の例では、まず $hour に何も入っていないか、$hour が 0 だけど $hour が '0' ではない時に「数字を入力してください」と表示され、それ以外のときに午前か午後かを調べています。

$hour eq '' は、$hour という変数に何も入っていなければ…、という条件です。
$hour == 0 は、$hour が文字のときか 0 のときにあてはまりますので、さらに、$hour ne '0' で 0 ではないとき、という条件を追加して、この2つで$hour が 文字であるとき、という条件になっています。

条件の中の || と && では && を優先しますので、$hour が空欄か、あるいは、文字のとき、という条件になります。

$hour = 3; の部分を $hour = 15; や $hour = -5; や $hour = 'コロッケ'; などいろいろ変えて、試してみましょう。