多くの言語の識別子名に$が含まれているのはなぜですか?


15

Perl、Awk、Bash、PHPなどの多くのスクリプト言語は、識別子名の前に$記号を使用します。理由を調べてみましたが、満足のいく答えはありませんでした。


10
おそらくほとんどのプログラマーのビジネスプランの最後のステップが原因です。
オデッド

回答:


4

ボーンシェルまたはその前身は、おそらくコンベンションの起源でした。シェルは$foo、シェル変数または環境変数を参照するために使用する傾向がありますが、fooリテラル文字列(コマンド名、ファイル名、または別のコマンドに渡される単語など)として解釈されます。

おそらく、入力しなければならない量を最小限にすることの問題でしょう。ほとんどのプログラミング言語では、入力するもののほとんどは、キーワード(小さな固定セットから)と宣言されたものの名前になります。それらの名前だけを使用するのは理にかなっています。文字列リテラルは、それらを構文的に区別するために引用符(単一または二重)で囲まれています。

対話型シェルでは、入力するもののほとんどはコマンド名とファイル名になるため、装飾されていないフォームを使用することは理にかなっています。変数名はそれほど頻繁には使用されないため、変数名を前に付けると$簡単に区別できます。

$一部のBASICが(数値変数ではなく)文字列変数に使用するトレーリングも、おそらくインスピレーションでした。

$スカラー変数に使用するPerlの選択は、Bourneシェルなどのシェルに疑いなく触発されたものであり、Perlの初期バージョンはベアワードを文字列リテラルとして扱いました(print FOOそしてprint "FOO"同等でした)。このベアワードの使用は、Perlのより新しいバージョンでは推奨されていませんが、シギルは残り、主にさまざまな種類の変数を区別するために使用されます。おそらくPerlがゼロから設計されていた場合、スカラー変数は「空の印」で示されるかもしれませんが、それは起こりませんでした。

(ところで、Awkのはシギルを使用していないそれは持っています。$構文は、それはフィールド番号を指します。 NFフィールドの数であり、$NF最後の(あるNF番目)フィールドが。)



14

変数名の$記号は、"Sigil"の特殊なケースです。BASICの初期(1964年頃)には、文字列変数名を示すために$が使用されていました。私の推測では、コンパイラで変数名を記号を使用して他の文法から簡単に分離でき、BASICに共通していたため、その使用が進んだためです。ただし、使用されるのはこれだけではありません。


2
Basic の$for文字列(および%整数)は、少なくとも私が受けた(非標準の)バリアントでは、プレフィックスではなくサフィックスでした。もちろん、それは重要なことではありません-少なくともコンパイラと字句解析に関する限り、接尾辞と接頭辞はかなり表面的なものです。読みやすさの点で若干の違いがあるかもしれません。
Steve314

ところで-Basicで機能した理由の1つは、型の範囲が非常に限られており、ユーザー定義の型がなかったため、必要なシギルの範囲が非常に限られていたことです。Perlの使用法は異なります-私にとってはかなり長い間ですので、詳細を本当に思い出すことはできません。
Steve314

@ steve314、あなたは絶対に正しいA $ = ...これに注意してくれてありがとう。
NoChance

5

sigilと呼ばれることもあり、一般に変数(およびその他)の名前を値に変換するために使用されます。


5

これはBASICに由来するようで、$サフィックスは文字列変数を示し、「文字列」とも発音されます。たとえば、INKEY $は「in key string」と発音されます。

しかし、なぜドル記号なのでしょうか?さて、$は文字列のSに少し似ています。ウィキペディアによると:

ドル記号は、コンピューターの文字セットにほとんど普遍的に存在する数少ない記号の1つですが、コンピューターソフトウェア内の文字通りの意味ではほとんど必要ないため、$文字はコンピューターで使用されていますお金とは無関係の多くの目的のため。

(適切なのは、For A Few Dollars More Moreはこれを入力する際に​​テリーにあります。)


2

何故なの?特にインタプリタ言語では、識別子が変数になることを伝えることができるレクサーを書く方が簡単です(したがって、パーサーを書くのが簡単になります)。理由については$、おそらく大部分が伝統です-コンストラクトを使用する初期言語の作成者の1人(Bash?またはそれの前身)は何らかの理由でそれを使用し、その後の言語はそれを採用しました。


1
字句解析器と構文解析器を書くのはそれほど簡単ではないかもしれませんが、予約語の必要性を排除します。
TomG
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.