Ruby復習②


Ruby復習①からの続きです。

クラスの定義

Rubyファイル
class Menu #クラスは大文字で始める
end

attr_accessor

Rubyファイル
class Menu 
  attr_accessor :name # :nameはインスタンス変数
end

複数のインスタンス変数

Rubyファイル
class Menu 
  attr_accessor :name 
  attr_accessor :price
end

インスタンスの生成

Rubyファイル
class Menu 
.
.
end
menu1 = Menu.new
#menu1にMenuクラスから生成したインスタンスを代入した

インスタンス変数に値を代入する

Rubyファイル
class Menu 
  attr_accessor :name 
  attr_accessor :price
end
menu1 = Menu.new
menu1.name = "すし"
puts menu1.name
コンソール
すし

インスタンスメソッド

クラスの中でメソッドを定義し、呼び出す

クラスの中で定義したメソッドはインスタンスメソッドと呼ばれる

Rubyファイル
class Menu 
  attr_accessor :name 
  attr_accessor :price
  def show
    puts "私はメニューです"
  end
end
menu1 = Menu.new
menu1.show
コンソール
私はメニューです

インスタンスメソッドの中でインスタンス変数を使う

Rubyファイル
class Menu 
  attr_accessor :name 
  attr_accessor :price
  def show_name
    puts "私は#{self.name}です"
  end
end
menu1 = Menu.new
menu1.name = "おでん"
menu1.show_name
コンソール
私はおでんです

initializeメソッド

Menu.newでMenuインスタンスが生成された直後に、initializeメソッドが呼び出され、その中の処理が実行される

Rubyファイル
class Menu 
.
.
  def initialize
    puts "メニューが生成されました"
  end
  .
  .
end
menu1 = Menu.new
コンソール
メニューが生成されました

initializeメソッドの引数

Rubyファイル
class Menu 
.
.
  def initialize(message)
    puts message
  end
  .
  .
end
menu1 = Menu.new("こんにちは")
コンソール
こんにちは

require

menu.rb
class Menu
.
.
end
index.rb
require "./menu"
.
.

gets.chomp

gets.chompと記述すると入力を受け付けることができる

Rubyファイル
puts "名前を入力してください"
name = gets.chomp
puts "あなたの名前は#{name}です"
コンソール
名前を入力してください
Tanaka #自分で打ち込む
あなたの名前はTanakaです 

gets.chomp.to_i

gets.chomp.to_iと記述すると数値の入力を受け付けることができる

Rubyファイル
puts "数字を入力してください"
number = gets.chomp.to_i
puts "#{number}の2倍は{number * 2}です"
コンソール
数字を入力してください
3 #自分で打ち込む
3の2倍は6です

継承

food.rb
require "./menu"
class Food < Menu
end
#Menuが親クラス、Foodは子クラス

super

オーバーライドしたメソッドの中で、superとすることで、
親クラスの同名のメソッドを呼び出すことができる

menu.rb
class Menu
  attr_accessor :name
  attr_accessor :price
  def initialize(name:, price:)
    self.name = name
    self.price = price
  end
end
food.rb
class Food < Menu
  attr_accessor :calorie
  def initialize(name:, price:, calorie:)
    super(name: name, price: price)  #親クラスの同名メソッドを呼び出す
    self.calorie = calorie
  end
  .
  .
end

Dateクラス

Dateクラスの読み込み

Dateクラスは日付を扱う

Rubyファイル
require "date"
.
.

Dateクラスのインスタンス

Rubyファイル
require "date"
date1 = Date.new(2021, 1, 28) #引数に「年・月・日」を渡して、Dateインスタンスを生成する
puts date1
コンソール
2021-1-28

Dateクラスのインスタンスメソッド

Rubyファイル
require "date"
date1 = Date.new(2021, 1, 28)
puts date1.sunday? #sunday?メソッドはDateクラスのインスタンスの日付が日曜日かどうかを真偽値で返す
コンソール
false

今日の日付のDateインスタンスを取得する

Rubyファイル
require "date"
date1 = Date.today
puts date1
コンソール
2021-1-28   #今日の日付が出力される

クラスメソッドを呼び出す

Rubyファイル
class Menu
.
.
  def Menu.is_discount_day?
  .
  .
  end
end
puts Menu.is_discount_day?
コンソール
true

ri コマンド

ri コマンドで知りたい命令、オブジェクトのドキュメントを見ることができる

print, put, p

Rubyファイル
print "hello world" #渡したオブジェクトを文字列にして表示させるための命令
puts "hello world" #printの動作+ 改行が付く
p "hello world" #デバッグ用
コンソール
hello worldhello world
"hello world"

定数の命名ルール

定数は英大文字始まりでないといけない。
慣習的に全部大文字にすることが多い。
定数は書き換えると警告は出るが、値は書き換えられてしまうので、注意する

Ruby復習以上