index page
目次へ戻る   前へ戻る 次へ進む

クラス


  • クラスとは

    前のページの例から続けて、テレビとビデオで説明を少しします。 テレビとビデオでは「電源を入れる」「電源を消す」というメソッドは共通しています。そこで、両方を家電製品というオブジェクトとして考えると、共通したメソッドはひとつだけ定義すればいいことになります。

  • 電化製品:電源を入れる。電源を消す。
  • テレビ:家電製品のメソッド+チャンネルを変える。
  • ビデオ:家電製品のメソッド+録画する。 この家電製品・テレビ・ビデオなどのそれぞれのまとまりのことをクラスといいます。クラスには階層性があり、この例で言うと家電製品がテレビやビデオの上位に位置しています。

    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 というメソッドを与えたとしても、エラーになります。

    次のページでは、もっと使えるクラスを作っていきます。


    目次へ戻る   前へ戻る 次へ進む