Programming from 30

自分の備忘録が、誰かの為になれば・・

ブロックの失敗😅【Ruby】

最近課題をやっていると頻繁にブロックを使う!ただ幾分理解足らずで、ミスばかりなので過ちを備忘録として・・・

<ブロック>とは

Rubyのコードで書かれた処理のかたまりで、メソッドに引数として値を渡す

[1,2,3,4,5,6,7].each do |i|
  puts i
end

or

3.times do |i|
   x = i * 5
   puts x
end

こんな感じで書ける。ブロックは基本do ~ endの中に行いたい処理を書き、引数として値を渡している。因みに{.......}をdo ~ endの代わりに使う事もでき、基本的には1行で完結するコードに関しては{.......}を使い、複数行にわたるコードはdo ~ endを使用!
ただ参考書やwebサイトを見て、簡単なコードを書くだけだった僕はいざコードを各段階でミスばかり!

# ブロックの中で、合計を取る!
['hoge.rb','fuga.rb','baz.rb'].each do |f|
   st = File::Stat.new(f)
   b = st.blocks
   t = b.inject{|sum,n| sum + n}
   put t
 end

オブジェクトのクラスが違うのと、謎のコードで値を取れるわけもなく、長い事ハマりました。またブロック内外部で、同じ変数を使ってしまって、前の変数の値を書き換えてしまったり。

t = 23

[1,2,3,4,5].each do |i|
   t = i *3
   puts t
 end

puts t
=> 15

てんでだめですね!
ある程度自由に記述できるのがブロックではあるけど、わかんない事を書きすぎて書いている自分も理解できなくなって切るので金輪際気を付けます!
またdo ~ end{......}では結合度も違い、エラーの原因になってしまいそうなので、気をつけたい!ブロックをdo…endで書くか{…}で書くかにより挙動が変わる例
他にもyieldprocとかもあるので、理解に達したらブログ書きます!