オルタナティブ・ブログ > 吉政忠志のベンチャービジネス千里眼 >

IT業界でベンチャービジネスの支援をしている執筆者が日々の活動ログと感じたことを、徒然なるままに書き綴っていきます。

志茂吉建氏のRubyコラム『Ruby 2.0(その1)』

»

Rails技術者認定試験運営委員会の吉政でございます。

私が企画したコラムの件です。Rails技術者認定試験運営委員会のオーナーでもあるヒューマンリソシアが志茂吉建氏のRubyコラム『Ruby 2.0(その1)』を公開しています。

今回はちょうど一年前になるRuby2.0のお話です。

(このコラムはバックナンバー公開です)

興味がある方はご参考ください。

###

Ruby 2.0がRuby生誕20周年にあたる2013年2月24日にリリースされました。Ruby 2.0ではどのような機能が追加されたか、美学の観点で見ていきたいと思います。

主な変更点は、以下のURLを確認してください。

http://www.ruby-lang.org/ja/news/2013/02/24/ruby-2-0-0-p0-is-released/

この連載で注目すべきは、Enumerable#lazyではないかと考えています。「無限の遅延ストリーム」とリリース情報には記載されていま す。 Enumerable#lazyとは何か少し見ていきたいと思います。配列を扱う部分でmapメソッドやselectメソッドなどを説明させていただきま したが、lazyはこれらと組み合わせて利用することができます。正確には、配列ではなく、Enumerable(列挙型)での処理となります。

例題として、1から100までの3倍数を列挙するプログラムを作成したいと思います。ただし、表示するのは最初の5つまでとします。

リスト1

require ‘pp’
pp (1..100).select{|num| print num.to_s+” “;num % 3 == 0}.first(5)

リスト1の実行結果

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 5
7 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
[3, 6, 9, 12, 15]

表示するのは最初の5個だけでいいのですが、実際には1から100まですべて評価して計算しているのがわかります。5個の数字を評価すれば処理を終 われば、 あとは評価する必要はありません。でも、このプログラムであればすべて評価しています。では、効率的にするにはどのようなプログラム方法があるでしょう か。

リスト2

require ‘pp’
nums = Array.new
num=1
while nums.size < 5
  if (num % 3) ==0 then
    nums.push(num)
  end
  print num.to_s+” “
  num = num + 1
end

リスト2の結果

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [3, 6, 9, 12, 15]

リスト2は配列が5個以上になれば終了するようにプログラムを作成しています。first(5)という評価をwhile文で代用しているのです。リスト2のプログラムをlazyメソッドを利用して作成すると一行で済みます

(この続きは以下のコラム本文をご覧ください)
http://resocia.jp/column/356/

Comment(0)