MTでPerlを学ぶ(その7・ifによる条件判断3)

「MTでPerlを学ぶ」の第7回をお送りします。
今回は、ifのネストについて解説します。

1.ifのネストとは

if文を使って条件に応じて処理を分ける場合、条件に対応する処理の中で、さらに条件を判断することが必要になることもあります。
このような処理をif文で書く場合、以下のリストのように、条件に対応する処理の中に、さらにif文を入れる、という形になります。

if (条件1) 
    else {
        条件2を満たしていないときの処理
    }
}
else {
    ・・・
}

上のリストのように、if文の中にさらにif文があるような書き方のことを、「ネスト」または「入れ子」と呼びます。

2.例

例えば、年齢と性別によって、以下の表のように料金がかかるサービスがあるとします。
このサービスの料金を、Perlで求めることを考えてみます。

性別
年齢12歳以下500円400円
18際以下1,000円800円
上記以外2,000円1,600円

このサービスの料金は、年齢と性別の2つの条件で決まります。
また、個々の年齢にって、性別で料金を判断するような形になります。
料金を求める処理を流れ図で表すと、以下のようになります。


図を大きく表示

図中の点線で囲んだ部分は、「年齢が12歳以下」の条件を満たしたときの処理です。
この処理の中には条件判断があり、ネストした状態になっています。
同様に、「年齢が18歳以下」の条件を満たしたときの処理や、「年齢が18歳以下」を満たさなかったときの処理にも、条件判断が含まれていて、ネストの形になっています。

年齢と性別が変数$age/$sexに代入されているとし、また料金を変数$feeに代入するとします。
この場合、上記の図に対応するプログラムは、以下のリストのようになります。

# 年齢が12歳以下かどうかを調べる
if ($age <= 12) {
    # 年齢が12歳以下なら、性別によって料金を求める
    if ($sex eq '男') {
        $fee = 500;
    }
    else {
        $fee = 400;
    }
}
# 年齢が18歳以下かどうかを調べる
elsif ($age <= 18) {
    # 年齢が18歳以下なら、性別によって料金を求める
    if ($sex eq '男') {
        $fee = 1000;
    }
    else {
        $fee = 800;
    }
}
else {
    # 年齢が18歳以下でないなら、性別によって料金を求める
    if ($sex eq '男') {
        $fee = 2000;
    }
    else {
        $fee = 1600;
    }
}
print "年齢は$age歳で、性別は$sexです。<br />";
print "料金は$fee円です。";

上記を含むインデックステンプレートのサンプルをダウンロード