分RubyTweet広告この章ではクラスについて説明します。今までのプログラムでは変数とメソッドを扱ってきましたが、クラスと言う機能を使うことで、多くの変数とメソッドを1つの機能体として働かせてデータを処理することが出来ます。クラスとは物を作る設計図に例えられます。設計図は車や家や鉛筆をつくる場合に必要ですが、この設計図に当たるものがクラスです。車や家や鉛筆の中には色々な部品が含まれていますが、それらの部品には「状態」や「ふるまい」があります。鉛筆であれば「状態」は鉛筆の形、芯、線の濃さなどで、「ふるまい」は線を引く、削るなどの動作です。その「状態」や「ふるまい」をクラスと言う設計図に書いていきます。「状態」を変数で書き、「ふるまい」をメソッドで書くことになります。その「状態」や「ふるまい」に指示を出すのはオブジェクトの役割です。「線を消す」など具体的な指示をオブジェクトと言う司令塔から出します。クラスの基本構文は以下の通りです。クラス名の初めの一文字目は大文字のアルファベットで書きます。classとendの間に変数やメソッドなどを記述して、クラスの中身を作ります。クラスはただの設計図なので、このクラスに指示を出す必要がありますが、それがオブジェクトです。〇引数は省略できます。〇このオブジェクトはインスタンスとも呼ばれています。クラスの例を見てみましょう。マークの付いている変数がありますが、これはインスタンス変数と呼ばれていまして、クラスの中で使われます。説明しましたが、このオブジェクトを作成する過程でクラスの中のinitializeメソッドを自動的に呼び出してくれます。nyuukinメソッドやshukkinメソッドは自身で作ったメソッドですが、このinitializeメソッドはRubyであらかじめ定義されているメソッドです。中の引数100000がinitializeメソッドの引数(この例ではc)に入ります。他の言語ではコンストラクタと呼ばれる機能です。このようにinitializeメソッドを使ってインスタンス変数に値を設定することが出来ます。以下の通り、初めからインスタンス変数に値を設定することもできます。ように引数を省略できます。次に以下の箇所の説明をします。するとクラス内のメソッドが実行されます。最後にshowメソッドを出力するとnyuukinメソッドやshukkinメソッドで計算された結果が入っている@zandakaが返されますので、これをprintで出力しています。結果は「91000」です。次の例はinitializeメソッドの引数にデフォルト値を設定する例です。デフォルト値を設定してください。メソッドの章で説明した通り、メソッドにはあらかじめ値を設定することができます。このようにメソッドに引数を設定した時にはオブジェクトの引数をカラにしても、そのメソッドの引数の設定値が使用されます。先ほども説明しましたが、もう一度クラスの中のメソッドを呼び出す方法について説明します。この例ではクラスの中で3つのメソッドを定義しています。いう構文で書きます(initializeメソッドだけはオブジェクトを作成過程で自動的に呼び出されるので、明示的にこの構文を使う必要はありません)。この構文でメソッドにデータを入れていきます。この例では以下のように書いています。引数が無い場合にはshowメソッドのように省略することができます。これらのメソッドはオブジェクトからアクセスするのでインスタンスメソッドと言います。書くことを覚えておいてください。次にインスタンス変数について説明します。インスタンス変数はインスタンスメソッドからのみ参照できますので、メソッドを通してインスタンス変数の値を取得します。この例ではすべてメソッドの中でインスタンス変数の値を足したり、引いたりしています。オブジェクトは1つだけではなく、次のように変数を変えていただくと何個でも作ることが出来ます。この例ではbooksとbooks2の2つを作成しています。オブジェクトをたくさん作成してもインスタンス変数はオブジェクトごとに値が設定されますので、booksの@zandakaとbooks2の@zandakaの間には関係性はありません。結果は以下の通りです。次の例を見てみましょう。initializeメソッドでインスタンス変数に値を設定することもできますし、setメソッド(メソッド名はsetを付けなくても構いません)を使っても値を設定することができます。この例ではsetメソッドで設定した値でinitializeメソッドで設定した値を上書きしていますが、initializeメソッドで設定したデータよりsetメソッドで設定したデータの方が優先されます。setメソッドだけで値を設定したい場合にはinitializeメソッドは書かなくても結構です。setメソッドについて説明します。インスタンス変数に値をセットするためにはinitializeメソッドやsetメソッドを通常使用します。=>「set..」というのはインスタンス変数の値を設定する時に使います。「set..」で書かなくてはならないという決まりがあるわけではありませんが、解りやすいので慣習になっています。通常はインスタンス変数ごとにsetメソッドを書きます。次はgetメソッドについて説明します。=>「get..」と言うのは値を呼び出し元に返す時に使います。「get..」で書かなくてはならないと言う決まりがあるわけではありませんが、解りやすいので慣習になっています。通常はインスタンス変数ごとにgetメソッドを書きます。getメソッドは値を返すために作られるメソッドです。結果は以下の通りです。インスタンス変数の数だけ、このようなメソッドを書くのは面倒に思いませんか?そこでRubyにはそれを簡潔にする機能が備わっています。