Rubyの自己とは何かとその使い方(明確に説明されている)
Rubyを学んでいる場合、「self」キーワードの使用は非常に混乱するかもしれません。
どのように機能しますか?
self
とは 、正確に?
Rubyキーワードです これにより、現在のオブジェクトにアクセスできます。
オブジェクトが何かわからない場合は、私が作成したこのビデオをご覧ください。オブジェクト指向プログラミングに関連しています。
この「現在のオブジェクト」はコンテキストによって異なります。
コンテキスト?
はい、コンテキストとは、コードがいつでも存在する場所です。
ここに例があります :
コードがインスタンスメソッド内にある場合は、self
インスタンスです そのクラスの。つまり、self
オブジェクトです。
これが実際に動作しているのを自分で見ることができます。
このコードを実行する :
def coffee puts self end coffee # main
このコードはcoffee
を定義して呼び出します self
の値を出力するメソッド 。
なぜmain
を出力するのですか ?
これは最上位オブジェクトの名前であるため、外部で定義されているすべてのメソッドを見つけることができるオブジェクトです。 クラス。
私たちのcoffee
のように ここでの方法。
ただし、Cat
という名前のクラス内でメソッドを定義する場合 、次にself
Cat
になります オブジェクト。
ここに表示されるように :
class Cat def meow puts self end end Cat.new.meow # <Cat:0x7a14c5>
これらの例から、self
の値がわかります。 使用する場所によって異なります。
今 :
その目的を理解することで、何でもよりよく理解できると思います。
self
はなぜですか 便利ですか?
いくつかの例を見てみましょう。
曖昧性解消のための自己の使用
self
の実用的な使い方の1つ メソッドとローカル変数の違いを見分けることができるようにすることです。
変数とメソッドに同じ名前を付けるのは良い考えではありません。ただし、そのような状況で作業する必要がある場合は、self.method_name
を使用してメソッドを呼び出すことができます。 。
これが私の意味です :
class Example def do_something banana = "variable" puts banana puts self.banana end def banana "method" end end Example.new.do_something # "variable" => puts banana # "method" => puts self.banana>
ここにbanana
があります do_something
内のローカル変数 メソッドですが、banana
もあります メソッド。
ローカル変数が優先されます。
そのため、self
を使用する必要があります ここで電話したい場合 banana
印刷の代わりにメソッド banana
の値 変数。
次へ :
より一般的なユースケースを見てみましょう…クラスメソッドの定義!
Selfを使用してクラスレベルのメソッドを定義する
self
のナンバーワンの使用 間違いなく、クラスレベルのメソッドを定義することです。
あなたはそれらを見たと確信しています。
これらのdef self.method_name
メソッド定義 。
このように :
class Salad def self.buy_olive_oil # ... end end Salad.buy_olive_oil
このself
ここではSalad
と同等です 、クラス名。
なぜこれが役立つのですか?
メソッド定義ごとにクラス名を使用する必要がないため、クラスを変更した場合にコードを簡単に変更できます。
また、コードのノイズが少なくなり、読みやすくなります。
そのため、def self.buy_olive_oil
を実行します def Salad.buy_olive_oil
の代わりに 。
自己のその他の用途
はい!
self
にはさらに多くの用途があります 、ですから、よく知っておくと便利です。
例 :
これをメソッドで使用して、現在のオブジェクトを別のオブジェクトと比較できます。
このようなもの :
def ==(other) self == other end
self
を使用することもできます デバッグの目的で、作業しているオブジェクトを見つけるため。
このように :
p self
または、戻り値として使用して、Builderデザインパターンなどのデザインパターンを実装することもできます。
例 :
class Salad def initialize @ingredients = [] end def add_nuts @ingredients << :nuts self end end my_salad = Salad.new.add_nuts
要約すると、ここに自己の有用な使用法のリストがあります :
- クラスレベルのメソッドを定義する
- 同じ名前のローカル変数がある場合は、インスタンスメソッドを使用します
- Returning Self(ビルダーパターン)
- デバッグ
- オブジェクトの比較(==)
- メソッド呼び出しのデフォルトの受信者
自己vsそれ自体
このトピックを完了する前に、もう1つ確認する必要があります。
Kernel#itself
メソッド。
これは、オブジェクトに対して呼び出すことができるメソッドであり、オブジェクトはそれ自体を返します。
例 :
[1,2,3,nil].select(&:itself) # [1, 2 ,3]
この例では、nil
をフィルタリングします &false
値。
違いを理解する :
self
キーワードです。値は場所によって異なります あなたはそれを使いますitself
メソッドです。その値は何に依存します 使用するオブジェクト(1.itself
内) 、1
オブジェクトです)
お役に立てば幸いです。
結論
Rubyの自己キーワードについて、正確にはそれが何であるか、なぜそれが役立つのか、そしてそれをどのように使用するのかを学びました。
今度はあなたが試してみる番です。
読んでくれてありがとう! 🙂
-
Ruby Mapメソッドの使用方法(例付き)
Mapは、配列、ハッシュ、範囲で使用できるRubyメソッドです。 マップの主な用途は、データを変換することです。 例 : 文字列の配列が与えられた場合、すべての文字列に目を通し、すべての文字を大文字にすることができます。 または、Userのリストがある場合 オブジェクト… 変換できます 対応するメールアドレス、電話番号、またはその他の属性のリストにそれらを追加します Userで定義 クラス。 これを行う方法を正確に見てみましょう! ルビーマップ構文 マップの構文は次のようになります: array = [a, b, c] array.map { |string| string.
-
RubyでStructとOpenStructを使用する方法
Rubyの構造体とは何ですか? 構造体は組み込みのRubyクラスであり、値オブジェクトを生成する新しいクラスを作成するために使用されます。値オブジェクトは、関連する属性を一緒に格納するために使用されます。 ここに例があります : Point 2つの座標(x &y 。 このデータはさまざまな方法で表すことができます。 いいね : 配列[10, 20] ハッシュ{ x: 10, y: 10 } オブジェクトPoint.new(10, 20) 複数のPointを使用する場合 、オブジェクトアプローチを使用することをお勧めします。 しかし… これら2つの値を一緒に格納するた