---
# System prepended metadata

title: Rubyについてわちゃわちゃやる

---

# 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>