Rubyのyieldの使い方を現役エンジニアが解説【初心者向け】

初心者向けにRubyのyieldの使い方について現役エンジニアが解説しています。yieldを使うとブロックを展開することが出来ます。仕組みとしてはブロックをprocオブジェクトとしてyieldが受け取り、ブロック引数を展開します。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

Rubyのyieldの使い方について解説します。

Rubyについてそもそもよく分からないという方は、Rubyとは何なのか解説した記事をまずご覧ください。

 

なお本記事は、TechAcademyのWebアプリケーションオンラインブートキャンプの内容をもとに紹介しています。
 

田島悠介

今回は、Rubyに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

Rubyのyieldの使い方について詳しく説明していくね!

大石ゆかり

お願いします!

 

メソッドの呼び出しとは

Rubyにおけるメソッドの呼び出しはユーザが独自に定義した関数(メソッド)やクラスにそれぞれ定義しているメソッドを呼び出すことを指します。

 

独自に定義した関数を呼び出し

#まずは関数を定義

def hello_name(name)

puts "hello #{name}"

end

#定義した関数を呼び出し

hello_name("world")

 

 

クラスに定義している関数を呼び出し

#文字列を変数に設定
test = "hello world"
#文字列のクラスを確認
test.class
#Stringクラスにあるreplace関数を呼び出し
test.replace("new world")

 

Rubyの「ブロック付きメソッドの呼び出し」とは

ブロックとは do … end または { … } の形をしたものになります。
ブロック付きのメソッドを呼び出すと、そのメソッドの内部からブロックを評価した結果を返却します。

ブロック付きメソッドを自身で定義する場合は、 yield式を使用します。

 

[PR] Rubyのプログラミングで挫折しない学習方法を動画で公開中

yieldとは

yieldを簡単に説明すると、「メソッド呼び出しの際に渡されたブロックと同じ動きをするもの」となります。
 

yieldの書き方

以下のコードをご覧ください。
 

def puts_block
yield
end

puts_block{puts "hello world"}
# "hello world"

 

このように、メソッド内でyieldを記述することにより、呼び出した際のブロックを評価した結果を返却します。
 

実際に書いてみよう

#ブロックに引数を渡して計算結果を表示

def plus_block(a,b)
puts "引数1:#{a}、 引数2:#{b}"
yield(a + b)
end

plus_block(10,20) do |total|
puts "計算結果:#{total}"
end

# "引数1:10、 引数2:20"
# "計算結果:30"

#ブロックが渡されているかを判断に表示を分岐

def block_judgment(a)
if block_given?
yield(a+10)
else
puts "ブロックが渡されていません"
end
end

block_judgment(5)
block_judgment(5){|total| puts "計算結果:#{total}"}

# "ブロックが渡されていません"
# "計算結果:30"

 

筆者プロフィール

水野大輝(みずのたいき)

2014年より、某物流会社のシステム開発担当として入社。

未経験ながら、社内システム保守~新規受注システム開発まで携わり、JavaScript Ruby on Rails PostgreSQLなどの経験を積む。
現在も、開発案件に携わりながら、日々勉強中。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

TechAcademyでは初心者でも最短4週間でエンジニアになれるRuby on Railsオンラインブートキャンプを開催しています。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルWebサービスを開発することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。