Ruby復習②

<a href="https://qiita.com/SOH_engineer/items/51aa76fc140ddf765411">Ruby復習①</a>からの続きです。

<h1>クラスの定義</h1>

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

<h1>attr_accessor</h1>

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

<h1>複数のインスタンス変数</h1>

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

<h1>インスタンスの生成</h1>

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

<h1>インスタンス変数に値を代入する</h1>
```Ruby:Rubyファイル
class Menu 
  attr_accessor :name 
  attr_accessor :price
end
menu1 = Menu.new
menu1.name = "すし"
puts menu1.name
```

```:コンソール
すし
```

<h1>インスタンスメソッド</h1>

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

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

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

```:コンソール
私はメニューです
```

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

```Ruby: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
```

```:コンソール
私はおでんです
```

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

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

```:コンソール
メニューが生成されました
```

<h1>initializeメソッドの引数</h1>

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

```:コンソール
こんにちは
```

<h1>require</h1>

```Ruby:menu.rb
class Menu
.
.
end
```

```Ruby:index.rb
require "./menu"
.
.
```

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

```Ruby:Rubyファイル
puts "名前を入力してください"
name = gets.chomp
puts "あなたの名前は#{name}です"
```

```:コンソール
名前を入力してください
Tanaka #自分で打ち込む
あなたの名前はTanakaです　
```

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

```Ruby:Rubyファイル
puts "数字を入力してください"
number = gets.chomp.to_i
puts "#{number}の2倍は{number * 2}です"
```

```:コンソール
数字を入力してください
3 #自分で打ち込む
3の2倍は6です
```

<h1>継承</h1>

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

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

```Ruby:menu.rb
class Menu
  attr_accessor :name
  attr_accessor :price
  def initialize(name:, price:)
    self.name = name
    self.price = price
  end
end
```

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

<h1>Dateクラス</h1>

<h4>Dateクラスの読み込み</h4>
Dateクラスは日付を扱う

```Ruby:Rubyファイル
require "date"
.
.
```

<h4>Dateクラスのインスタンス</h4>

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

```:コンソール
2021-1-28
```

<h4>Dateクラスのインスタンスメソッド</h4>

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

```:コンソール
false
```

<h4>今日の日付のDateインスタンスを取得する</h4>
```Ruby:Rubyファイル
require "date"
date1 = Date.today
puts date1
```
```:コンソール
2021-1-28   #今日の日付が出力される
```

<h1>クラスメソッドを呼び出す</h1>

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

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

<h1>print, put, p</h1>

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

```:コンソール
hello worldhello world
"hello world"
```

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

<h5>Ruby復習以上</h5>