ruby紹介

56
Ruby紹介 Powered by Rabbit 0.6.5 Ruby紹介 とみたまさひろ 2010-08-21

Upload: masahiro-tomita

Post on 15-Jan-2015

2.410 views

Category:

Documents


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

Ruby紹介

とみたまさひろ2010-08-21

Page 2: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

自己紹介

とみた まさひろ✓

プログラマー✓

mailto:[email protected]

http://d.hatena.ne.jp/tmtms✓

http://twitter.com/tmtms✓

1/55

Page 3: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

自己紹介

日本Rubyの会✓

日本MySQLユーザ会✓

Ruby/MySQL ライブラリ✓

Ruby歴, MySQL歴 十数年✓

2/55

Page 4: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

自己紹介

こんな本書きました

3/55

Page 5: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

NSEG #1 で

4/55

Page 6: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

NSEG #3 で

5/55

Page 7: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

今回はRubyの紹

介6/55

Page 8: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

Ruby

http://www.ruby-lang.org✓

オブジェクト指向スクリプト言語✓

まつもとゆきひろ さん✓

ひろゆき じゃないよ✓

7/55

Page 9: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

Matz

8/55

Page 10: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

歴史

Ruby1.8 は 1.x の最終形✓

Ruby1.9 は 2.0 に向けた助走✓

9/55

Page 11: Ruby紹介

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

Page 12: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

特徴11/55

Page 13: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

楽しい12/55

Page 14: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

たのしいRuby

13/55

Page 15: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

プログラマにとって嬉

しい14/55

Page 16: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

余計なことは考えたく

ない15/55

Page 17: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

ファイルコピー

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

16/55

Page 18: Ruby紹介

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

Page 19: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

HTTP GET

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

18/55

Page 20: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

デーモン

Process.daemon

制御端末を切り離し✓

バックグラウンド化✓

カレントディレクトリを / に移動✓

標準入出力,エラー出力を /dev/null にリダイレクト

19/55

Page 21: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

p

人間にわかりやすい形で表示

p Time.now #=> 2010-08-21 01:20:23 +0900p Array.new #=> []

デバッグに便利

20/55

Page 22: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

言語としての特徴

21/55

Page 23: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

初めてのRuby

ただし他のオブジェクト指向言語修得者向け

22/55

Page 24: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

型がない

23/55

Page 25: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

変数に型がない

どんなオブジェクトでも代入可能✓

自分が何かはオブジェクト自身が知っている

a = 123a.class #=> Fixnuma = 'abc'a.class #=> String

24/55

Page 26: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

代入というより…

オブジェクトに貼ったラベル

a = 'abc'b = ab.concat '123'a #=> "abc123"a.object_id == b.object_id

25/55

Page 27: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

読みやすい

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

主観です✓

26/55

Page 28: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

変数のスコープ

1文字目 スコープ[a-z_] メソッドローカル@ インスタンス内@@ クラス内$ グローバル[A-Z] 定数

27/55

Page 29: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

オープンクラス

28/55

Page 30: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

定義済みのクラスを変更可能

# Hoge クラス定義class Hoge def abc endend

# xyz メソッド追加class Hoge def xyz endend

29/55

Page 31: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

すべてがオブジェクト

30/55

Page 32: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

数値もオブジェクト

class Numeric def neg -self endend123.neg #=> -123

31/55

Page 33: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

Rails 界隈では

require 'active_support/all'

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

これは便利!

...っていうかキモい...32/55

Page 34: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

true, false, nil もオブジェクト

true.class #=> TrueClassfalse.class #=> FalseClassnil.class #=> NilClass

33/55

Page 35: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

クラスもオブジェクト

class HogeendHoge.class #=> Classa = Hoge # 変数への代入も可

34/55

Page 36: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

演算子もメソッド

123+456

# これは実は

123.+(456)

35/55

Page 37: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

再定義も可

class Fixnum def +(a) self * a endend123+456 #=> 56088

36/55

Page 38: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

特異メソッド

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

obj = Hoge.newdef obj.hoge ...end

37/55

Page 39: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

モジュール

オブジェクトを持たないクラスのようなもの

名前空間をわけたり

module MyProject class Hoge endend

38/55

Page 40: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

モジュール

メソッド定義しておいて、他のクラスに組み込んだり(Mix-in)

module Abc def xyz ... endendclass Hoge include Abc # xyz メソッドが使えるようになるend

39/55

Page 41: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

ブロック

40/55

Page 42: Ruby紹介

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

Page 43: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

後処理

File.open 'aaa.txt' do |f| f.readend

ブロックを抜けると自動的にファイルがクローズされる

42/55

Page 44: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

イテレータ

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

# 配列の要素を順番にブロックに渡す[1, 2, 3].each do |x| x * 2end

43/55

Page 45: Ruby紹介

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

Page 46: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

Ruby 1.9

45/55

Page 47: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

1.9.2 8/19 リリース!

46/55

Page 48: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

1.8 と結構互換あり

47/55

Page 49: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

VM

バイトコード✓

高速化✓

数倍〜数十倍?✓

48/55

Page 50: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

文字列

1.8 までは文字列はただのバイト列

文字単位の処理が可能✓

文字列オブジェクトが文字コードを持つ

Code Set Independent✓

49/55

Page 51: Ruby紹介

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

Page 52: Ruby紹介

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

Page 53: Ruby紹介

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

Page 54: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

その他便利な機能

多数53/55

Page 55: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

これから使うなら 1.9

54/55

Page 56: Ruby紹介

Ruby紹介 Powered by Rabbit 0.6.5

ご清聴ありがとうございました

55/55