\

PythonとRubyのyieldキーワードは、それぞれの言語で異なる概念を表現します。

Rubyのyield

Rubyでは、yieldは無名関数(ブロック)を呼び出すためのショートカットとして使用されます。以下に例を示します。

def do_stuff(val)
  puts "Started executing do_stuff"
  yield(val+3)
  yield(val+4)
  puts "Finished executing do_stuff"
end

do_stuff(10) {|x| puts x+3} # This is a block, which is an anonymous function

このコードは、do_stuffメソッドが呼び出されると、まず"Started executing do_stuff"を出力し、次にブロック(無名関数)を2回呼び出し、最後に"Finished executing do_stuff"を出力します。

Pythonのyield

一方、Pythonではyieldキーワードが関数定義内にある場合、その関数はジェネレータとなります。ジェネレータは、実行を途中で停止し、再開することができる特殊なタイプの関数です。以下に例を示します。

def do_stuff(val):
  print("Started execution of do_stuff()")
  yield val + 3
  print("Line after 'yield val + 3'")
  yield val + 4
  print("Line after 'yield val + 4'")
  print("Finished executing do_stuff()")

my_gen = do_stuff(10)
val = next(my_gen)
print("--received {} from generator".format(val))

このコードは、do_stuffジェネレータが呼び出されると、まず"Started execution of do_stuff()"を出力し、次にyield文に到達して結果を返し、実行を停止します。ジェネレータに対してnext()が再度呼び出されると、実行が再開され、次のyield文に到達するまで実行されます。

まとめ

Rubyのyieldは、無名関数(ブロック)を呼び出すためのショートカットです。一方、Pythonのyieldは、ジェネレータ(実行を途中で停止し、再開することができる特殊なタイプの関数)を作成するためのキーワードです。これらの違いを理解することで、PythonとRubyの間でコードを移植する際に役立つでしょう。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です