Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ruby

 Ruby

Ruby紹介のスライド

Shintaro Abe

March 11, 2014
Tweet

More Decks by Shintaro Abe

Other Decks in Programming

Transcript

  1. RUBY VERSIONS ruby 1.6 ܥ ruby 1.7 ܥ ruby 1.8

    ܥ ruby 1.9 ܥ ruby 2.0 ܥ ruby 2.1 ܥ ruby 1.6 ܥ ruby 1.7 ܥ ruby 1.8 ܥ ruby 1.9 ܥ ruby 2.0 ܥ ruby 2.1 ܥ
  2. RUBY 2.1.0 Ϋόʔδϣχϯάʹ͍ͭͯ MAJOR: MINOR ϦϦʔεͰରԠͰ͖ͳ͍ޓ׵ੑͷͳ͍มߋ͕͋Δ৔߹ ʹ૿Ճ͢ΔɻಛผͳΠϕϯτͷͨΊʹ༧໿͞ΕΔɻ MINOR: ΫϦεϚε͝ͱʹ૿Ճ͢ΔɻAPI ϨϕϧͰͷඇޓ׵͕͋Γ͑Δɻ

    TEENY: API ޓ׵ੑΛҡ࣋͢ΔηΩϡϦςΟϑΟοΫε΍όάϑΟοΫ εɻ2.1.11 ͷΑ͏ʹ10Ҏ্ͷ஋ʹͳΓ͑Δɻ2ɺ3ϲ݄͓͖ʹϦϦʔε͞Ε Δɻ PATCH: ௚લͷ MINOR ϦϦʔε͔Βͷίϛοτ਺ɻ (MINOR ͕ϦϦʔ ε͞ΕΔ͝ͱʹ 0 ʹ໭Δ) {MAJOR}.{MINOR}.{TEENY}p{PATCH} https://www.ruby-lang.org/ja/news/2013/12/21/semantic-versioning-after-2-1-0/
  3. จࣈͷѻ͍ʹڧ͍ σϑΥϧτจࣈίʔυ͸ UTF-8 
 
 
 ! # coding: euc-jp

    # UTF-8 3bytes t1="͍͋͏͓͑" t1.bytesize #=> 15 t1.length #=> 5 ! # UTF-8 4bytes t2 = "㘏㚁䆰䆵䇁" t2.bytesize #=> 20 t2.length #=> 5
  4. จࣈͷѻ͍ʹڧ͍ 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') => "೔ຊޠʹͬΆΜ"
  5. จࣈͷѻ͍ʹڧ͍ ਖ਼نදݱ logs = ['192.168.0.1 - - [14/Feb…’, '192.168.0.2 -

    - [14/Feb…’, '192.168.0.3 - - [14/Feb…’ ] # ਖ਼نදݱ: regs = /(?<ip>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/ # ܁Γฦ͠ॲཧ:ɹdo ~ end ͸ϒϩοΫ {} ͱ΋ॻ͚Δ logs.each do |log| log.match regs do |m| p m[:ip] end end ! # =>”192.168.0.1"ɹ“192.168.0.2"ɹ"192.168.0.3"
  6. STRING "Niigata.rb".include? "rb" #=> true "Niigata.rb".start_with? "Niigata" #=> true "Niigata"+".rb"

    #=> "Niigata.rb" "ruby" * 3 #=> "rubyrubyruby" "%02d݄%02d೔" % [8,31] #=> "08݄31೔" "Niigata.rb"[0,7] #=> "Niigata" "rubyrubyruby".scan(/ruby/) #=> ["ruby", "ruby", "ruby"] "ruby".split("") #=> ["r", "u", "b", "y"] euc_str = "೔ຊޠ".encode("euc-jp") #=> "\x{C6FC}\x{CBDC}\x{B8EC}"
  7. ARRAY ["Niigata"] + ["rb"] #=> ["Niigata" ,"rb"] ["ruby"] * 3

    #=> ["ruby", "ruby", "ruby"] ["Niigata", "rb"].join(".") #=> "Niigata.rb" [1,2,3,4,5,6,7,8,9,10].inject(:+) #=> 55
  8. 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'}
  9. 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"]
  10. ͢΂͕ͯΦϒδΣΫτ ϝιουఆٛ p self # => main p self.class #

    => Object ! def self.my_method :my_method end ! p self.my_method #=> :my_method # 2.1.0 new feature m = def my_method :my_method end ! p send(m) #=> :my_method p self # => main p self.class # => Object ! def my_method :my_method end ! p my_method #=> :my_method
  11. ͢΂͕ͯΦϒδΣΫτ Πϯελϯεϝιουఆٛ Foo = Class.new Foo.module_eval do def my_method :my_method

    end def my_metho2 :my_metho2 end end obj1 = Foo.new p obj1.my_method #=> :my_method ! obj2 = Foo.new p obj2.my_method #=> :my_method p obj2.my_metho2 #=> :my_metho2
  12. ͢΂͕ͯΦϒδΣΫτ Πϯελϯεϝιουఆٛ class Foo < Object def my_method :my_method end

    def my_metho2 :my_metho2 end def self.my_class_method :my_class_method end end p Foo.my_class_method #=> :my_class_method obj1 = MyClass.new p obj1.my_method #=> :my_method p obj1.my_metho2 #=> :my_metho2
  13. ΦʔϓϯΫϥε class Foo 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'
  14. MODULE.INCLUDE class Foo def hello(name) 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'
  15. MODULE.PREPEND class Foo 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" ! !
  16. MODULE. module Bar refine Numeric do def bar "bar" *

    self end end end ! using Bar puts 5.bar # ruby 2.1 module Huga using Bar puts 5.bar end => "foofoofoofoofoo" ! !
  17. ϦϑϨΫγϣϯ TRACEPOINT trace = TracePoint.new(:call) do |tp| puts "#{tp.defined_class}##{tp.method_id}" puts

    '---------' end trace.enable ! def my_method :my_method end p my_method #=> Object#my_method --------- :my_method