RubyのBEGIN, END

2020-08-24 hit count image

RubyのBEGIN, ENDブロックについて説明します。

概要

RubyのBEGINENDについて説明します。BEGINブロックはプログラムを開始する前実行する物を、ENDブロックはプログラムが終了する直前に実行する物を定義することができます。

BEGINブロック

BEGINブロックで定義したものは他の物より先に実行されます。

puts "Hello"
BEGIN { puts "World" }
# World
# Hello

複数のBEGINブロックを持ってる場合、宣言した順で実行されます。

puts "Hello"
BEGIN { puts "World" }
BEGIN { puts "BEGIN" }
# World
# BEGIN
# Hello

BEGINブロックはローカル変数の範囲を持ってるので、他のローカル変数と参照することができません。

BEGIN {
  $a = 0
  b = 0
}
puts $a # Global Variable
puts b # Local Variable

# 0
# undefined local variable or method 'b' for main:Object (NameError)

ENDブロック

ENDブロックで定義した物は全ての物が実行された後、実行されます。

END { puts 5 }
puts 1
# 1
# 5

ENDブロックが複数ある場合は、宣言の逆順で実行されます。

END { puts 5 }
END { puts 3 }
puts 1
# 1
# 3
# 5

ENDブロックはBEGINとは違って、変数の範囲を共有します。

i = 1
END { puts i }
# 1

完了

Rubyで良く使われないものですが、ユニークな文法なので、覚えとくと良いかと思います。

私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!

Posts