Ruby

381 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
381
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
5
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Ruby

  1. 1. はじめてのRUBY 2013/08/31 Niigata.rb #3 dictav 13年8月31日土曜日
  2. 2. RUBY とは 日本人が開発したインタプリター言語 今も多くの日本人にメンテされている やった!メンテナーと日本語で話せる!! Ruby on Rails で大ブレイク 今年20歳を迎えて Ruby2.0 リリース! ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13] 13年8月31日土曜日
  3. 3. RUBY とは インタープリタ 動的型付け ガベージコレクション 13年8月31日土曜日
  4. 4. 特徴 グルー言語 すべてがオブジェクト 文字の扱いに強い オープンクラス リフレクション 強力な組み込みクラス 13年8月31日土曜日
  5. 5. グルー言語 OS特有の機能を呼び出せる プラットフォームに依存したC言語のライブラリも呼び出せ る 13年8月31日土曜日
  6. 6. すべてがオブジェクト 文字列だってオブジェクト 数値だってオブジェクト 配列だってオブジェクト "hello".each_byte {|c| print c, ' ' } 3.times.map{|a| a.to_s} #=> [“0”,“1”,“2”] [1,2,3,4,5].include?(3) #=> true 13年8月31日土曜日
  7. 7. 文字の扱いに強い Perlゆずりの正規表現(鬼車/鬼雲) デフォルト文字コードは UTF-8 M17N:multilingualization マルチリンガライゼーション euc_str = “日本語”.encode(“euc-jp”) => "x{C6FC}x{CBDC}x{B8EC}" sjis_str = “にほんご”.encode(“sjis”) => "x{82C9}x{82D9}x{82F1}x{82B2}" euc_str.encode(‘utf-8’) + sjis_str.encode(‘utf-8’) => "日本語にほんご" # coding: euc-jp 13年8月31日土曜日
  8. 8. オープンクラス class Foo < Bar def hello(name) puts “hello #{name}” end end class Foo def goodbye puts “goodbye” end end class Foo def hello(name) puts “hello #{name} san” end end 13年8月31日土曜日
  9. 9. オープンクラス class Foo < Bar def hello(name) puts “hello #{name}” end end class Foo def goodbye puts “goodbye” end end class Foo def hello(name) puts “hello #{name} san” end end Foo.new.hello ‘rubico’ => “hello rubico san” Foo.new.goodbye ‘’ => ‘goodbye’ 13年8月31日土曜日
  10. 10. MODULE.INCLUDE class Foo < Bar def hello(name:‘hoge’) puts “hello #{name}” end end module Goodbye def goodbye puts “goodbye” end end class Foo include Goodbye end 13年8月31日土曜日
  11. 11. MODULE.INCLUDE class Foo < Bar def hello(name:‘hoge’) puts “hello #{name}” end end module Goodbye def goodbye puts “goodbye” end end class Foo include Goodbye end Foo.new.hello name:‘rubico’ => “hello rubico” Foo.new.goodbye ‘’ => ‘goodbye’ 13年8月31日土曜日
  12. 12. MODULE.PREPEND class Foo < Bar def hello(name) puts “hello #{name}” end end module SanTukero def hello(name) super(name + “ san”) end end class Foo prepend SanTukero end 13年8月31日土曜日
  13. 13. MODULE.PREPEND class Foo < Bar def hello(name) puts “hello #{name}” end end module SanTukero def hello(name) super(name + “ san”) end end class Foo prepend SanTukero end Foo.new.hello ‘rubico’ => “hello rubico san” 13年8月31日土曜日
  14. 14. リフレクション eval instance_eval class_eval eval “1+2” #=> 3 Foo.new.instance_eval “hello ‘rubico’” Fixnum.class_eval "def number ; self ;end" 5.number #=> 5 13年8月31日土曜日
  15. 15. 強力な組み込みクラス Numeric String Array Hash Enumrator Fiber 13年8月31日土曜日
  16. 16. NUMERIC 数値を扱うクラス(Integer/Float/Rational/Complex) 丸め操作 数値表現 繰り返し 1.4.round #=> 1 1_0000_0000_0000_0000 #1景 (65..70).map(&:chr) #=> ["A", "B", "C", "D", "E", "F"] 1.step(5, 2).reduce(:+) #=> 1+3+5 = 9 16.to_s(16) #=> “10” 13年8月31日土曜日
  17. 17. STRING “Niigata.rb”.include? “rb” #=> true “Niigata.rb”.start_with? “Niigata” #=> true “Niigata”+”.rb” #=> “Niigata.rb” “ruby” * 3 #=> “rubyrubyruby” “%02d月%02d日” % [8,31] “Niigata.rb”[0,7] #=> “Niigata” “rubyrubyruby”.scan(/ruby/) #=> [“ruby”, “ruby”, “ruby”] “ruby”.split(“”) #=> [“r”, “u”, “b”, “y”] euc_str = “日本語”.encode(“euc-jp”) 13年8月31日土曜日
  18. 18. ENUMERABLE 要素へアクセス (each/each_with_index/each_cons) 要素の取得 (map/grep/detect/select/take) 畳み込み演算 (inject/each_with_object) グルーピング (group_by/partition) ソート(sort/sort_by) 13年8月31日土曜日
  19. 19. ARRAY [“Niigata”] + [“rb”] #=> [“Niigata” ,“rb”] [“ruby”] * 3 #=> [“ruby”, “ruby”, “ruby”] “ruby”.split(“”) & “Niigata.rb”.split(“”) #=> [“r”, “b”] [“Niigata”, “rb”].join(“.”) #=> “Niigata.rb” [1,2,3,4,5,6,7,8,9,10].inject(:+) #=> 55 13年8月31日土曜日
  20. 20. HASH # 初期化 hash = {one: 1, two: 2} #=> {:one => 1, :two => 2} #アクセス hash.each do |key,val| puts “#{key}: #{val}” end #更新 hash[:one] = 1.0 # {:one => 1.0, :two => 2} hash.merge!({one: ‘1’, two: ‘2’}) #{:one => ‘1’, :two => ‘2’} 13年8月31日土曜日
  21. 21. ENUMERATOR::LAZY Enumerator ([1,2,3,4,5].each / (1..10).map) Enumerator::Lazy すごい大きい配列使う時に使える big_data = (1..Float::INFINITY).lazy squares = big_data.map{|a| (a**2).to_s } p squares.select{|a| a.match /7/}.take(1).force #=> [“576”] 13年8月31日土曜日
  22. 22. FIBER fib = Fiber.new { a, b = 0,1 loop do a, b = b, a + b Fiber.yield(a) end } p 10.times.map{ fib.resume } p fib.resume p fib.resume 13年8月31日土曜日

×