# Rubyについてわちゃわちゃやる
https://paiza.io/projects/XGo8aN3EhAT07jUy38tdzg
## 初級編
<details><summary>最初</summary>
クラスの使い方わかりますか?
```ruby
class RunteqStudent
attr_accessor :name, :term
def initialize(name, term)
@name = name
@term = term
end
end
```
</details>
<details><summary>initialize</summary>
initializeって何してるかわかりますか?
```ruby
class RunteqStudent
attr_accessor :name, :term
def initialize(name: nil, term: nil) # 引数省略できるようにしてRailsっぽく使えるように変えてみた
@name = name
@term = term
puts 'こんにちは'
end
end
RunteqStudent.new
```
</details>
<details><summary>attr_accessor</summary>
attr_accessorって何してるかわかりますか?
```ruby
class RunteqStudent
attr_accessor :name, :term
def initialize(name: nil, term: nil) # 引数省略できるようにしてRailsっぽく使えるように変えてみた
@name = name
@term = term
puts 'こんにちは'
end
end
RunteqStudent.new
```
```ruby
class RunteqStudent
def initialize(name: nil, term: nil) # 引数省略できるようにしてRailsっぽく使えるように変えてみた
@name = name
@term = term
puts 'こんにちは'
end
def name
@name
end
def name=(name)
@name = name
end
end
```
</details>
<details><summary>インスタンス変数</summary>
インスタンス変数ってどういうものかわかりますか?
```ruby
class RunteqStudent
def initialize
@name = 'なかい'
@term = '11'
end
def name
@name
end
def name=(name)
@name = name
end
end
runteq_student = RunteqStudent.new
runteq_student.term
```
</details>
## 脱線
<details><summary>モジュール</summary>
モジュールってどういうものかわかりますか?
```ruby
module HeadTeacher
NAME = "ひさじゅ"
def vimhara
puts "vimを使いなさい"
end
def self.vimmer
puts "vimを使います"
end
module_function :vimhara
end
```
</details>
<details><summary>モジュールのインクルード</summary>
モジュールのインクルードってどういうものかわかりますか?
```ruby
module HeadTeacher
NAME = "ひさじゅ"
def vimhara
puts "vimを使いなさい"
end
end
class RunteqStudent
attr_accessor :name, :term
include HeadTeacher
def initialize(name: nil, term: nil) # 引数省略できるようにしてRailsっぽく使えるように変えてみた
@name = name
@term = term
end
end
runteq_student = RunteqStudent.new()
runteq_student.vimhara
```
</details>
<details><summary>モジュールのエクステンド</summary>
モジュールのエクステンドってどういうものかわかりますか?
```ruby
module HeadTeacher
NAME = "ひさじゅ"
def vimhara
puts "vimを使いなさい"
end
end
class RunteqStudent
attr_accessor :name, :term
extend HeadTeacher
def initialize(name: nil, term: nil) # 引数省略できるようにしてRailsっぽく使えるように変えてみた
@name = name
@term = term
end
end
RunteqStudent.vimhara
```
</details>
## 初級編完成系
<details><summary>完成系</summary>
```ruby
class RunteqStudent
#ゲッターとセッターを1行書くだけで定義してくれる最強奴
attr_accessor :name, :term, :favorite
# initializeメソッドはインスタンス作成時に一番最初に勝手に実行される特別なメソッド
# ()は引数メソッド実行時に()に渡した値がメソッドの中で使われる
def initialize(name, term)
# @がついた変数はインスタンス変数 クラスの中ならどこでも参照できる 逆に@がつかない変数はローカル変数といってメソッドの中でしか参照できない
@name = name
@term = term
# これはローカル変数なのでrunteq_student.favoriteみたいに呼び出せない@つけてインスタンス変数にしてあげると呼び出せる
favorite = 'ピラミッド'
end
#
# # 「ゲッター」 これがあることによってインスタンスからrunteq_student.nameとかみたいに呼び出せる
# def name
# @name
# end
#
# # 「セッター」 これがあることによってrunteq_student.name = 'ふぁらお'とかみたいに値を更新できる
# def name=(name)
# @name = name
# end
#
# def term
# @term
# end
#
# def term=(name)
# @term = name
# end
end
# ここでinitializeメソッドが呼び出されてnameという変数に'なかい'が入ってtermという変数に'11期生'という値が入る
runteq_student = RunteqStudent.new('なかい', '11期生')
# これがインスタンス
p runteq_student
# これがインスタンスからnameというゲッターを使って呼びた下runteq_studentの名前
p runteq_student.name
p runteq_student.term
# これで値が更新できるのはセッターを定義しているおかげ
runteq_student.name = 'ふぁらお'
p runteq_student.name
# これはインスタンス変数に値を定義出来ていないのでなにも定義出来ていない@favoriteが呼ばれてnilになってしまう
p runteq_student.favorite
```
</details>