※随時更新していく用
対象読者
・ぼく
・JavaやC#経験者
経緯〜Railsチュートリアル情報量膨大すぎ問題〜
・ものすごい情報量ですごいと思いつつ情報量多すぎて上から順にやっていたら(業務やりながらだと)終わらない。
・すでに似たような記事はあるけど自分の言葉で「これはJavaでいう~」という辞書的なモノを作ろう、と決意
以下、辞書です
・※厳密にはイコールではないのだろうけども、強いて言えばコレかな、の感覚で載せている感は多少あります。
・※習得中の身のため「その理解は間違っている」というものがあれば指摘して頂きたいです。
・現段階でボリュームが少ないためruby固有の概念も載っけています。
- initialize
・イニシャライズメソッド(インスタンスを生成するときに最初に呼び出されるメソッド)
・javaでいうコンストラクタ
・test.rb参照
- attr_accessor
・アクセサメソッド
・java(Spring)でいうlombok(getter/setterをクラス内で定義するためのライブラリに含まれるやつ)
・インスタンス変数を定義するためのもの
・test.rb参照
- self
・tいろんな意味で使用される
・何がselfになるのか、はselfが使われる場所によって異なる
・クラス内部の変数やメソッドを明示するときに使用(クラス変数は後述の@@を使用する)
・attr_accessorで指定したフィールドを指定
・メソッドの呼び出し元を現すことも(test.rbでいうところのdescription
メソッド
・javaでいうthis
・test.rb参照
class Car
# オブジェクトの変数(値)
# type(車の種類),weight(重量),user(使用者)
attr_accessor :type,:weight,:user
# 初期化用の特別なメソッド
def initialize
self.type = 'SUV'
self.weight = 2500
end
# オブジェクトのメソッド(処理)
def description(user)
puts "こんにちは#{user},この車のタイプは#{type},重量は#{power}です。"
end
end
#インスタンスを生成し変数に代入する
Car_A = Car.new
Car_A.description('ぼく')
p Car_A
- @(アットマーク)
・インスタンス変数につけるやつ
・javaのインスタンス変数※1)と同意
※1)...インスタンスに関連付けられたフィールド変数のことで、「new」で生成された個々のインスタンスが持つ変数
・test2.rb参照※こんな風に書いてもいいよ
class Car
# オブジェクトの変数(値)
# type(車の種類),weight(重量),user(使用者)
attr_accessor :type,:weight,:user
# 初期化用の特別なメソッド
def initialize
@type = 'SUV'
@weight = 2500
end
# オブジェクトのメソッド(処理)
def description(user)
puts "こんにちは#{user},この車のタイプは#{@type},重量は#{@power}です。"
end
end
#インスタンスを生成し変数に代入する
Car_A = Car.new
Car_A.description('ぼく')
p Car_A
- @@(アットマーク二つ)
・クラス変数につけるやつ
・クラス内、インスタンス内で使用できる
・値は共有される
・test3.rb参照
class Test
@@class_var = 0
def foo
@@class_var += 1
p @@class_var
end
def self.hoge
@@class_var += 1
p @@class_var
end
end
test = Test.new
# 同一のインスタンス内で値は共有される
test.foo # => 1
test.foo # => 2
# インスタンスが異なっても、値は共有されている
test2 = Foo.new
test2.foo # => 3
# クラスメソッドからもアクセスできるかつ、値も共有されている
Test.hoge # => 4
- require
・javaでいうimport...と書きたかったが、実際にはrequireの方が自由度が高そう(以下リンクを参照)
・【Ruby】Ruby の require はJavaとは違うよ
- モジュール
・コレはJavaでいう、が見つからなかった。。。
-
クラスとの違い
- インスタンスを生成することができない。
- 継承することができない。
-
用途
- 名前空間(メソッドの一意性の確保...ライブラリ取り込み等でメソッド名の重複を防ぐため)
- Mix-in(モジュールにメソッドをまとめてincludeして使う)