Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

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の自己キーワードについて、正確にはそれが何であるか、なぜそれが役立つのか、そしてそれをどのように使用するのかを学びました。

今度はあなたが試してみる番です。

読んでくれてありがとう! 🙂


  1. Ruby Mapメソッドの使用方法(例付き)

    Mapは、配列、ハッシュ、範囲で使用できるRubyメソッドです。 マップの主な用途は、データを変換することです。 例 : 文字列の配列が与えられた場合、すべての文字列に目を通し、すべての文字を大文字にすることができます。 または、Userのリストがある場合 オブジェクト… 変換できます 対応するメールアドレス、電話番号、またはその他の属性のリストにそれらを追加します Userで定義 クラス。 これを行う方法を正確に見てみましょう! ルビーマップ構文 マップの構文は次のようになります: array = [a, b, c] array.map { |string| string.

  2. RubyでStructとOpenStructを使用する方法

    Rubyの構造体とは何ですか? 構造体は組み込みのRubyクラスであり、値オブジェクトを生成する新しいクラスを作成するために使用されます。値オブジェクトは、関連する属性を一緒に格納するために使用されます。 ここに例があります : Point 2つの座標(x &y 。 このデータはさまざまな方法で表すことができます。 いいね : 配列[10, 20] ハッシュ{ x: 10, y: 10 } オブジェクトPoint.new(10, 20) 複数のPointを使用する場合 、オブジェクトアプローチを使用することをお勧めします。 しかし… これら2つの値を一緒に格納するた