Monday, April 20, 2009

程式開發技巧x

連續2個 if 的陷井

試問以下的程式碼, 結果為何

if (1) {
if (0) {
return 2;
}
} else {
return 1;
}


結果應該會回傳一個"不確定的值"
可能會馬上出錯
也有可能一個月才會出錯(或當掉)
然後要review code, 再加點運氣就會發現這裡可能有問題
再放上三個月, 好像不會再出錯了
當做這個問題已經好像似乎已經好像似乎...沒有把握的...解決了

這個範例只是要點出幾個潛在的問題
1)if之後要不要加else
如果每個if之後都有else, 那這個範例應該不會有機會出錯

2)預設的回傳值
也就是無論如何, 一定都會有一個預設的回傳值會傳回去

3)應該不會發生
這句話的代價可能要用時間去驗證"是不是可以獲得解決"

正確寫程式的習慣, 遠比測試1天沒發生問題, 來得重要

Tuesday, April 07, 2009

perl - hash, array, reference

About hash, array, reference

solution 1,

#!/usr/bin/perl -w

use strict;

my @array;
foreach (0..9) {
handler(\@array);
}
for my $i (0..$#array) {
print $array[$i]->{key},"\n";
}

sub handler {
my ($aryhref)=@_;
my (%hash);
$hash{key}="abc";
push @$aryhref, \%hash;
}

=========================
solution 2,

#!/usr/bin/perl -w

use strict;

my @array;

my %hash;
foreach (0..9) {
ca(\%hash);
push @array, \%hash;
}
for my $i (0..$#array) {
print $array[$i]->{username},"\n";
}

sub ca {
my ($hashref)=@_;
$hashref->{username}="abc";
}

use strict;
%{hashref}->{key}
got "Using a hash as a reference is deprecated"
suggest ${hashref}{key} instead.

about Perl Module installation

Monday, April 06, 2009

雨刷與車前玻璃

好長一段時間, 只要下雨, 用雨刷, 就可以聽到雨刷跟前玻璃之間的呱呱聲

"其實只要用魔術靈就可以了", 一天高愛倫這樣跟我說
他繼續說到, "好像是玻璃有黏黏的東西, 所以雨刷會不順"

剛好家裡有一罐魔術靈, 還是玻璃東西的, 噴了幾下
似乎現在已經沒再聽到呱呱聲了

繼續追蹤看看