やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

「Ruby プログラムの実行」を読む7(「begin end」「=begin =end」「BEGIN END」)

 ググラビリティの低さといったらないこの紛らわしいヤツらを一挙に説明する。

成果物

情報源

=begin, =end

 複数行コメント。

=begin
複数行のコメントが書ける。
が、スタイルガイドによると
#による1行コメントが推奨らしい。
=end

 スタイルガイドでは代わりに1行コメント#を使用することが推奨されている。なので使わないほうが無難と思われる。というか、こんな長いの書きたくない。そもそもコメントさえも書かずに理解しやすいコードを書くのがベスト。

BEGIN, END

 ブロック文。プログラムの開始時と終了時に行う処理を書く。

BEGIN { p '*****BEGIN*****' }
END { p '*****END*****' }

a.rb

#!/usr/bin/env ruby
p 'CODING'
END { p '*****END*****' }
BEGIN { p '*****BEGIN*****' }
ruby a.rb
"*****BEGIN*****"
"CODING"
"*****END*****"

 コードは上からCODING,END,BEGINだが、実行された順はBEGIN,CODING,ENDである。つまりBEGIN,ENDブロックはそれぞれプログラムの開始時と終了時に実行される。

begin, end

 よく使うのはこいつらだと思う。

例外処理

begin 
  raise
rescue => e
  p e
ensure
  p "絶対実行"
end

 たぶん例外処理するときに使うのが一番多いのでは? それにしてもbeginというキーワードでは例外処理だとイメージしづらい。

無名関数

 むしろ例外処理以外で見たことがない。調べてみた。すると無名関数として使うことがあるようだ。

v ||= begin
  処理
end

 ||=というのは以下の意味らしい。

「左辺が偽または未定義であれば、右辺の評価値を代入する」というイディオムになります。

 ああ、初期値をセットするって意味か。それを無名関数でやるときの書式なのね。ふーん。

 まあふつうに代入=で使ってもいいのだろう。重要なのはbegin式もやはり値を返すということ。最後に実行した式の戻り値を返すのだろう。つまり無名関数をつくりたいときはbegin-endでやれってことか。

v = begin
  a = 1 + 2
  b = 3 + 4
  a + b
end
=> 10

 以下のように書いてもエラーになってしまう。

v = {
  a = 1 + 2
  b = 3 + 4
  a + b
}
syntax error, unexpected '\n', expecting => (SyntaxError)
v = {a = 1 + 2; b = 3 + 4; a + b;}
syntax error, unexpected ';', expecting => (SyntaxError)
v = {10}
syntax error, unexpected '}', expecting => (SyntaxError)

所感

 あいかわらず情報がまとまっていない。いつか自分がわかりやすいように情報をまとめたい。

対象環境

$ uname -a
Linux raspberrypi 5.10.52-v7l+ #1441 SMP Tue Aug 3 18:11:56 BST 2021 armv7l GNU/Linux