ログイン
編集不可のページディスカッション情報添付ファイル
"alstamber/2013FreshManRubySeminar4"の差分

MMA
6と7のリビジョン間の差分
2013-05-22 11:55:33時点のリビジョン6
サイズ: 2407
編集者: alstamber
コメント:
2013-05-23 17:42:07時点のリビジョン7
サイズ: 5442
編集者: alstamber
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 37: 行 37:
== モジュール == {{{#!highlight ruby
class Hoge
...(中身)...
end
}}}
クラスの定義はclassというキーワードから始まります。<<BR>>
その後ろにクラスの名前を書きます。クラスの名前は必ず大文字から始まらなければいけません。
行 39: 行 45:
== ブロック付きメソッド == === インスタンス ===
たとえば文字列を考えましょう。文字列はStringというクラスに属しているという話をしました。<<BR>>
これは言い換えれば、Stringというクラスに書かれているメソッドなどの定義をもとにして、実際の文字列というオブジェクトが作られているとも言えます。<<BR>>
このように考えた時、クラスに対してクラスを元にして作られた実際のオブジェクトのことを「インスタンス」といいます。<<BR>>
Rubyの文字列はStringクラスのインスタンスです。

=== インスタンスメソッド ===
引き続き文字列について考えましょう。Rubyの文字列に対してはreverseやlengthなどのメソッドを呼び出すことができました。このようなメソッドはインスタンスに対して呼び出されるので、そのことを強調して「インスタンスメソッド」と呼ばれることもあります。

=== インスタンスメソッドの定義 ===
インスタンスメソッドをクラスで定義するにはどうすれば良いのでしょうか。

インスタンスメソッドを定義するには次のように書きます。
{{{#!highlight ruby
class Hoge
    def インスタンスメソッド名
        ...
    end
end
}}}
要はクラスの定義の中にメソッドの定義を普通に書けば良いってことです。

=== クラスの話をすすめるために ===
クラスの話をすすめるために、自分で独自のクラスを作る、という事を考えようと思います。

今回作成するクラスは学生を表すクラスです。名前はStudentにしましょう。

Studentクラスには次のようなデータをおいておけるようにしたいとします。
 * 学籍番号
 * 名前
 * 学科
 * 性別

あとで成績を表すデータも追加しますが、とりあえずはこれだけで。

=== new ===
上のStudentクラスを実際にプログラム中で使うためには、クラスを元にしたインスタンスを作る必要があります。<<BR>>
(Stringクラスがそのままでは使えず、""で囲んだ文字列の形というインスタンスの形にして初めて使えるようになるのと同じです)

Stringクラスの場合、""で文字の並びを囲むことで勝手にStringクラスのインスタンスを作ることができましたが、今作ろうとしているStudentクラスではそういうことはできません。そこでnewという特別なキーワードを使います。

{{{
a = new Student
}}}

上のように書くことで、Studentクラスを元にインスタンスを作って、それをaに代入できます。

なにこれ

オブジェクト指向

プログラムをオブジェクトの集合であり、オブジェクト同士が相互に関わりあう事で動作するものと捉え直す考え方。

オブジェクトとは

プログラムにおけるデータとそれを処理するコードを一かたまりのものとしてみなした概念。

プログラムをオブジェクト指向で書く利点

プログラムを複数の固まりに分割することができます。これによって大きなプログラムをより小さな対象に分けて作ることができるようになります。
よって大規模なプログラムを作りやすくなります。

また同じようなことをしているコードを使いまわすことがやりやすくなる。これによって同じようなコードを何度も書かなくて良くなります。

   1 "hoge".reverse #=> "egoh"

上の例は文字列を逆転させる処理をreverseメソッドにやらせた例です。
文字列を逆転させるような処理をわざわざ書かなくてもすでに作られている文字列を逆転させる処理を使えば良くなるのですごく楽です。

クラス

第2回にてクラスというものについてほんの少し触れました。
クラスにはオブジェクトが持つべきデータや処理の内容が定義されています。
Rubyではオブジェクトの種類をオブジェクトがどのクラスに属しているかをみて判断しています。

この仕組みのために例えば整数に対してはreverseメソッドは実行できないし、文字列に対してはtimesメソッドを実行することはできません。

クラスの定義

クラスには処理(=メソッド)が定義されているという話をしましたが、それはどのように定義されているのでしょうか。

   1 class Hoge
   2 ...(中身)...
   3 end

クラスの定義はclassというキーワードから始まります。
その後ろにクラスの名前を書きます。クラスの名前は必ず大文字から始まらなければいけません。

インスタンス

たとえば文字列を考えましょう。文字列はStringというクラスに属しているという話をしました。
これは言い換えれば、Stringというクラスに書かれているメソッドなどの定義をもとにして、実際の文字列というオブジェクトが作られているとも言えます。
このように考えた時、クラスに対してクラスを元にして作られた実際のオブジェクトのことを「インスタンス」といいます。
Rubyの文字列はStringクラスのインスタンスです。

インスタンスメソッド

引き続き文字列について考えましょう。Rubyの文字列に対してはreverseやlengthなどのメソッドを呼び出すことができました。このようなメソッドはインスタンスに対して呼び出されるので、そのことを強調して「インスタンスメソッド」と呼ばれることもあります。

インスタンスメソッドの定義

インスタンスメソッドをクラスで定義するにはどうすれば良いのでしょうか。

インスタンスメソッドを定義するには次のように書きます。

   1 class Hoge
   2     def インスタンスメソッド名
   3         ...
   4     end
   5 end

要はクラスの定義の中にメソッドの定義を普通に書けば良いってことです。

クラスの話をすすめるために

クラスの話をすすめるために、自分で独自のクラスを作る、という事を考えようと思います。

今回作成するクラスは学生を表すクラスです。名前はStudentにしましょう。

Studentクラスには次のようなデータをおいておけるようにしたいとします。

  • 学籍番号
  • 名前
  • 学科
  • 性別

あとで成績を表すデータも追加しますが、とりあえずはこれだけで。

new

上のStudentクラスを実際にプログラム中で使うためには、クラスを元にしたインスタンスを作る必要があります。
(Stringクラスがそのままでは使えず、""で囲んだ文字列の形というインスタンスの形にして初めて使えるようになるのと同じです)

Stringクラスの場合、""で文字の並びを囲むことで勝手にStringクラスのインスタンスを作ることができましたが、今作ろうとしているStudentクラスではそういうことはできません。そこでnewという特別なキーワードを使います。

a = new Student

上のように書くことで、Studentクラスを元にインスタンスを作って、それをaに代入できます。

alstamber/2013FreshManRubySeminar4 (最終更新日時 2013-07-04 23:39:57 更新者 alstamber)