2015/06/24

ruby - injectメソッド

普段からよく使うスクリプト言語っていうと,シェルスクリプトです.

もうちょい今流行りのスクリプト言語使えるようになって,サクサクっと簡単なアプリ作ってみたいなーと思ってはいたものの,めんどくさくて仕事が忙しくて手が出せずにいました.

この前の土日にフラっと本屋にいったら,Rubyの本達が大々的に並んでいたので,衝動買い.ruby使いになることにしました.



まだまだ基礎を勉強中ではありますが,とりあえず面白いなーって思ったことについてはちょっとずつ記録に残してこうと思います.

そこで今回はinjectメソッドです.(こっからいきなり"-である"調に変わります)






    • -


injectメソッドは繰り返しまたは再帰処理に威力を発揮する.

例えば何かしらの計算するときに,結果を格納するためのテンポラリ変数を用意する必要がある.

そのためにどこかで定義して初期値を与えとかないといけない.

sum = 0

(1..10).each {|i| sum = sum + i}

injectメソッドではこれをひとまとめにすることで,簡潔な記述が可能となる.

(1..10).inject(0) {|sum,i| sum = sum + i}

これは,どういう仕組みになっているか.ポイントはinjectメソッド自体の引数とinjectメソッドのブロック引数の2点.

まず,injectメソッドではブロック引数を複数記述する.1つ目の引数は処理を格納するための変数.このブロック引数の初期値は,inject(0)のようにメソッド自体に渡した引数の値がセットされる.つまりブロック引数で処理結果を格納するための変数を定義し,メソッドの引数の値で初期化を行うイメージ.2つ目の引数は呼び出し元のオブジェクトの各要素が代入される.

数列を求める際も,簡潔に処理を記述することができる.

(1..10).inject([1,1]) {|fib,i| fib << fib[i] + fib[i+1]}

こういう簡単な例しか今のところ思い浮かばない(はやくruby初心者抜け出したい...)

//



0 件のコメント:

コメントを投稿