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.newDate.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ですね 遅くね?

ではでは