Rubyのself(自己参照)とは?使い方と意味をやさしく解説!
Rubyのself(セルフ)とは、「自分自身(現在のオブジェクト)」を表すキーワードです。
self を使うことで、オブジェクト自身のメソッドや変数にアクセスしたり、クラスメソッドを定義したりすることができます。
self の基本
class User
def initialize(name)
@name = name
end
def greet
puts "こんにちは、#{self.name}さん!"
end
def name
@name
end
end
u = User.new("さくら")
u.greet # → こんにちは、さくらさん!
ここでの self.name
は、「自分(インスタンス)に属するnameメソッドを呼び出す」という意味です。
self の役割
- 現在のインスタンスを参照する(インスタンスメソッド内)
- 現在のクラスを参照する(クラス定義の外側またはクラスメソッド内)
- メソッド名の明示的な指定に使われる
インスタンスメソッド内の self
def hello
puts self
end
インスタンスメソッドの中で self
を使うと、そのメソッドを呼び出しているオブジェクト自体を指します。
クラスメソッドの定義に使う self
class Tool
def self.info
puts "ツール情報を表示します"
end
end
Tool.info # → ツール情報を表示します
クラスの中で def self.メソッド名
と書くことで、クラスメソッドを定義できます。
この場合の self
はそのクラス自体を表します。
アクセサメソッド内での self の使い方
class Person
attr_accessor :name
def initialize(name)
self.name = name # setterメソッド経由で代入
end
end
self.name = name
のように、メソッドとしての代入(setter)を明示的に行う必要があるときに self が必要です。
self の現在地を確認する
puts self # → main(トップレベル)
トップレベルでの self
は main オブジェクト を指します。
これは Ruby のエントリーポイントのようなものです。
まとめ
Rubyの self(自己参照)は、「現在のオブジェクト」や「現在のクラス」を指す重要なキーワードです。
主に以下の場面で登場します:
- インスタンスメソッド内で「自分」を表す
- クラスメソッドを定義するとき
- アクセサメソッドを呼び出すとき
最初は少し混乱するかもしれませんが、「self = 今このコードが属しているもの」と理解することで、使いこなせるようになります!