ネストが嫌い。
リファクタリングする機会が多いので
人様のルーチンを見ていると
いつも思う事がある。
ネストが深くって嫌だなぁ…。
この言い方、正しいのかわからんけど(笑)
私は入れ子の入れ子の入れ子…って状態が嫌い。
説明するより、例を書いた方が早いので
つまり、こーゆー状態↓
sub test {
if (条件A) {
if (条件B) {
実行内容C if (条件C);
} else {
実行内容B;
}
}
return;
}
あ"あ"あ、いやん(涙目)
何故なら、この状態だと
条件Aにあてはまらない場合、
どこを通過するのかを確認したいだけの場合でも
最後の行まで見ないといけないからです。
少ないメモリの私の脳ミソは、
すぐにパニック起こしますから勘弁してください(笑)
で、私はこーゆー時は、こう↓書きます。
sub test {
return if (!条件A);
if (!条件B) {
実行内容B;
return;
}
実行内容C if (条件C);
return;
}
・・・これが良いのか悪いのか、知りませんが(笑)
少なくともこれで条件Aにあてはまらない場合のルーチンが
一目でわかるようになったかなぁ、と思ったり。
感覚的にも、場合によっては
メモリの解放も速いんじゃないかなぁ?って
ボンヤリ想像してたりして。
それで、いつか実験しようと思ってたので、やってみました。
体調悪いから、めっさ適当ルーチンだけど(笑)
一応、期待してた結果が出ました。
main は↓これ。
#/usr/bin/perl -w
use Time::HiRes;
my $checkText = $ARGV[0] || 'a';
my $checkTimes = $ARGV[1] =~ /^[0-9]+$/ ? $ARGV[1] : 100;
my $timecheck = Time::HiRes::time;
&test($checkText) for(1..$checkTimes);
print Time::HiRes::time - $timecheck."\n";
exit;
mainで呼び出すサブルーチンは2種類。
パターン1
sub test($) {my $check = shift;
return if $check ne 'a';
return if $check ne 'b';
return if $check eq 'c';
return;
}
パターン2
sub test($) {my $check = shift;
if ($check eq 'a') {
if ($check eq 'b') {
return if ($check eq 'c');
} else {
return;
}
}
return;
}
これを$checkTimesを1000000にして
交互に呼び出すのを10回やって平均値を出したら…
■パターン1
a: 1.303125
b: 1.1046875
c: 1.109375
■パターン2
a: 1.4328125
b: 1.134375
c: 1.1265625
…結果、総合するとパターン1のが、
0.058854167 速かったのでした。
他にも1つ、実験したい事があるんだけど
それは明日、元気になったらやってみようっと。