Webエンジニア目指して#33
どうも運動不足マンです
外に出ないせいで完全に冬眠モードです。実家なのでリングフィットやるスペースもないし困ったもんですね
さてやっていきましょうProgateのRuby Vです。Ruby単体はこれが最後ですね
クラスの継承
class Sushi < Food end
継承の記述が左に流れるため紛らわしい
jsと同様に継承や上書きなどほとんど同じ概念がある
継承によって生成された子クラスにはインスタンス変数とインスタンスメソッドが継承されるところも同じ
また、子クラスで新規メソッドを記述すれば子クラスにのみ追加され、既存メソッドを記述すれば上書きされる
superメソッド
class Food attr_accessor:name def initialize(name:) self.name=name puts "#{self.name}が生成されました" end end class Sushi < Food attr_accessor:wasabi def initialize(name:,wasabi:) super(name: name) self.wasabi=wasabi puts "わさび#{self.wasabi}です" end end food1=Sushi.new(name:"ネギトロ",wasabi:"なし") 実行結果----------------- ネギトロが生成されました わさびなしです
super(name: name)
の部分で親クラスの同名関数を呼び出してます
新しく定義した変数については通常通り記述
もうほぼjsでやった内容と同じですね
Dateクラス
require "date" eventday=Date.new(2021,1,31) puts eventday puts eventday.sunday? 実行結果------------- 2021-01-31 true
定義しなくてもrequire "date"
でDateクラスを読み込み、上記の流れでその日が何曜日か判定できる。
調べたところ、インスタンスメソッドは他にもたくさんあるみたい
また、下記のようにインスタンス生成の際に.new
ではなく.today
と記述することでその日の日付を取得できる
require "date" eventday=Date.today puts eventday 実行結果--------------------- 2021-02-01
クラスメソッド
Date.new
やDate.today
のような記述をクラスメソッドと呼ぶとか呼ばないとか
クラスに対するメソッドなのでそのまんまですね
クラスメソッドを自前で用意するにはdef クラス名.メソッド名
のように記述
以下お試し結果
require "date" class Sample def Sample.is_today_sunday? today=Date.today if today.sunday? puts "今日は日曜日" else puts "今日は日曜日ではありません" end end end sample1=Sample.is_today_sunday? 実行結果------------- 今日は日曜日ではありません
クラスメソッドの連結
1つ上のコードは回りくどいなあと思って
Date.today.sunday?
みたいに記述できないかな?と気になって試してみたらできた
メソッドチェーンと呼ぶらしい jQと同じ呼び方ですね
require "date" today1=Date.new(2021,1,31).sunday? puts today1 today2=Date.new(2021,2,1).sunday? puts today2 実行結果------------ true false
これでRuby Vは終わり!次はやっとRailsですね 遅くね?
ではでは