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