はじめに
今回も、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という文字列を渡し、ブロック引数に代入されることで、出力がされています!
コメント