frei

旧「anney's room」からブログ「frei」だけ引っ越し&残しました

回し過ぎが嫌い。

「ネストが嫌い。」に続いて第二弾。

ものすごーく初歩的だけど、

見つけると身体中がムズムズしてくる(笑)

ぐーるぐる状態が、いやん。

よく配列やハッシュの中身を

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;

}

しかし、所詮「へなちょこプログラマー」あに山。

きっと世の中には、もっと素敵なルーチンがあるはず!

あーあー、もっとうまくなりたい。。。