Rubyのブロックについて

はじめに

今回も、Rubyについて、自己満足アウトプットをしていこうと思います!

今回はブロックについてです!

ブロックとは?

まずは簡単なブロックのれを上げていこうと思います!

ages = [20, 56, 32] 
ages.each do |age| 
 puts age 
end 
# ターミナル出力結果 
# 20 
# 56 
# 32

これは、eachメソッドを使った簡単なブロックです

ではブロックとはこのコードの中でどこのことをいうのでしょうか?

それは、この構文のdo~endまでの部分をブロックと言います

|ooo|となっている部分をブロック変数と言います!

また、ブロックの書き方にはこれ以外にもう1つ紹介します!

もう1種類の書き方

ages.each {|age| 
puts age
 }

このような書き方があります!

{}で括るという書き方もあります

これはdo~endのコードが長い時に使うと便利です

また、上のように改行は別にしなくても大丈夫です!

yield

yieldとは、メソッドに渡されたブロックを実行するための命令です!

これについての書き方を少し説明していこうと思います!

yieldの基本的な使い方

ではyieldを使ったコードを下に表示してみます!

def fish
 puts "Sakana" 
 yield 
end 
fish do 
 puts "Maguro" 
end
# ターミナル出力結果 
# Sakana
# Maguro

このような書き方ができます!

ちなみにこのdef fishというのは自分で作ったメソッドです!

def~endで自分で定義したメソッドを使うことができます!

このコードでは、常にSakanaと出力されています!

では、このfishというメソッドを任意のものにするために、yieldに引数を与得ていこうと思います!

def fish
 puts "Sakana"
 yield("Kaziki")
end
fish do |text|
 puts |text|
end
# ターミナル出力結果
# Sakana
# Kaziki

このような感じで、上記のものでは、メソッドの定義内で、yieldの引数でとしてKazikiという文字列を渡しています!

そして、メソッドの実行側として、|text|というブロック引数として受け取っています!!

ブロックをメソッドの引数として明示的に受け取る方法

上記のようなブロックをメソッドの引数として明示的に受け取ることも可能です!

そのためには、引数の前に&をつけ、また、実行するにはcallメソッドを実行します!

def fish(&block)
puts "Sakana"
block.call("Kaziki")
end
fish do |text|
puts text
end
#出力
#Sakana
#Kaziki

これは、callメソッドで引数でKazikiという文字列を渡し、ブロック引数に代入されることで、出力がされています!

星野涼太
ルアー釣りを本格的に初めて4年目です!世界各国の魚を釣ることを目標に釣りをしています!その時得られた情報をこのブログできょう共有しています!
ryota hoshinoをフォローする
未分類
スポンサーリンク
ryota hoshinoをフォローする
hoshino9796
ryota hoshinoをフォローする
駆け出しSEの釣り日記

コメント

タイトルとURLをコピーしました