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

RubyでのYieldとYield_Selfの理解(完全ガイド)

Rubyで「歩留まり」という言葉はどういう意味ですか?そして、それは正確に何をしますか?

まあ…

Yieldはキーワードであり(言語のコア部分であることを意味します)、ブロックを呼び出すためのメソッド内で使用されます。

知っておくべきことは次のとおりです

  • ブロックを呼び出すと、そのブロック内のコードが実行されます(メソッドの呼び出しなど)
  • Yieldは、任意の数の引数をブロックに渡すことができます
  • ブロックの戻り値がyieldの戻り値になります

これを理解するには、ブロックを理解する必要があります。

ブロックは、他のメソッドに追加の引数として渡すことができる名前のないメソッドと考えることができます。

ここに例があります

def make_salad
  yield "lettuce"
  yield "carrots"
  yield "olive oil"
end

make_salad { |ingredient| puts "Adding #{ingredient} to salad!" }

これにより、ブロックが3回呼び出され、この出力が生成されます

Adding lettuce to salad!
Adding carrots to salad!
Adding olive oil to salad!

それが本質的にyieldです メソッドを呼び出すようなものですが、代わりにブロックを呼び出します。

ブロックの名前がないため、このキーワードで処理されます。

呼び出すブロックがない場合にどうなるかを見てみましょう。

ブロックなしの歩留まり==エラーメッセージ

yieldを呼び出す場合 ブロックがないと、エラーが発生します。

def write_code
  yield
end

write_code

# LocalJumpError: no block given (yield)

このエラーは非常に明確です。「ブロックが指定されていません」とは、メソッドがwrite_codeを呼び出すことを意味します。 ブロックを提供していません。

このエラーを防ぐにはどうすればよいですか?

このように:

def write_code
  yield if block_given?
end

block_given? メソッドは、ブロックが使用可能かどうかをチェックします。これにより、yieldのみが可能になります。 それが本当なら。

歩留まりを使用する理由

yieldを使用する ブロックを有効にします。

ブロックを使用して、メソッド呼び出しの一部としてコードのビットを渡します。

これは次の場合に役立ちます

  • コードの実行にかかる時間をログに記録する一般的なログ関数を作成したい
  • メソッドが完了したときにコードを実行したい(Javascriptの「コールバック」など)
  • 「レイジーコード」、つまり必要な場合にのみ実行され、ユーザーがカスタマイズできるコードが必要です(この例については、Hash#fetchをご覧ください。 メソッド)

いいね!

Yield_Self –違いは何ですか?

この新しいyield_selfが見つかるかもしれません メソッドとyieldに関連していると考える 。

そうではありません。

yield(self)でも 自己は現在のオブジェクトを参照しているため、異なります。

ここでyield_self は、Ruby 2.5で追加されたもので、メソッドを呼び出しているオブジェクトを指します。

この方法の良い使い方は?

メソッドをチェーンし、呼び出しているオブジェクトで何かをしたいときはいつでもこれを使用してくださいyield_self オン。

元のオブジェクトではなく、結果を返している間。

n_squared = ->(n) { n ** 2 }

2
.yield_self(&n_squared)
.yield_self(&n_squared)

# 16

Ruby 2.6には、yield_selfのエイリアスがあります。 、then メソッド。

ただし、通常のyieldと混同しないでください。 。

わかりましたか?

Railsでの歩留まり

yieldの使用についても簡単に触れておきます。 Railsとテンプレートエンジンで。

yieldが見つかります レイアウトの内側。

Railsは、レンダリングしているビューのコンテンツに置き換えます。

yieldはありません 空のレイアウトに等しい!

これが、レイアウトとビューを組み合わせる方法です。

概要

Rubyのyieldキーワードについて学習しました。正確には、それが何であるか、どのように機能するか、そしてなぜそれが重要なのか。

次に、Rubyコードで試してみてください。

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


  1. Rubyでの関数型プログラミング(完全ガイド)

    関数型プログラミングについて聞いたばかりで、いくつか質問があるかもしれません。 いいね… 関数型プログラミングとは正確には何ですか? オブジェクト指向プログラミングと比較してどうですか? Rubyで関数型プログラミングを使用する必要がありますか? これらの質問に答えて、これがどのように機能するかをよりよく理解できるようにします。 関数型プログラミングとは これは単なる流行や派手な言葉ではなく、長い間存在していた実際のプログラミングパラダイムですが、最近人気を取り戻しています。 そして、このパラダイムの背後にある基本的な考え方は、あなたが思っているよりも理解しやすいです。 関数型

  2. 完全ガイド:Fitbit Pay

    Fitbit は、利用可能な最高のスマート ウェアラブルの 1 つです。多くのモデルがあり、多くの機能を備えています。 Fitbit の有名な機能の 1 つに Fitbit Pay があります。 Fitbit Ionic と Fitbit Versa の近距離無線通信チップを使用すると、非接触型決済を利用できるあらゆる店舗で支払うことができます。 この投稿では、Fitbit Pay の使用方法を理解するのに役立つ完全なガイドを掲載しています。 Fitbit Pay とは? Fitbit Pay は、Fitbit Ionic および Versa にデビット カードまたはクレジット カードを追