ググラビリティの低さといったらないこの紛らわしいヤツらを一挙に説明する。
成果物
情報源
=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)
所感
あいかわらず情報がまとまっていない。いつか自分がわかりやすいように情報をまとめたい。
対象環境
- Raspbierry pi 4 Model B
- Raspberry Pi OS buster 10.0 2020-08-20 ※
- bash 5.0.3(1)-release
- Ruby 3.0.2
$ uname -a Linux raspberrypi 5.10.52-v7l+ #1441 SMP Tue Aug 3 18:11:56 BST 2021 armv7l GNU/Linux