Rubyのブロックが毎回よくわからなくなります。強いエンジニアになりたひ。。。
あと、範囲オブジェクトもよくわかってないような気がします。雑魚です。
でも、Rubyにおいてブロックという概念はめっちゃ大事らしいので逃げることはできなさそうです。
仕方ないので勉強します。
勉強がてらここにアウトプットしてみます。
よかったらいいねしてください。喜びます。
ブロックは範囲オブジェクトや配列に対して使える
具体例をみながら理解していきましょう。
例
(1..5).each { |i| puts 2*i }
出力結果
2 4 6 8 10
波カッコの部分がブロックです。
出力結果をみながらだと理解しやすいですね。
(1..5).each { |i| puts 2*i }
を無理やり和訳すると、
「(1..5)という範囲オブジェクトに対して、eachメソッドを実行する。eachメソッドの引数は |i| puts 2*i
」
という感じでしょうか。
「1から5までのそれぞれの要素に対して、2倍した結果を出力する」
というとより自然言語っぽくていいですかね。
ちなみにこのコード
(1..5).each { |i| puts 2*i }
はこのように書くこともできます。
(1..5).each do |i| puts 2*i end
他の言語やってた人だったらこっちの方がわかりやすいかもですね。
しかし、今回のようにRubyのコードが一行の場合は前者の書き方が一般的なので早く慣れる必要がありそうです。
複数行のときは後者の書き方でオッケーです。
(1..5).each { |i| puts 2*i }
は和訳すると、
「(1..5)という範囲オブジェクトに対して、eachメソッドを実行する。eachメソッドの引数は |i| puts 2*i
」
と言えると言いましたが、より汎用的な言い方をすると、
「範囲オブジェクトで指定された要素に対して、波カッコで書かれたRubyのコードを実行する」
とも言えますね。
ブロックを一言でいうと???
ブロックを一言でいうと、
「引数としてRubyのコードを渡せる機能」
と言えます。
今までは引数には数字や文字列、trueやfalseなどを渡していましたが、ブロックでは引数にRubyコードを渡すことができます。
とりあえずはこれくらいの理解でいいですかね。
あとはコードみたり書いたりして慣れていこうと思います。
mapもよくわかってないので、次はmapの記事を書こうかな。