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

   papandaのRubyを楽しむ日記。

2006-09-02

たのしいRuby(4)~オブジェクト指向言語Ruby

繰り返し

たのしいRubyの第6章。


4.times { |i|

print i,"回目\n"

}


この場合、iにループ回数が代入されますよと。

このtimesには慣れましたが、新たに||が出現。

これも今までにはな記法です。

names = ["ito","sato","yamada"]

names.each {|name|

print name,"\n"

}


オブジェクトの集まりに対しても適用可能。

次。


break
next
redo

繰り返しの制御です。break,nextはわかる。

redoって?!

これは、nextと対比させると理解しやすい。


["ito","sato","yamada"].each {|name|

i += 1

if i == 2

next

end

p [i,name]

}


★結果

[1,"ito"]

[3,"yamada"]

これは納得。


["ito","sato","yamada"].each {|name|

i += 1

if i == 2

redo

end

p [i,name]

}


★結果

[1,"ito"]

[3,"sato"]

[4,"yamada"]

要素はすべて出力します。もう一度同じ繰り返しを行うわけですね。

続いては、第7章。

メソッド

return文は省略可能ですと。

その場合は、そのメソッドの中で最後に得られる値が返り値となる。


def hello(name)

"helllo " + name #return文不要

end

次、第8章。


クラスモジュール

initializeメソッド。

ruby言語でのコンストラクタですね。


アクセスメソッド。

getter、setterは定義があって、一文で済む。驚き。


attr_reader :name #=> 参照のみ可能にする。getter

attr_writer :name #=> 変更のみ可能にする。setter

attr_accesstor :name #=> 参照・変更の両方を可能にする。getter/setterを同時に定義


クラスメソッドの書き方。

def クラス名.メッソド名 ~ end

class << クラス名 ~ def メソッド名 ~ end end

class クラス名 ~ def self.メソッド名 ~ end end


なに、②の書き方。意味不明

rubyはやっぱり凄い。既に定義済みのクラスにしれっとメソッドを追加できるとのこと。


定数。

クラス名::定数名」で参照可能。::という新しい記号が出てきた。


クラス変数

@@で始める変数


Mix-inという機能で、クラスとは別に定義したメソッドを追加できるとのこと。


module Hoge

end


class Foo

include Hoge

end


class Bar

include Hoge

end


これで、Foo/Barの両方で、共通の機能のHogeが使えると。

クラス継承とは似て非なるものですね。

RubyJava同様多重継承できないために、この仕様があるようです。

次は、第9章

例外処理

例外処理の書き方。


begin

文(例外が起きる可能性のある処理)

rescue

文(例外が起きた場合の処理。)

ensure

文(例外の有無にかかわらず処理。finallyですね)

end


rescueを複数書けば、複数の例外に対処可能です、と。

というわけで、第1部完了~。

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

2006-08-30

たのしいRuby(3)~便利なRuby

今日は、まずは第2章便利なオブジェクト

配列

name = ["hoge","poyo","foo"]

p name[0] #=> "hoge"

p name[1] #=> "poyo"

name[2] = "bar"

p name[2] #=> "bar"


この辺の違和感はない。


name.each {|n|

print n,"\n"

}


★結果

hoge

poyo

bar

出た。なんとか.each

慣れると、分かりやすい構文に見えてくるから不思議

ハッシュ

name_tbl = {"hoge" => "man","foo" => "woman"}

p name_tbl["hoge"]

p name_tbl["foo"]


=> という記号に馴染みがありませんが、これも理解しやすい。


name_tbl.each {|key,val|

print key,",",val,"\n"

}


★結果

hoge,man

foo,woman


ハッシュも問題ないですね。


続いて第3章コマンドを作ろう

ファイル入出力

name = ARGV[0]

file = open(name)

text = file.read

print text

file.close


たった5行ですか。簡単に書けるな~。

ARGVコマンドライン引数ですよと。

一行づつ読み込むのであれば、


name = ARGV[0]

file = open(name)

while text = file.gets do

print text

end

file.close


次は第4章。

オブジェクト

Rubyデータは、全てオブジェクトですよと。

数値も文字列も正規表現オブジェクトも、範囲オブジェクトも…。

ここを抑えていれば、表現上の戸惑いも減りそう。

変数

変数は以下のとおりの種類がある。

ローカル変数

⇒先頭が小文字。あるいはアンスコ

②グローバル変数

$始まり

インスタンス変数

⇒@始まり

クラス変数

⇒@@始まり

⑤擬似変数

⇒selfなど決まった名前をもつ


$とか@とか@@とか…

スクリプト言語っぽくなってきた。

定数

大文字始まり。


オブジェクトの同一性

P66のコラムはちょっと大事ですね。

全てのオブジェクトは、object_idアイデンティティを持っていますよと。

2つのオブジェクトが同じかどうかは、equal?メソッドを使う。


str1="foo"

str2="f"+"o"+"o"

str3=str1

p str1.equal?(str2) #=>falseobject_idが異なる)

p str1.equal?(str3) #=>trueobject_idが同じ)

p str1 == str2 #=>true(値が同じ)


このあたりは、Cをやってきていると理解がしやすい。

要するに、変数がさしている先(ポインタ)が同じかどうかってこと。

次は、第5章。

条件判断

unless 条件 then

 文

end


条件が満たさなかったら、文を実行すると。

これは、他にはない構文ですね。

if not 条件 then だけでなく、構文として

こういう書き方をちゃんと用意している。


Rubyは、こういう、ひとつの課題に対する

書き方がいくつか用意されているケースが

多いですね。

便利な反面、初心者は混乱するかも。

まあ、全て使いこなす必要はないか。


今日はここまで!寝よ。

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

2006-08-29

たのしいRuby(2)~pって!

「たのしいRuby」も既に、19章まで読みましたが(19/24)、

改めて、振り出しに戻って振り返ることにしました。

言語系の私にとっては中々、おもろいこと*1ことが書いてあります。


第1章は、「はじめてのRuby」。

HelloRubyをコンソールに出しましょう…って懐かしいなぁ。

こういう、プログラム言語の文法書の最初は、Helloって言わせましょう

という元祖は、カーニハンとリッチーの「プログミング言語C」でしたっけ。


print("Hello,

Ruby

!

")


改行されて、このまんま出力されるわけね。

次。


print("Hello, ", "Ruby", ".", "\n")

これ何?

引数として4つわたるってことがじゃないの?


print('Hello, Ruby.')

シングルクォーテーションなら、一つとして渡さないといけないのか?

とりあえずおいとこ。

次。

putsメソッドはまだわかる。

しかし、''p''って!まあいいけど。

次。


''100.times{print "hoge"}''

何とか.times

これが、C言語系の頭じゃ理解しにくいんですよ。

要するに「100」もオブジェクトということか。

この辺が、完全オブジェクト指向言語を感じさせますね。


というわけで、第1章おわり。寝よ。

*1関西弁。面白いこと

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

2006-08-28

たのしいRuby(1)~きっかけ

最初は、Railsを調べることが、目的だったんです。AWDwRを使って。

RailsによるアジャイルWebアプリケーション開発

RailsによるアジャイルWebアプリケーション開発

しかし、AWDwRだけでは、段々苦しくなってきました。

そもそも、文法が怪しい。

Webでちょこちょこ調べながら進めていたのですが、どうもはかどらない。


「3.times~?」

配列の途中に要素追加~?」


言語から出発して、C言語系のプログラム言語

染まってきていた私にとって、Rubyの文法は、かなりぶっとんで

いました。


やはり、足元を固めないと駄目だねということで、文法書を

漁りました。その中の一冊が、「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」でした。


「たのしいRubyか…」


そのビギナーっぷりと、仕事では、ほとんどコーティングをしなくなったこともあり

買うまでに少し葛藤がありましたが、「達人プログラマー」(ISBN:4894712741)の

「毎年少なくとも一つの言語学習する」という言葉

思い出し、超久しぶりに文法書を購入することにしました。


文法書の購入は、実にJavaを始めた新人の頃まで遡ります。

それ以降は、VBにしろ、PLSQLにしろ、Perl、PHPetc

どれも、サンプルコードかWebの情報だけで、大丈夫でした。

最初にC言語⇒Javaの順で、習得したため下地ができていました。

(C言語は偉大だ。)


Rubyは、さすが完全オブジェクト指向言語を謳うだけあって、

記法ユニーク

しかし、その分、今までの言語にはない”面白さ”があるように思いました。

会社に入る前(だいぶ前になっちゃった…)に、戸惑いながらも、

ワクワクしながら、C言語を覚えるのに必死だった頃を思い出しました。


「ちょっと本格的にやってみるか。」と、

楽しいRubyにどっぷりと漬かり始めています。


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

2006-08-27自己紹介

もともとは京都に住んでいました。

会社も、大阪にあるメーカSierでした。

思うところあって、転職を決意し、埼玉に移住したのが

2ヶ月前。今は、東京の独立系Sierに勤務しています。


最近埼玉の、中途半端な発展振りに、愛着が

湧いてきました。

最初こそ、埼玉県大宮(玄関口)の駅前の賑わいに

圧倒されましたが、なんのことはない、駅から歩いて

5分もすれば、見事な住宅街。

がんばって急に発展しました!

ってな感じが出てて、応援したくなります。


Rubyに関しては、最近本格的に始めたところです。

「たのしいRuby」と「AWDwR」を使って、Rails中心に勉強していますが、

まず、Rubyの文法に苦戦中。

C言語系の頭ではRubyの文法は不思議なところがいっぱい。


というわけで、ぼちぼち*1やっていこうと思っています。

どうぞ宜しくお願いいたします。(_ _)


↓他にもSE仕事のこと、本のことなどを書いています。

http://d.hatena.ne.jp/papanda0806/

*1:関西弁。ちょっとづつ

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