7月31日 8月1日 学習記録
実施内容
-
progate
Ruby V
第1章:継承
第2章:Dateクラスとクラスメソッド
本日学習した内容
※JavaやJavaScriptと共通している箇所は、文章のみの記述にとどめる。
-
1:継承
実際の開発では、すべてのクラスを1から作るのではなく、既存のクラスのインスタンス変数、メソッド等を引き継いだクラスを作る方が効果的である。
このように、既存のクラスから別に新規のクラスを作り出す事を継承と呼ぶ。
継承は「class 継承先のクラス名 <継承元のクラス名」と記述する。
以下は、「Menu」クラスを継承して「Food」クラスを作成する例。
※継承において、継承元のクラス(例ではMenuクラス)を親クラス、継承元のクラス(例ではFoodクラス)を子クラスと呼ぶ。
-
2:継承の仕組み
子クラスでは、何も定義していなくても親クラスのインスタンス変数、インスタンスメソッドを使用することができる。
-
3:オーバーライドについて
Rubyでも親クラスに定義されているメソッドを、子クラスで再定義(オーバーライド)できる。
JavaやJavaScriptでコンストラクタのオーバーライドが可能だったように、initializeメソッドもオーバーライドが可能。
initializeメソッドをオーバーライドする場合は、メソッドの先頭で「super」と記述する必要がある。(親クラスのinitializeメソッドを呼び出す。)
-
4:日付を扱うクラス
Dateクラスを用いれば、プログラムで日付を扱う事ができる。
DateクラスはRubyに標準で用意されている為、ファイルの先頭で「repuire "date"」とすることで使用する事ができる。("./date"としないように注意!)
-
5:Dateクラスのインスタンス
Dateクラスも、これまでのクラスと同様に、「Date.new」とすることで、インスタンスを作成できる。
インスタンス作成時に「年、月、日」を引数として渡す事で、その年月日の情報を変数に格納できる。
以下の例のようにすると、コンソールに「2020-07-31」と表示される。
-
6:Dateクラスのインスタンスメソッド
Dateクラスには、様々なインスタンスメソッドが定義されている。
ここでは一例として、Dateクラスのインスタンスの日付が「日曜日」かどうかを判定するメソッド「sunday?」メソッドを示す。
以下の例では、「2020年7月31日」は日曜日ではない為、コンソールに「false」と出力される。
-
7:その他、Dateクラスの使い方の例
Dateクラスのインスタンス作成時に「Date.today」とする事で、今日の日付のインスタンスを作成できる。
このように、クラス名に対して呼び出すメソッドの事をクラスメソッドという。
クラスメソッドを定義する場合は、「def クラス名.メソッド名 処理の内容 end」と記述する。
今日のエラー
今日はエラーなし
疑問に思ったこと
インスタンスメソッドとクラスメソッドは、定義の仕方、呼び出し方以外にどんな違いがあるか?