回し過ぎが嫌い。
「ネストが嫌い。」に続いて第二弾。
ものすごーく初歩的だけど、
見つけると身体中がムズムズしてくる(笑)
ぐーるぐる状態が、いやん。
よく配列やハッシュの中身を
1つ1つチェックして、
何かの条件に、1つでも一致した場合と
全く当てはまらなかった場合とで
分岐する物がありますが。
これの回し過ぎが嫌いなのでありまーす。
これまた説明するより、例を書いた方が早いので
つまり、こーゆー状態↓
my $checkFlag = 0;
foreach my $checkKey ( keys %checkHash ) {
if ($checkHash{$checkKey} eq 条件) {
$checkFlag = 1;
}
}
if ($checkFlag == 0) {
実行内容A;
} else {
実行内容B;
}
だーーーーーっ。
回してるね、回してるよ。
ぐーるぐーる回してるとも。
%checkHash のキーが、例えば1000個あれば
1000回は回すね。ぐーるぐる。
だから、私は単純にこうするので、ありまーす。
my $checkFlag = 0;foreach my $checkKey ( keys %checkHash ) {
next if ($checkHash{$checkKey} ne 条件);
$checkFlag = 1;
last;
}
if ($checkFlag == 0) {
実行内容A;
} else {
実行内容B;
}
これなら $checkHash{$checkKey} が 条件に一致した途端に
foreach のループを抜けてくれるから、
1000回回すとは限らない。ほっ。
でも、これだけじゃ、
大嫌いなマジックナンバーが入ってるから
少々処理が遅くなるけど、こうする↓。
my %BOOLEAN = (
"TRUE" => 1,
"FALSE" => 0
);
my $checkFlag = $BOOLEAN{FALSE};
foreach my $checkKey ( keys %checkHash ) {
next if ($checkHash{$checkKey} ne 条件);
$checkFlag = $BOOLEAN{TRUE};
last;
}
if ($checkFlag == $BOOLEAN{FALSE}) {
実行内容A;
} else {
実行内容B;
}
しかし、所詮「へなちょこプログラマー」あに山。
きっと世の中には、もっと素敵なルーチンがあるはず!
あーあー、もっとうまくなりたい。。。