while文を使った繰り返し処理

繰り返し処理の中で条件式が真の間ずっと繰り返し処理を行うには while 文を使うと便利です。ここでは Perl における while 文を使った繰り返し処理を行う方法について解説します。

(Last modified: )

while文を使った繰り返し処理

繰り返し処理の一つである while 文は条件式が真の間、ブロック内の処理を繰り返し実行します。書式は次のようになっています。

while (条件式){
  実行する処理1;
  実行する処理2;
}

条件式の箇所には x == 10y > 15 など関係演算子を使った条件式を記述します。この条件が真(true)となっ他場合に { から } までのブロック内に記述された文が実行されます。

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

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

my $count;

$count = 0;
while ($count < 2){
  print "count = $count \n";
  $count ++;
}

この例を元に while 文がどのように実行されるのかを確認していきます。

まず while 文が最初に実行される時点で条件式が一度評価されます。もし条件式が偽(false)だった場合は while 文は終了して次の処理へ進みます。今回の場合は変数 $count に格納されている値が 2 よりも小さいかどうかなので、条件式は真(true)となります。真の場合にはブロック内に記述された処理を順に 1 回実行します。

1)変数「$count」を初期化し、0を格納
2)while文の条件式を評価
3)条件式が真のため、ブロック内を実行
4)「count = 0」を出力
5)変数「$count」に格納されている値を1だけ増加し1にする

ブロック内の処理を一度実行したら、改めて while 文の条件式を評価します。変数 $count の値は 1 になっていますので、条件式は引き続き真です。その為、再度ブロック内の処理を実行します。

1)while文の条件式を評価
2)条件式が真のため、ブロック内を実行
3)「count = 1」を出力
4)変数「$count」に格納されている値を1だけ増加し2にする

また while 文の条件式を評価します。変数 $count の値は 2 になっていますので、条件式は偽となります。その為、この時点で while 文は終了し、 while 文の次へ進みます。

1)while文の条件式を評価
2)条件式が偽のため、while文は終了
3)「以上です」を出力

このように while 文は条件式が真の間は何度でもブロック内の処理を繰り返します。その為、ブロック内で条件式が変化するような処理(今回は比較している変数の値を増加)を行わないと、いつまでの条件式の評価は同じになってしまいますので無限にループしてしまうことになります。また条件式がいきない偽になる場合はブロック内は一度も実行されません。

while 文は決められた回数だけ繰り返す処理よりも、ブロック内で処理される内容がある条件を満たすまで無限に繰り返すといった処理によく使われます。例えばファイルを最初から最後まで読み込むとか、パスワードが一致するするまで入力を行ってもらうなどの用途に使います。

サンプルコード

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

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

my $count = 1;

while ($count < 100){
  print "count = $count \n";
  $count = $count * 2;
}

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

perl sample.pl

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

while文を使った繰り返し処理(1)

繰り返し処理の中で変数に格納した値を順に 2 倍していき、変数の値が 100 より小さい場合は繰り返し処理を行いました。

-- --

Perl における while 文を使った繰り返し処理を行う方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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