書き方
@sample ||= begin
# 処理1
# 処理2
# 戻り値
end
begin-endは例外処理以外にも使用される。
複数の文をグループ化するために使用されるブロック構文。
→begin
とend
の間に挟まれた部分は、1つのまとまりとして扱われる。
begin-end構文とメソッドそれぞれのメリット
- begin-end構文
- 複数の処理を1つのまとまりとして扱い、それを直接変数に代入したい場合に便利。
- メソッド
- 再利用性と可読性を高めるために使われ、大きな処理をまとめる際に便利。
サンプルコード
class Sample
def execute
# 処理終了:対象会員が存在しない場合
if target_members.blank?
puts '対象会員が存在しません。'
exit
end
# 更新処理 ※省略
update_members(target_members)
end
# 対象会員抽出
def target_members
@target_members ||= begin
results = Member.where(active: true)
results.each { |member| member.name += '様' }
results
end
rescue => e
# エラーハンドリングの処理
puts "エラーが発生しました: #{e.message}"
puts e.backtrace.join("\n")
end
# 更新処理のサンプル
def update_members(members)
# 省略
end
end
# Sampleクラスのインスタンスを作成し、executeメソッドを呼び出す
Sample.new.execute
この例だと
- begin-end構文で複数処理を1つのまとまりとして扱い、可読性を高めている。
-
#target_members
というメソッドにすることで再利用性と可読性を高めている。 -
メモ化しているため、
#target_members
を何度呼び出しても無駄にクエリ発行等の処理が実行されることはない。