if文を使った条件分岐

プログラムは記述した順に実行されていきますが、 if 文を使用すると条件式を評価した結果が真だった場合に、そのあとに記述されたブロック内の処理を実行します。偽だった場合は実行しないので条件式の結果に応じて処理を分けることができます。ここでは Perl のプログラムの中で if 文を使った条件分岐を行う方法について解説します。

(Last modified: )

if文の使い方

プログラムは記述した順に実行されていきます。ただある条件によって処理を分けたい場合もあります。例えば変数の値が正の数ならこちらの処理を行い負の数ならこちらの処理を行うといった場合です。

このように条件に従って処理を分岐させるための使われるのが if 文です。 if 文の書式は次のようになっています。

if (条件式){
  条件式が真の時に実行する処理1;
  条件式が真の時に実行する処理2;
}

条件式の箇所には x == 10y > 15 など関係演算子を使った条件式を記述します。この条件が真(true)となる時に { から } までの文が実行されます。(関係演算子については「関係演算子」を参照して下さい)。

なお { から } で囲まれた部分をブロックと呼びます。 if 文の場合には条件式が真の場合にブロック内に記述された文を実行するということになります。ブロックはプログラムの中である範囲を区分するために使われます。

他のプログラムミング言語では、実行される文が 1 つの場合はブロック無しで記述できる言語もありますが、 Perl では必ず {} で囲ってブロックを記述する必要があります。

実際のプログラム例としては次のようになります。

my $seiseki;

$seiseki = 75;
if ($seiseki > 60){
  print "合格です。\n";
  print "おめでとう。\n";
}

今回の例では条件式として変数 $seiseki に格納されている値が 60 よりも大きいかどうかを設定しています。条件式が真となるとき、つまり変数の値が 60 よりも大きい場合に { から } で囲まれたブロック内の print "合格です。\n"; が実行され、次に print "おめでとう。\n"; が実行されます。

もしも変数に格納されている値が 60 以下の場合にはブロック内の処理は行われずに、 if 文の次の処理へ移ります。

なお if 文でブロックを記述する時には次のように記述しても構いません。

my $seiseki;

$seiseki = 75;
if ($seiseki > 60)
{
  print "合格です。\n";
  print "おめでとう。\n";
}

ブロックの { の位置が先ほどのサンプルとは異なっています。これはどちらでも構いません。

なお if 文の次の行の先頭がインデント(字下げ)されています。これは if 文の結果によって実行される箇所であるというのを分かりやすくするための慣習として行われていますがインデントは必須ではありません。

my $seiseki;

$seiseki = 75;
if ($seiseki > 60){
print "合格です。\n";
print "おめでとう。\n";
}

ただインデントをした方がどこからどこまでがブロック内の処理なのか見分けにくいので、通常はブロック内の処理はインデントするのが一般的です。

サンプルコード

それでは簡単なサンプルを作成します。

use strict;
use warnings;
use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

my $num;

$num = 7;
if ($num > 0){
  print "数値 $num は正の数です。\n";
}

$num = -3;
if ($num > 0){
  print "数値 $num は正の数です。\n";
}

テキストエディタでプログラムを記述したあと sample.pl という名前で保存します。(文字コードは UTF-8 です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで次のように実行します。

perl sample.pl

次のように実行結果が表示されます。

if文を使った条件分岐(1)

if 文の条件式が真の場合はブロック内の処理が実行されますが、偽の場合は何も実行されません。

if文で条件式が偽の時の処理

if 文は記述した条件式が真(true)のとき処理を実行します。もう一度書式を確認しておくと次のようなものでした。

if (条件式){
  条件式が真の時に実行する処理1;
  条件式が真の時に実行する処理2;
}

if...else 文を使用すると、条件式が真になったときとは別に偽になったときにも別の処理を実行することができます。書式は次の通りです。

if (条件式){
  条件式が真の時に実行する処理1;
  条件式が真の時に実行する処理2;
}else{
  条件式が偽の時に実行する処理1;
  条件式が偽の時に実行する処理2;
}

条件式を評価し、真(true)だった場合にはすぐ次に記述された { から } までのブロック内の処理を実行し、偽(false)だった場合には else のあとに記述された { から } までのブロック内の処理を実行します。

例えば変数に格納された値が正の数か負の数かで処理を分ける場合には次のように記述します。

my $num;

$num = 5;

if ($num > 0){
  print "正の数です";
}else{
  print "負の数です";
}

変数が正の数だった場合は "正の数です" と表示し、負の数だった場合は "負の数です" と表示されます。今回は正の数なので "正の数です" と表示されます。

サンプルコード

それでは簡単なサンプルを作成します。

use strict;
use warnings;
use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

my $num;

$num = 7;
if ($num > 0){
  print "数値 $num は正の数です。\n";
}else{
  print "数値 $num は負の数です。\n";
}

$num = -3;
if ($num > 0){
  print "数値 $num は正の数です。\n";
}else{
  print "数値 $num は負の数です。\n";
}

テキストエディタでプログラムを記述したあと sample.pl という名前で保存します。(文字コードは UTF-8 です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで次のように実行します。

perl sample.pl

次のように実行結果が表示されます。

if文で条件式が偽の時の処理(if...else)(1)

if 文の条件式が真の場合と偽の場合でそれぞれ異なるブロック内の処理を実行しました。

-- --

Perl のプログラムの中で if 文を使った条件分岐を行う方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。