前のページの例から続けて、テレビとビデオで説明を少しします。 テレビとビデオでは「電源を入れる」「電源を消す」というメソッドは共通しています。そこで、両方を家電製品というオブジェクトとして考えると、共通したメソッドはひとつだけ定義すればいいことになります。
Rubyには用意されているクラスもあるし、新しいクラスを自分で作ることもできます。ここまでは、プログラムとは直接関係ない例で話を続けていました。さて、ここからいよいよプログラムをしていきましょう。はじめはクラスを作るところからです。
ところで、これからプログラムを説明するときに、入力する部分と出力された部分を分けて表示するようにします。こんな感じです。
入力する部分はこの形式で表示します。
出力された部分はこの形式で表示します。
class List #Listクラスの定義開始 def hello #helloメソッドの定義 print "Hello, World!","\n" #Hello, World!を表示。\nは改行文字 end #helloメソッドここまで end #Listクラスここまで list = List.new #Listクラスのインスタンス作成 list.hello #helloメソッドの呼出し
Hello, World!
どうですか?なりましたか?
パソコンに Hello, World! て書かして何が面白いねん、と思うでしょうが、とりあえず我慢してください。なんせ定石なんで。
ここから具体的に説明をしていきます。
class というのは、これからクラスを定義しますということです。ここではクラスの名前は List としています。クラスの名前は大文字のアルファベットで始めなければなりません。2文字目以降は、大文字か小文字のアルファベットか数字か「_」のみを使うことができます。
定義は end まで続きます。ただし、中にメソッドの定義があるので入れ子上になっているときは、対応する end が終わりになります。
「#」以降はコメントと言って、自由にメモなどを書くことができます。 # から行末まではプログラムとしては無視されます。
def hello というのは hello というメソッドを定義するということです。メソッドはアルファベットの小文字で始める必要があります。2文字目以降はクラスの名前と同じです。
メソッドの定義も end までです。ここでは hello というメソッドが呼び出されたら、 print "Hello, World!","\n" を実行しなさい、ということを決めています。
list = List.new では、まず List.new により新しく List クラスの新しいオブジェクトを作って、そのあと作ったオブジェクトを左辺の list という変数に代入しています。
List.new という書き方は覚えて置いてください。これは、オブジェクト.メソッドという書き方で、「.」の前のオブジェクトに対して、「.」の後ろのメソッドを実行させるという意味です。Rubyではクラスもオブジェクトなので、 List というオブジェクトに対して、newというメソッド与えていることになります。
list.hello ではその作った list というオブジェクトに対して、hello というメソッドを与えています。その結果、上で定義した print "Hello, World!","\n" が呼び出されます。print はその後の「"」と「"」で囲まれた部分を出力する命令です。そのため、 Hello, World! という文字が表示されるわけです。\n はコメントで書いているように、改行文字をあらわしています。この他にも、特殊な意味をもつ \ で始まるものがあります。よく使うものは次の通りです。
\n:改行
\t:タブ
\s:スペース
この例では、list の代わりに、tmp(List.new で作る必要があります) でも何でも List クラスのオブジェクトは hello というメソッドに対しては Hello, World! と返すことになります。その他のメソッドは定義されていないので、例えば hey というメソッドを与えたとしても、エラーになります。
次のページでは、もっと使えるクラスを作っていきます。