拙著「FXはチャートで勝つ!」が発売されました。
FX(外国為替証拠金取引)でのチャートの読み方を解説しています。
自由国民社刊で、定価1,728円(消費税込み)です。
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)が出力されます。
