More Related Content More from Masahiro Tomita More from Masahiro Tomita (20) Ruby紹介1. Ruby紹介
とみたまさひろ
2010-08-21
Ruby紹介 Powered by Rabbit 0.6.5
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. 自己紹介
✓ 日本Rubyの会
✓ 日本MySQLユーザ会
✓ Ruby/MySQL ライブラリ
✓ Ruby歴, MySQL歴 十数年
2/55
Ruby紹介 Powered by Rabbit 0.6.5
4. 自己紹介
こんな本書きました
3/55
Ruby紹介 Powered by Rabbit 0.6.5
5. NSEG #1 で
4/55
Ruby紹介 Powered by Rabbit 0.6.5
6. NSEG #3 で
5/55
Ruby紹介 Powered by Rabbit 0.6.5
7. 今回は
Rubyの紹
Ruby紹介
介 6/55
Powered by Rabbit 0.6.5
8. Ruby
✓ http://www.ruby-lang.org
✓ オブジェクト指向スクリプト言語
✓ まつもとゆきひろ さん
✓ ひろゆき じゃないよ
7/55
Ruby紹介 Powered by Rabbit 0.6.5
9. Matz
8/55
Ruby紹介 Powered by Rabbit 0.6.5
10. 歴史
✓ Ruby1.8 は 1.x の最終形
✓ Ruby1.9 は 2.0 に向けた助走
9/55
Ruby紹介 Powered by Rabbit 0.6.5
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
13. 楽しい
12/55
Ruby紹介 Powered by Rabbit 0.6.5
14. たのしいRuby
13/55
Ruby紹介 Powered by Rabbit 0.6.5
15. プログラマ
にとって嬉
Ruby紹介
しい 14/55
Powered by Rabbit 0.6.5
16. 余計なこと
は考えたく
ない
Ruby紹介
15/55
Powered by Rabbit 0.6.5
17. ファイルコピー
require 'fileutils'
FileUtils.copy 'srcfile', 'destfile'
16/55
Ruby紹介 Powered by Rabbit 0.6.5
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. HTTP GET
require 'open-uri'
open('http://nseg.jp').read
18/55
Ruby紹介 Powered by Rabbit 0.6.5
20. デーモン
Process.daemon
✓ 制御端末を切り離し
✓ バックグラウンド化
✓ カレントディレクトリを / に移動
✓ 標準入出力,エラー出力を /dev/
null にリダイレクト 19/55
Ruby紹介 Powered by Rabbit 0.6.5
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. 言語とし
ての特徴 21/55
Ruby紹介 Powered by Rabbit 0.6.5
23. 初めてのRuby
ただし他のオブジェクト指向言語修
得者向け
22/55
Ruby紹介 Powered by Rabbit 0.6.5
24. 型がない
23/55
Ruby紹介 Powered by Rabbit 0.6.5
25. 変数に型がない
✓ どんなオブジェクトでも代入可能
✓ 自分が何かはオブジェクト自身が
知っている
a = 123
a.class #=> Fixnum
a = 'abc'
a.class #=> String
24/55
Ruby紹介 Powered by Rabbit 0.6.5
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. 読みやすい
✓ Pで始まる言語に比べて
✓ 主観です
26/55
Ruby紹介 Powered by Rabbit 0.6.5
28. 変数のスコープ
1文字目 スコープ
[a-z_] メソッドローカル
@ インスタンス内
@@ クラス内
$ グローバル
[A-Z] 定数
27/55
Ruby紹介 Powered by Rabbit 0.6.5
29. オープ
ンクラス
Ruby紹介
28/55
Powered by Rabbit 0.6.5
30. 定義済みのクラスを変更可能
# Hoge クラス定義
class Hoge
def abc
end
end
# xyz メソッド追加
class Hoge
def xyz
end
end
29/55
Ruby紹介 Powered by Rabbit 0.6.5
32. 数値もオブジェクト
class Numeric
def neg
-self
end
end
123.neg #=> -123
31/55
Ruby紹介 Powered by Rabbit 0.6.5
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. true, false, nil もオブジェクト
true.class #=> TrueClass
false.class #=> FalseClass
nil.class #=> NilClass
33/55
Ruby紹介 Powered by Rabbit 0.6.5
35. クラスもオブジェクト
class Hoge
end
Hoge.class #=> Class
a = Hoge # 変数への代入も可
34/55
Ruby紹介 Powered by Rabbit 0.6.5
36. 演算子もメソッド
123+456
# これは実は
123.+(456)
35/55
Ruby紹介 Powered by Rabbit 0.6.5
37. 再定義も可
class Fixnum
def +(a)
self * a
end
end
123+456 #=> 56088
36/55
Ruby紹介 Powered by Rabbit 0.6.5
38. 特異メソッド
特定のオブジェクトだけメソッド追加
obj = Hoge.new
def obj.hoge
...
end
37/55
Ruby紹介 Powered by Rabbit 0.6.5
39. モジュール
オブジェクトを持たないクラスのような
もの
名前空間をわけたり
module MyProject
class Hoge
end
end
38/55
Ruby紹介 Powered by Rabbit 0.6.5
40. モジュール
メソッド定義しておいて、他のクラスに
組み込んだり(Mix-in)
module Abc
def xyz
...
end
end
class Hoge
include Abc
# xyz メソッドが使えるようになる
end
39/55
Ruby紹介 Powered by Rabbit 0.6.5
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. 後処理
File.open 'aaa.txt' do |f|
f.read
end
ブロックを抜けると自動的にファイルが
クローズされる
42/55
Ruby紹介 Powered by Rabbit 0.6.5
44. イテレータ
# 10回繰り返し
10.times{|i|
...
}
# 配列の要素を順番にブロックに渡す
[1, 2, 3].each do |x|
x * 2
end
43/55
Ruby紹介 Powered by Rabbit 0.6.5
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
47. 1.9.2
8/19 リ
Ruby紹介
リース! 46/55
Powered by Rabbit 0.6.5
48. 1.8 と結構
互換あり
47/55
Ruby紹介 Powered by Rabbit 0.6.5
49. VM
✓ バイトコード
✓ 高速化
✓ 数倍〜数十倍?
48/55
Ruby紹介 Powered by Rabbit 0.6.5
50. 文字列
✓ 1.8 までは文字列はただのバイト
列
✓ 文字単位の処理が可能
✓ 文字列オブジェクトが文字コード
を持つ
✓ Code Set Independent
49/55
Ruby紹介 Powered by Rabbit 0.6.5
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. 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. 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. その他便
利な機能
Ruby紹介
多数 53/55
Powered by Rabbit 0.6.5
55. これから使
うなら 1.9
54/55
Ruby紹介 Powered by Rabbit 0.6.5
56. ご清聴あり
がとうござ
いました
Ruby紹介
55/55
Powered by Rabbit 0.6.5