「WordPressで学ぶPHP(1)変数・制御構造編」が発売されました。
「WordPressで学ぶPHP」シリーズの第1巻で、WordPressを通してPHPを学んでいく本です。
この本では、PHPの基本となる変数と制御構造について解説します。
Kindle本で、定価500円です。
MTでPerlを学ぶ(その14・次の繰り返しに進む)
「MTでPerlを学ぶ」の第14回をお送りします。
今回は、for文やwhile文の中で、以後の処理をスキップして次の繰り返しに進む方法を解説します。
1.繰り返しをスキップする例
繰り返しによっては、その途中で条件判断して、条件が成立したら繰り返しの残りの部分をスキップして、次の繰り返しに進みたい場合があります。
例えば、「最近のブログ記事100件の中で、タイトルに『Movable Type』を含む記事だけを抜き出し、そのタイトルを出力する」という処理を考えてみます。
この処理は、以下のような流れで行うことができます。
記事のタイトルに「Movable Type」を含むかどうかを判断し、「Movable Type」を含まなければ、繰り返しの残り(タイトルの出力)の処理をスキップして、次の記事を調べる処理に進むようにすれば良いです。
2.next文で次の繰り返しに進む
繰り返しの残りの処理をスキップして、次の繰り返しに進むには、「next」という文を使います。
forやwhileの繰り返しがあって、その途中で次の繰り返しに進むことがある場合、その一般的な処理の流れを図にすると、以下のようになります。
この図をプログラムにすると、以下のようになります。
forまたはwhile { 繰り返し前半の処理 if (条件) { 次の繰り返しに進む前の処理 next; } 繰り返し後半の処理 }
なお、条件を満たした時に、何も処理をせずに即座に次の繰り返しに進む場合、if文の部分を以下のように短縮して書くことができます。
next if (条件);
3.next文を使った例
next文を使った例として、最初にあげた「最近のブログ記事100件の中で、タイトルに『Movable Type』を含む記事だけを抜き出し、そのタイトルを出力する」というプログラムを作ると、以下のようになります。
use MT::Entry; # 最近のブログ記事を100件読み込めるようにする my $iter = MT::Entry->load_iter({ blog_id => 1, status => MT::Entry::RELEASE(), }, { limit => 100, sort => 'authored_on', direction => 'descend' }); # 記事を読み込める間繰り返す while (my $entry = $iter->()) { # 記事のタイトルに「Movable Type」を含まない場合は、 # 次の繰り返しに進む next if ($entry->title !~ /Movable Type/); # 記事のタイトルを出力する print $entry->title . '<br />'; }
プログラムの内容は以下の通りです。
4~11行目
IDが1番のブログから、最近のブログ記事を100件読み込めるように、「イテレータ」を初期化しています。
13行目
記事がある間、イテレータから記事を読み込んで、変数$entryに割り当てます。
16行目
記事のタイトル($entry->title)に、「Movable Type」が含まれていないかどうかを調べ、含まれていなければ、next文で次の繰り返しに進みます。
18行目
記事のタイトルに「Movable Type」が含まれていれば、if文の条件が成立しないため、繰り返しが続いて、18行目に処理が進みます。
そして、この行によって、記事のタイトル($entry->title)が出力されます。