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