class List #Listクラスの定義開始 attr_accessor :plot, :species, :abundance #アクセスメソッド def initialize(plot="new_plot", species="new_species", abundance=0) #初期化の定義とデフォルトの初期値の設定 @plot = plot #インスタンス変数に代入 @species = species #同上 @abundance = abundance #同上 end #initializeメソッドここまで end #Listクラスここまで list1 = List.new #Listクラスのインスタンス作成 puts list1.plot #plotメソッドの呼出しと出力 puts list1.species #speciesメソッドの呼出しと出力 puts list1.abundance #abundanceメソッドの呼出しと出力 list1 = List.new("plot2","species2",0.5) puts list2.plot puts list2.species puts list2.abundance
順番が逆になりますが、まず initialize(plot="new_plot", species="new_species", abundance=0) についてです。これは、初期化メソッドと言います。 list1 = List.new という命令で、インスタンスを作ったときに、そのインスタンスに与えるオブジェクトを定義しています。このインスタンスには plot と speceis と abundance という3つの項目が与えられ、何も指定がなければ、new_plot と species と 0 が初期値として入ります。list1 にはこの初期値が入っています。それに対して、list2 では new の後に("plot2","species2",0.5) とそれぞれの値を指定をしていますので、 plot と speceis と abundance とにはそれぞれ、 plot2 と species2 と 0.5 が入ります。
list1 と list2 では次に続く「@plot = plot」で plot に入った値をさらに @plot という変数に代入しています。なぜ、わざわざこんな2度手間なことをするかというと、 plot という変数は1つしかありません。これに対して @plot という変数はインスタンスごとに別の変数として使うことができます。つまり、 list1 の @plot と list2 の @plot とは別物として扱うわけです。続く @species @abundance についても同じことをしています。
クラスの定義の始めに出てくる attr_accessor は少し説明が難しいですが、大雑把に言うと、:の後に書かれた plot などの変数を参照したり変更したりできるようにするためのもので、これを書いておかないとプログラムの下で書いている plot などのメソッドを使うことができなくなります。 attr_accessor を書かなくても、別に plot というメソッドを定義すればいいのですが、それよりも attr_accessor を使う方が簡単にできます。ちゃんとした説明ができなくて逃げているだけですが、とりあえずは「おまじない」として覚えて置いてください。
最後の puts は print とすることはほとんど同じです。違う点は、最後に改行を書かなくても、改行するというところです。
実際に上のプログラムを実行すると次のように出力されるはずです。
new_plot new_species 0 plot2 species2 0.5
とりあえず、これでインスタンスは作ることができるようになりました。しかし、いちいち、 list_n = List.new("MT001","Miscanthus sinensis",0.3) などと一つずつと書いて、データを入力していったのではきりがありません。
次のページでは、インスタンス(オブジェクト)をまとめて管理するための配列について説明します。