プログラミング的なSomething

読者です 読者をやめる 読者になる 読者になる

プログラミング的なSomething

ITエンジニア(?)目線で生活・自転車・トレーニング話を綴ります

Rubyはファイルが自動でクローズされるって言われてる理由を振り返ってブロックを有難がろう

自動でクローズされるってよく言われるけど、結局はFileオブジェクトの使い方に依る。

ブロックで開けば自動でクローズされる。

File.open ‘README.md’ do |file|
  puts file.read
end

ブロックで開いてない場合、ファイルは自分で閉じる必要があります。

file = File.open(‘without_block.txt’,’w’)
file.puts ‘without_block’
file.close

ブロック付きで呼び出されるとFileオブジェクトはブロックの引数として与えられ、ファイルはブロックの終了と共に自動的に閉じられます。

ブロックはeachみたいな繰り返し処理だけではなく、こういったファイルオープン・クローズに利用されます。その理由として、ブロックは準備→本質的な処理→後片付けといった前後の処理を共通化して実行することができます。例えば以下です。

  • ファイルオープン・クローズ
  • DBへの接続・切断
  • トランザクションの開始・終了
  • ロックと開放

今日はこんな感じです。