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への接続・切断
- トランザクションの開始・終了
- ロックと開放
今日はこんな感じです。