何年も前、私はApplesoft Basicを学びました。文字$
列には常に接尾辞が付き、配列には接尾辞が付き%
ます。それがまさに言語の仕組みです。あなたは何かを見て、それが何であるかを知っていました。なぜそうなのか、そうするようになった設計上の決定がなぜなのかを理解するために、私はインタープリターを深く掘り下げたことがありませんでした。
phpのシギルは、perlの影響(awk
andの影響を受けたsh
)から来ています。perlのシギルは、$
多くの異なるタイプを識別することができるというだけではありません。
$
スカラー
@
リスト
%
ハッシュ
&
コードブロック
*
タイプグロブ
シギルは、シンボルテーブル構造のどの部分を見ているかを識別します。舞台裏では、fooのシンボルテーブルエントリ(typeglob経由でアクセス*foo
)には、fooである可能性のあるすべてのものが含まれています。あり$foo
、@foo
、%foo
、フォーマット foo
、&foo
、ファイルハンドルFOO、などが...
これにより、ある変数から別の変数へのエイリアスを作成することもできます。
#!/usr/bin/perl
$foo = "foo";
@qux = (1,2);
*bar = \$foo;
*bar = \@qux;
print "$bar @bar\n";
これは印刷foo 1 2
します-perlでは、これはシギルが本当に何のためにあるのですか、あなたがこれを行うべきではなく、むしろ彼らが行う舞台裏のものがあります。
読みやすさのためにシギルはあまりありませんが、名前空間で衝突$foo
を@foo
起こさずに持つことができるように(両方を持てない他の言語と比較してくださいint foo; int[] foo;
)
読みやすさのための印章は、あらゆる言語の一部として学習されるものです-構文を読みます。仮に、型自体を(ハンガリー語表記として)識別子の一部として強制することができます。
以下の行に沿ったlexの何か:
typeChar [is]
capLetter [A-Z]
letter [a-z]
digit [0-9]
%%
{typeChar}{capLetter}(letter}|{digit})* { prientif("iddentifier");}
%%
そして、あなたは次のようなコードを持つことができます
iFoo = 42;
sFoo = "a string";
iBar = iFoo * 2;
これは良いアイデアだとは言いませんが、言語に慣れている人はネイティブでこれを読むことができ、読みやすさを向上させると思う一方で、言語に慣れていない人は追加するだけだと思うかもしれません言語へのノイズの束。
しかし、この方法で定義された言語で作業した後、おそらく問題なく読むことができました。
彼らが好きな人もいればそうでない人もいます。さまざまなフォーラムでこれを議論している偉大な聖戦があり、それは本当にあなたがそれらをどれだけ使ったかに要約されます。
シギルを使用する非プログラマ向けの新しい言語を設計できます。これまでプログラミングをしたことがない人は、シギルについて少しも文句を言うことはありません。一方、言語の一部としてそれらを使用することはできず、Rubyまたはperlのプログラマーは、いくつかの重要な情報を見逃していると不平を言うようになります。
本当に関係ありません。重要なのは、シギルを使用するかどうかにかかわらず、シギルがどのように言語に適合するかです。あなたができるようにしたいですか、"123 $foo 456"
あなたがしなければなりません"123 " + foo + " 456"
か?これは、決定が行われるべき場所です。