お題
整数に 1 足した整数を得るコードを書いてください
元の整数は変数 n
に代入されているとしましょう。
コード
コード 1
n + 1
コード 2
n.next
改善
コード 1 もコード 2 もまずくありません。ほとんどの場合,これで問題ありません。
記事タイトルに「Ruby のまずいコード」と入っているのは,このアドベントカレンダーの共通のスタイルなだけです。
コード 1 と 2 のどちらがよいかは,好みでいいと思います。
ただ,変数の値に 1 を足すのではなく,メソッドチェーンの途中で 1 を足すという場合,next
を使うほうが書きやすいと思います。
つまり,
foo.bar.next.hoge.fuga
のほうが
(foo.bar + 1).hoge.fuga
とか
foo.bar.then{ |n| n + 1 }.hoge.fuga
よりもいいだろう,ということです。
速度を極限まで求めるなら
この「整数に 1 を足す」演算が多数回ループの中に書かれていて,しかも極限まで速度を追求したいような場合,next
より(エイリアスの関係にある)succ
を使って
n.succ
としたほうがよいかもしれません。2 倍くらい速いのです。
参考:Ruby のエイリアスメソッドはどれを使っても同じ? - Qiita