2月7日の業務報告

こんばんは,4年みつゆきです.

今日も質問はありませんでした.

チューター間では来たるべきプログラムや統計の質問に備えて
色々と準備を進めています.

さしあたって自分は以前来たプログラミングの質問で,
頂いたソースコードをデバッグしていました.
1つ気になるコーディングがあったので紹介します.
***
1 arr = [1,2,3]
2
3 i = 0
4 sum = 0
5 while arr[i] != “”
6 sum += arr[i]
7 i += 1
8 end
9 puts sum
arr配列に格納された数値の合計を出すコードのようです.
すでにお気づきの方も居るかと思われますが,
これを実行すると6行目でエラーを吐きます.
# hoge.rb:6:in `+’: nil can’t be coerced into Fixnum (TypeError)
まあエラーメッセージが涙が出るほど親切なので,
これを修正するのは容易だと思いますが一応解説を.
***
このコードではwhileの条件としてarr[i] != “”を設定しています.
そして7行目でiをインクリメントさせて各要素を参照していくという
お決まりの形ですね.
whileから抜け出すのは条件の評価が偽になった場合ですので,
arrのn番目の要素が””になったら抜け出す,というコードになっています.
しかし,rubyで要素が格納されていない場所を参照した時に
返される値はnilですので,このままだとsumにnilを足すことになってしまいます.
ですので,この場合は条件をarr[i] != nilとすれば,
とりあえずは意図通りに動くかと思います.
/*
このようなことをコーディングしたいのであれば,
eachを使った方がスマートになるので個人的にはお勧めです.
arr.each{|i|
sum += i
}
*/

(文責:池田 [twitter;lumely])