enjoy Ruby! このページをアンテナに追加 RSSフィード

   papandaのRubyを楽しむ日記。

2006-11-25

DaveThomasファンの私。

やはり、プログラミングRubyを購入してしまいました。

というわけで、プログラミングRuby言語編(第二版)の

読書日記を始めます。

プログラミングRuby(言語編)~第1章さあはじめよう。

実行環境インストール

まずは、Rubyのインストールから始まります。

私の環境には、すでに、バージョン1.8.4がインストール済み。

Rubyドキュメント

コマンドラインベースドキュメントがあったんですね。

ri クラス

ri メソッド名

ri クラス.メソッド

で、英語だけどドキュメントを見ることができる。

ありゃ、1章終了。

プログラミングRuby(言語編)~第2章Ruby.new

Rubyの基本

Rubyでのコンストラクタの書き方。

クラス名.new

song1 = Song.new("enjoy Ruby!")


#簡単なプログラム

def say_hello(name)

ret = "Hello World " + name

return ret

end

puts say_hello("papanda")


コメントは、#で始める。

行末のセミコロンは不要。

変数の宣言は不要。代入時に変数が割り当てられる。

メソッドを呼ぶ際の括弧は不要。

puts say_hello "papanda"

でも言いわけだ。

これが、最初の戸惑いだった。

Thomasさんも、単純なケースを除いて、括弧で囲むことを

お勧めしているので、安心してそれに従おう。


ダブルクォートで囲まれた文字列は以下のようなことが

できる。

puts "hello,\npapanda"

これはもちろん、

hello,

papanda

と出力される。


def say_hello(name)

ret = "Hello World #(name)"

return ret

end

という式の展開も行うことができる。

なお、最後の文が戻り値となるので、

def say_hello(name)

"Hello World #(name)"

end

という書き方も許される。


Rubyの命名規則について。

配列ハッシュ

a = [1,'cat',nil]

という書き方。添え字は0はじまり。

a[0]は、1となる。


ハッシュは、

inst_section = {

'cello' => 'string',

'clarinet' => 'woodwind'

}

という書き方。

アクセスするには、

inst_section['cello']

となる。

文修飾子

if count > 10

puts "ten!"

end

は、

puts "ten!" if count > 10

とも書ける。


yield

def call_back

puts "start"

yield

yield

puts "end"

end

call_back {puts "hello"}

結果は、

start

hello

hello

end

メソッドは自分に関連付けられたブロック

yield文で呼び出すことができる。

プログラミングRuby(言語編)~第3章クラスオブジェクト変数

class Song

def initialize(name)

@name=name

end

end

song=Song.new("papanda")

initializeというメソッドが必要。newされた時に呼ばれる。

なお、Rubyは、クラスの内容を追記するのに、

class Song

def call

p @name

end

end

という書き方ができる(!)

song.call

とすると

papanda

が出力される。


class PapandaSong < Song

def initialize(name)

super(name)

end

end

クラス継承


アクセスメソッドの作成。

class Song

def initialize(name)

@name=name

end

def call

p @name

end

attr_reader :name

attr_writer :name

end

song=Song.new("mimi")

song.call #=>mimiと表示される。

song.name="papanda"

song.call #=>papandaと表示される。


クラスメソッドの定義。

class Song

@@name #クラス変数

def Song.class_method

end

end


RubySingleton

class Demo

private_class_method :new

@@demo=nil

def Demo.create

@@demo = new unless @@demo

@@demo

end

end

アクセス制御

class Demo

def demo1 #デフォルトはpublic

end

protected

def demo2

end

public

def demo3

end

private

def demo4

end

end

もしくは

class Demo

def demo1

end

def demo2

end

def demo3

end

def demo4

end

public :demo1,demo3

protected :demo2

private :demo4

end

ポインタだらけ

panda1 = "mimi"

panda1.class #=>String

panda1 #=>"mimi"

panda2 = panda1

panda2.class #=>String

panda2 #=>"mimi"

panda1[0] = 'M'

panda1 #=>"Mimi"

panda2 #=>"Mimi"

変数リファレンスを保持するため、中身が変わる。

まさにポインタ

irb良いね

さくっと、コードの検証ができるから。

ゲスト



トラックバック - http://rubyist.g.hatena.ne.jp/papanda0806/20061125