Ruby紹介
         とみたまさひろ
           2010-08-21



Ruby紹介         Powered by Rabbit 0.6.5
自己紹介
     ✓ とみた まさひろ
     ✓ プログラマー
     ✓ mailto:tommy@tmtm.org
     ✓ http://d.hatena.ne.jp/tmtms
     ✓ http://twitter.c...
自己紹介

     ✓ 日本Rubyの会
     ✓ 日本MySQLユーザ会
     ✓ Ruby/MySQL ライブラリ
     ✓ Ruby歴, MySQL歴 十数年

                               ...
自己紹介




         こんな本書きました

                                3/55
Ruby紹介               Powered by Rabbit 0.6.5
NSEG #1 で




                                4/55
Ruby紹介               Powered by Rabbit 0.6.5
NSEG #3 で




                                5/55
Ruby紹介               Powered by Rabbit 0.6.5
今回は
     Rubyの紹
Ruby紹介
        介            6/55
          Powered by Rabbit 0.6.5
Ruby

     ✓ http://www.ruby-lang.org
     ✓ オブジェクト指向スクリプト言語
     ✓ まつもとゆきひろ さん
     ✓ ひろゆき じゃないよ

                       ...
Matz




                           8/55
Ruby紹介          Powered by Rabbit 0.6.5
歴史




     ✓ Ruby1.8 は 1.x の最終形
     ✓ Ruby1.9 は 2.0 に向けた助走
                                       9/55
Ruby紹介           ...
バージョン
     ✓ x.y.z-pNNN の形式
     ✓ 最新: 1.8.7-p302, 1.9.2-p0
     ✓ y が奇数のは開発版 (1.9を除く)
     ✓ z の違いでも互換がないことも
     ✓ pNNN ...
特徴
Ruby紹介
                 11/55
         Powered by Rabbit 0.6.5
楽しい
                 12/55
Ruby紹介   Powered by Rabbit 0.6.5
たのしいRuby




                            13/55
Ruby紹介              Powered by Rabbit 0.6.5
プログラマ
    にとって嬉
Ruby紹介
      しい         14/55
         Powered by Rabbit 0.6.5
余計なこと
   は考えたく
    ない
Ruby紹介
                 15/55
         Powered by Rabbit 0.6.5
ファイルコピー



         require 'fileutils'
         FileUtils.copy 'srcfile', 'destfile'




                                ...
TCPサーバー

         require 'socket'
         Socket.tcp_server_loop(9999) do |sock|
           Thread.new sock do |s|
     ...
HTTP GET



         require 'open-uri'
         open('http://nseg.jp').read


                                         18...
デーモン
         Process.daemon
   ✓ 制御端末を切り離し
   ✓ バックグラウンド化
   ✓ カレントディレクトリを / に移動
   ✓ 標準入出力,エラー出力を /dev/
     null にリダイレク...
p

    人間にわかりやすい形で表示
         p Time.now #=> 2010-08-21 01:20:23 +0900
         p Array.new #=> []


    デバッグに便利

        ...
言語とし
  ての特徴           21/55
Ruby紹介   Powered by Rabbit 0.6.5
初めてのRuby
         ただし他のオブジェクト指向言語修
         得者向け




                               22/55
Ruby紹介                 Powered b...
型がない




                        23/55
Ruby紹介          Powered by Rabbit 0.6.5
変数に型がない
     ✓ どんなオブジェクトでも代入可能
     ✓ 自分が何かはオブジェクト自身が
       知っている
          a = 123
          a.class #=> Fixnum
        ...
代入というより…
    オブジェクトに貼ったラベル

         a = 'abc'
         b = a
         b.concat '123'
         a #=> "abc123"
         a.o...
読みやすい


     ✓ Pで始まる言語に比べて
     ✓ 主観です


                             26/55
Ruby紹介               Powered by Rabbit 0.6.5
変数のスコープ

         1文字目     スコープ
     [a-z_]     メソッドローカル
     @          インスタンス内
     @@         クラス内
     $          グローバ...
オープ
   ンクラス
Ruby紹介
                 28/55
         Powered by Rabbit 0.6.5
定義済みのクラスを変更可能
         # Hoge クラス定義
         class Hoge
           def abc
           end
         end
         # xyz メソッド...
すべてがオ
  ブジェクト
                 30/55
Ruby紹介   Powered by Rabbit 0.6.5
数値もオブジェクト

         class Numeric
           def neg
             -self
           end
         end
         123.neg #=> -...
Rails 界隈では

         require 'active_support/all'

         3.days.ago
           #=> 2010-08-18 10:38:13 +0900

    これは便利...
true, false, nil もオブジェクト


         true.class #=> TrueClass
         false.class #=> FalseClass
         nil.class   #=> ...
クラスもオブジェクト


         class Hoge
         end
         Hoge.class   #=> Class
         a = Hoge     # 変数への代入も可


         ...
演算子もメソッド


          123+456

          # これは実は
          123.+(456)

                               35/55
Ruby紹介         ...
再定義も可

         class Fixnum
           def +(a)
             self * a
           end
         end
         123+456 #=> 56...
特異メソッド

    特定のオブジェクトだけメソッド追加

         obj = Hoge.new
         def obj.hoge
           ...
         end

                ...
モジュール
    オブジェクトを持たないクラスのような
    もの
    名前空間をわけたり

         module MyProject
           class Hoge
           end
        ...
モジュール
    メソッド定義しておいて、他のクラスに
    組み込んだり(Mix-in)
         module Abc
           def xyz
             ...
           end
   ...
ブロッ
Ruby紹介
          ク        40/55
           Powered by Rabbit 0.6.5
ブロック
         def hoge(arg)
           yield arg*2
         end
         def hoge(arg, &block)
           block.call arg*2...
後処理


         File.open 'aaa.txt' do |f|
           f.read
         end
    ブロックを抜けると自動的にファイルが
    クローズされる
              ...
イテレータ

         # 10回繰り返し
         10.times{|i|
           ...
         }

         # 配列の要素を順番にブロックに渡す
         [1, 2, 3]....
Enumerable
    each メソッドさえあれば
    Enumerable モジュールを include
    して
         [1,2,3].map{|x| x*2} #=> [2,4,6]
         [1,2...
Ruby
Ruby紹介
          1.9       45/55
            Powered by Rabbit 0.6.5
1.9.2
         8/19 リ
Ruby紹介
         リース!         46/55
              Powered by Rabbit 0.6.5
1.8 と結構
    互換あり
                 47/55
Ruby紹介   Powered by Rabbit 0.6.5
VM


     ✓ バイトコード
     ✓ 高速化
     ✓ 数倍〜数十倍?


                             48/55
Ruby紹介               Powered by Rabbit 0...
文字列
     ✓ 1.8 までは文字列はただのバイト
       列
     ✓ 文字単位の処理が可能
     ✓ 文字列オブジェクトが文字コード
       を持つ
     ✓ Code Set Independent
    ...
Encoding

     ✓ リテラル文字列は magic
       comment に依存
         # -*- coding: utf-8 -*-
         s = "あいう"
         s.encoding...
IO は自動変換


         f = File.open('a.txt', 'r+:shift_jis:euc-jp')
         # SJIS ファイルから読んで EUC 文字列を生成する
         f.read
 ...
2038年問題

         # Ruby 1.8
         Time.at 2147483647
              #=> Tue Jan 19 12:14:07 +0900 2038
         Time.at...
その他便
         利な機能
Ruby紹介
          多数        53/55
            Powered by Rabbit 0.6.5
これから使
   うなら 1.9
                 54/55
Ruby紹介   Powered by Rabbit 0.6.5
ご清聴あり
   がとうござ
    いました
Ruby紹介
                 55/55
         Powered by Rabbit 0.6.5
Upcoming SlideShare
Loading in...5
×

Ruby紹介

2,517

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,517
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
14
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Ruby紹介

  1. 1. Ruby紹介 とみたまさひろ 2010-08-21 Ruby紹介 Powered by Rabbit 0.6.5
  2. 2. 自己紹介 ✓ とみた まさひろ ✓ プログラマー ✓ mailto:tommy@tmtm.org ✓ http://d.hatena.ne.jp/tmtms ✓ http://twitter.com/tmtms 1/55 Ruby紹介 Powered by Rabbit 0.6.5
  3. 3. 自己紹介 ✓ 日本Rubyの会 ✓ 日本MySQLユーザ会 ✓ Ruby/MySQL ライブラリ ✓ Ruby歴, MySQL歴 十数年 2/55 Ruby紹介 Powered by Rabbit 0.6.5
  4. 4. 自己紹介 こんな本書きました 3/55 Ruby紹介 Powered by Rabbit 0.6.5
  5. 5. NSEG #1 で 4/55 Ruby紹介 Powered by Rabbit 0.6.5
  6. 6. NSEG #3 で 5/55 Ruby紹介 Powered by Rabbit 0.6.5
  7. 7. 今回は Rubyの紹 Ruby紹介 介 6/55 Powered by Rabbit 0.6.5
  8. 8. Ruby ✓ http://www.ruby-lang.org ✓ オブジェクト指向スクリプト言語 ✓ まつもとゆきひろ さん ✓ ひろゆき じゃないよ 7/55 Ruby紹介 Powered by Rabbit 0.6.5
  9. 9. Matz 8/55 Ruby紹介 Powered by Rabbit 0.6.5
  10. 10. 歴史 ✓ Ruby1.8 は 1.x の最終形 ✓ Ruby1.9 は 2.0 に向けた助走 9/55 Ruby紹介 Powered by Rabbit 0.6.5
  11. 11. バージョン ✓ x.y.z-pNNN の形式 ✓ 最新: 1.8.7-p302, 1.9.2-p0 ✓ y が奇数のは開発版 (1.9を除く) ✓ z の違いでも互換がないことも ✓ pNNN はパッチリリース ✓ 1.9 は 2.0 に向けて大幅な変更 10/55 Ruby紹介 Powered by Rabbit 0.6.5
  12. 12. 特徴 Ruby紹介 11/55 Powered by Rabbit 0.6.5
  13. 13. 楽しい 12/55 Ruby紹介 Powered by Rabbit 0.6.5
  14. 14. たのしいRuby 13/55 Ruby紹介 Powered by Rabbit 0.6.5
  15. 15. プログラマ にとって嬉 Ruby紹介 しい 14/55 Powered by Rabbit 0.6.5
  16. 16. 余計なこと は考えたく ない Ruby紹介 15/55 Powered by Rabbit 0.6.5
  17. 17. ファイルコピー require 'fileutils' FileUtils.copy 'srcfile', 'destfile' 16/55 Ruby紹介 Powered by Rabbit 0.6.5
  18. 18. TCPサーバー require 'socket' Socket.tcp_server_loop(9999) do |sock| Thread.new sock do |s| s.each do |line| puts line end end end 17/55 Ruby紹介 Powered by Rabbit 0.6.5
  19. 19. HTTP GET require 'open-uri' open('http://nseg.jp').read 18/55 Ruby紹介 Powered by Rabbit 0.6.5
  20. 20. デーモン Process.daemon ✓ 制御端末を切り離し ✓ バックグラウンド化 ✓ カレントディレクトリを / に移動 ✓ 標準入出力,エラー出力を /dev/ null にリダイレクト 19/55 Ruby紹介 Powered by Rabbit 0.6.5
  21. 21. p 人間にわかりやすい形で表示 p Time.now #=> 2010-08-21 01:20:23 +0900 p Array.new #=> [] デバッグに便利 20/55 Ruby紹介 Powered by Rabbit 0.6.5
  22. 22. 言語とし ての特徴 21/55 Ruby紹介 Powered by Rabbit 0.6.5
  23. 23. 初めてのRuby ただし他のオブジェクト指向言語修 得者向け 22/55 Ruby紹介 Powered by Rabbit 0.6.5
  24. 24. 型がない 23/55 Ruby紹介 Powered by Rabbit 0.6.5
  25. 25. 変数に型がない ✓ どんなオブジェクトでも代入可能 ✓ 自分が何かはオブジェクト自身が 知っている a = 123 a.class #=> Fixnum a = 'abc' a.class #=> String 24/55 Ruby紹介 Powered by Rabbit 0.6.5
  26. 26. 代入というより… オブジェクトに貼ったラベル a = 'abc' b = a b.concat '123' a #=> "abc123" a.object_id == b.object_id 25/55 Ruby紹介 Powered by Rabbit 0.6.5
  27. 27. 読みやすい ✓ Pで始まる言語に比べて ✓ 主観です 26/55 Ruby紹介 Powered by Rabbit 0.6.5
  28. 28. 変数のスコープ 1文字目 スコープ [a-z_] メソッドローカル @ インスタンス内 @@ クラス内 $ グローバル [A-Z] 定数 27/55 Ruby紹介 Powered by Rabbit 0.6.5
  29. 29. オープ ンクラス Ruby紹介 28/55 Powered by Rabbit 0.6.5
  30. 30. 定義済みのクラスを変更可能 # Hoge クラス定義 class Hoge def abc end end # xyz メソッド追加 class Hoge def xyz end end 29/55 Ruby紹介 Powered by Rabbit 0.6.5
  31. 31. すべてがオ ブジェクト 30/55 Ruby紹介 Powered by Rabbit 0.6.5
  32. 32. 数値もオブジェクト class Numeric def neg -self end end 123.neg #=> -123 31/55 Ruby紹介 Powered by Rabbit 0.6.5
  33. 33. Rails 界隈では require 'active_support/all' 3.days.ago #=> 2010-08-18 10:38:13 +0900 これは便利! ...っていうかキモい... 32/55 Ruby紹介 Powered by Rabbit 0.6.5
  34. 34. true, false, nil もオブジェクト true.class #=> TrueClass false.class #=> FalseClass nil.class #=> NilClass 33/55 Ruby紹介 Powered by Rabbit 0.6.5
  35. 35. クラスもオブジェクト class Hoge end Hoge.class #=> Class a = Hoge # 変数への代入も可 34/55 Ruby紹介 Powered by Rabbit 0.6.5
  36. 36. 演算子もメソッド 123+456 # これは実は 123.+(456) 35/55 Ruby紹介 Powered by Rabbit 0.6.5
  37. 37. 再定義も可 class Fixnum def +(a) self * a end end 123+456 #=> 56088 36/55 Ruby紹介 Powered by Rabbit 0.6.5
  38. 38. 特異メソッド 特定のオブジェクトだけメソッド追加 obj = Hoge.new def obj.hoge ... end 37/55 Ruby紹介 Powered by Rabbit 0.6.5
  39. 39. モジュール オブジェクトを持たないクラスのような もの 名前空間をわけたり module MyProject class Hoge end end 38/55 Ruby紹介 Powered by Rabbit 0.6.5
  40. 40. モジュール メソッド定義しておいて、他のクラスに 組み込んだり(Mix-in) module Abc def xyz ... end end class Hoge include Abc # xyz メソッドが使えるようになる end 39/55 Ruby紹介 Powered by Rabbit 0.6.5
  41. 41. ブロッ Ruby紹介 ク 40/55 Powered by Rabbit 0.6.5
  42. 42. ブロック def hoge(arg) yield arg*2 end def hoge(arg, &block) block.call arg*2 end hoge 123 do |n| ... end hoge(123){|n| ... } 41/55 Ruby紹介 Powered by Rabbit 0.6.5
  43. 43. 後処理 File.open 'aaa.txt' do |f| f.read end ブロックを抜けると自動的にファイルが クローズされる 42/55 Ruby紹介 Powered by Rabbit 0.6.5
  44. 44. イテレータ # 10回繰り返し 10.times{|i| ... } # 配列の要素を順番にブロックに渡す [1, 2, 3].each do |x| x * 2 end 43/55 Ruby紹介 Powered by Rabbit 0.6.5
  45. 45. Enumerable each メソッドさえあれば Enumerable モジュールを include して [1,2,3].map{|x| x*2} #=> [2,4,6] [1,2,3].max #=> 3 [3,2,1].sort #=> [1,2,3] [1,2,3].select{|x| x.odd?} #=> [1,3] 44/55 Ruby紹介 Powered by Rabbit 0.6.5
  46. 46. Ruby Ruby紹介 1.9 45/55 Powered by Rabbit 0.6.5
  47. 47. 1.9.2 8/19 リ Ruby紹介 リース! 46/55 Powered by Rabbit 0.6.5
  48. 48. 1.8 と結構 互換あり 47/55 Ruby紹介 Powered by Rabbit 0.6.5
  49. 49. VM ✓ バイトコード ✓ 高速化 ✓ 数倍〜数十倍? 48/55 Ruby紹介 Powered by Rabbit 0.6.5
  50. 50. 文字列 ✓ 1.8 までは文字列はただのバイト 列 ✓ 文字単位の処理が可能 ✓ 文字列オブジェクトが文字コード を持つ ✓ Code Set Independent 49/55 Ruby紹介 Powered by Rabbit 0.6.5
  51. 51. Encoding ✓ リテラル文字列は magic comment に依存 # -*- coding: utf-8 -*- s = "あいう" s.encoding #=> #<Encoding:UTF-8> s2 = s.encode "cp932" s2.encoding #=> #<Encoding:Windows-31J> 50/55 Ruby紹介 Powered by Rabbit 0.6.5
  52. 52. IO は自動変換 f = File.open('a.txt', 'r+:shift_jis:euc-jp') # SJIS ファイルから読んで EUC 文字列を生成する f.read # 文字列を SJIS に変換して書き込む f.write 'xxx' 51/55 Ruby紹介 Powered by Rabbit 0.6.5
  53. 53. 2038年問題 # Ruby 1.8 Time.at 2147483647 #=> Tue Jan 19 12:14:07 +0900 2038 Time.at 2147483648 # bignum too big to convert into `long' (RangeError) # Ruby 1.9 Time.at 2147483648 #=> 2038-01-19 12:14:08 +0900 Time.at 9999999999 #=> 2286-11-21 02:46:39 +0900 Time.at 99999999999 #=> 5138-11-16 18:46:39 +0900 52/55 Ruby紹介 Powered by Rabbit 0.6.5
  54. 54. その他便 利な機能 Ruby紹介 多数 53/55 Powered by Rabbit 0.6.5
  55. 55. これから使 うなら 1.9 54/55 Ruby紹介 Powered by Rabbit 0.6.5
  56. 56. ご清聴あり がとうござ いました Ruby紹介 55/55 Powered by Rabbit 0.6.5
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×