Ruby"> ]> ためになる話 / &Ruby;

ためになる話

内容

紹介する本

他のプログラミング言語をある程度使える人が &Ruby; を習得するのにちょうどいい一冊。

こんな感じで役に立つ (かも)

&Ruby; はどんな言語?

日本における Lightweight Language の注目度

● Ruby ● Perl ● PHP ● Python ● Tcl

今回紹介する内容

irb

$ irb irb(main):001:0> puts "Hello, world!" Hello, world! nil irb(main):002:0>

多重代入

a, b, c = 1, 2, 3 b, c = c, b puts "a=#{a}, b=#{b}, c=#{c}" a=1, b=3, c=2

オブジェクト指向

irb(main):002:0> -1942.abs 1942 irb(main):003:0> a = [] 変数宣言不要 [] irb(main):004:0> a.push (32) [32] irb(main):005:0> a.push 45 括弧は省略可能 [32, 45] irb(main):006:0> irb(main):098:0> [3, 1, 7, 0].sort.reverse [7, 3, 1, 0]

イテレータ

もっと直感的に...

3.times do print 'Ho! ' end Ho! Ho! Ho! 0.upto 9 do |x| print x, ' ' end 0 1 2 3 4 5 6 7 8 9 (0..10).each { |i| print i ** 2, ' ' } 0 1 4 9 16 25 36 49 64 81 100 Perl で同じことをするには? puts ((1..10).collect { |n| n * 5 }.join ', ') 5, 10, 15, 20, 25, 30, 35, 40, 45, 50 Perl で同じことをするには? File.open ('data').grep /d$/ do |line| print line end 行の順番を入れ替えて出力する (最後の行が最初に来るようにする) には?

イテレータを定義する

def fib_up_to (max) i1, i2 = 1, 1 while i1 <= max yield i1 i1, i2 = i2, i1 + i2 end end fib_up_to (1000) do |f| print f, ' ' end 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 これで何が嬉しい? Perl で同じことをするには? class Array def inject (n) Ruby 1.7 以降は標準の機能 each { |value| n = yield (n, value) } n end def sum self.inject (0) do |n, value| n = n + value end end def product self.inject (1) do |n, value| n = n * value end end end puts [1, 2, 3, 4, 5].sum puts [1, 2, 3, 4, 5].product 15 120 どうしてこうなる?

範囲

irb(main):090:0> digits = 0..9 0..9 irb(main):091:0> digits.include? 5 true irb(main):092:0> digits.min 0 irb(main):093:0> digits.max 9 irb(main):094:0> digits.reject { |i| i < 5 } [5, 6, 7, 8, 9] irb(main):095:0> digits === 7 true Perl.. との違いは?

RD

)) for details. ... == Instance Methods --- Tempfile.open ( filename ) Opens the file... == Return Codes .. The method (()) raises an (({IOException}))... =end]]>

その他の便利な機能