最近の言語はsigil (シジル; 変数の先頭につく記号) が無いほうが主流だが、果たしてどちらがよいのか。
sigilのメリット
-
変数と関数の区別がつきやすい
- 一般に、変数の参照は副作用がないため、区別できるのは望ましい
- しかし、関数がファーストクラスオブジェクトの言語では $foo->() とすることができてしまい、これはすでに関数呼び出しである
-
キーワードや関数と名前が衝突しないことが保証されている
- 変数名を考えるコストが少ない
- Perl5の場合は $a, $b でハマることがよくある
- ただしキーワードハイライトで代用可能
makeやshellなどのUNIX tool chainではよく使われるし、散文でも変数を示すことができる(e.g. ${NextLanguage})
sigilのデメリット
-
文字列リテラルのなかの式展開がクドい
- Perl5だと単純な変数埋め込みは簡単 "foo $bar baz"
- 複雑な式展開は記号だらけ
- "foo ${¥do{ 1 + $foo }} bar"
- "foo @{[ 1 + $foo ]} bar"
- Ruby: bar = 42; "foo #{bar+1} baz"
- Dart: bar = 42; "foo ${bar+1} baz"
$ はシフトキーを要求するので入力コストは増える
結論
近代的なパラダイム・開発環境のもとではメリットはあまりない。