シンタックスシュガーとは?

定義*1

言語を読み書きしやすくするための、機能的には本質でない構文。それができなくても他の構文で同じことを表現できるもの。構文糖とも.

つまりどいいうこと

本当は他の構文で書くことができるけれど、視認性を高めるために、別の方法を使って記述したコードのこと。見やすさ重視ってことですね。

試しにコードを書いてみる

シンタックスシュガー21選 - critbitの日記を見て、「15 - Nested Ternary Operators(ネスト三項演算子)*2」が今調べていることに近いので、21 Ruby Tricks You Should Be Using In Your Own Codeからコードを拝借して走らせてみる*3

qty = 1
var = qty == 0 ? 'none' : qty == 1 ? 'one' : 'many'
p var
#上記の式は次の式と同値である
var = (qty == 0 ? 'none' :(qty == 1 ? 'one' : 'many'))
p var

実行結果はこちら。

# ruby example.rb         
"one"
"one"

シンタックスシュガーなので別の構文で記述する

上記のコードを別の構文で書き換えると次のとおり記述できる。

qty = 1
if qty == 0 then
   var = 'none'
elsif qty == 1 then
   var = 'one'
else
   var = 'many'
end
puts var

実行結果はこちら

# ruby ex101.rb
one

振り返って

この調査は、1+2という式が、実際には1.+(2)というメソッド呼び出しで定義されていることを知りびっくりしたのが発端。シンタックスシュガーによっては、コードの視認性が上がるので、ただ書いて満足するだけでなく、そのうえで、「どうしたら読みやすいか」というところに注目していこう。*4

*1:「はじめてのRuby」p. 196

*2:ネストとはネストとは (nest): - IT用語辞典バイナリより、構造化プログラミングにおいてプログラムを構築する手法の一つで、あるルーチンやデータブロックの中に、別のルーチンやデータブロックがはめ込まれることである。入れ子構造とも呼ぶ。

*3:2010.1.12 コードが間違っていたので修正。本当ははてなで取り消し線とか - himadatenodeの日記などで一重線で取り消したいがrubyのコードブロックの中でははてな記法が無効らしい。

*4:そのためのペアプログラミングなんだろう