2011-08-03 23 views
6

誰かが知っていますか、PHPやPerlなどのスクリプト言語の「ドル記号表記」の背後にある実際の理由は何ですか? Pythonの作成者は$variableが役に立ちませんでした。なぜPHPとPerlがshift-4を頻繁に押すように強制しますか?スクリプト言語のドル記号 - なぜですか?

+0

コンテキストに応じてスカラことができます(これは、配列の長さを返します) – Bruce

+0

あなたはルビーを試してみる必要があります:) – Sairam

+6

これはhttp://stackoverflow.com/questions/3073812前に頼まれました/ why-php-variables-with-with-sign-symbol – dpp

答えて

8

これが主な理由であるかどうかわかりませんが、PHPが識別マーカーを持つ変数を持っていない場合は、次のことはできません。

echo "Welcome back $name, we last saw you on $date"; 

更新:

ことも可能variable variableと呼ばれるものを作成します。可変変数の有用性は議論の余地がありますが、私はそれらを定期的に使用する人はお勧めしません。

+1

恐ろしい答えです。 – Marty

+1

PHPやPerlのような言語は、テキスト処理言語としてはじまっているので、この例で述べていることをすばやくやりたいと思っていたようです。したがって、私はこれが正しい答えだと思います。 – Legolas

+6

Perlはシェルスクリプトからこの構文を継承し、PHPはPerlから継承しました。 – mob

2

を(OK、Perlであなたが何とか$scalar@array%hashを区別してそれを説明することができますが、まだそれが正常にそこに回避することができ、型は明示的である必要はありません)ように解析するとき、彼らはそれを使用する変数他のものと容易に区別することができます。

+0

「他のもの"あなたはおそらくキーワードを意味しますが、おそらく20個のキーワードがありますので、_them_と他のものとを区別するのもかなり簡単です:) –

+0

@JakubM。それは言語に依存します - 例えばperlです。 260以上のキーワード、phpはおそらく少ないですが、関数と他のシンボル(ライブラリ/モジュールからインポートされたものと、定義できるもの)との間に潜在的な衝突があります。また、 'map'や' command'のような言葉には、明示的な意味はありません(私は変数に入れたデータ構造ですか、関数か、シェル組み込み/実行可能ですか?) – shalomb

7

Perlの変数の設計目標の1つは、組み込み関数、予約語、制御フローワードなどと視覚的に区別できるようにすることでした。 Perlに慣れていない人には、すべての手がかりはラインノイズのように見えるかもしれません。しかし、Perlに堪能な人にとっては、 "sigils"と呼ばれるように、コードを読みやすく理解しやすくします。 Perl5のsigilのタイプは、アクセスしている基礎データに応じて変わります。スカラーは$、配列は@、ハッシュは%です。

しかし、$hash{key}がハッシュに保持されているスカラー値を参照しているという追加のビジュアルキューがあります。 $ sigilはスカラーを示し、{}の角かっこは、われわれがハッシュに索引付けしていることを示しています(例として)。配列にインデックスする場合、$array[0]のようになります。$は、角括弧で明示された配列内に保持されているスカラー値にアクセスしていることを示しています。 @array[1, 2, 3]が表示されたら、配列から要素のリストを取得していることを即座に視覚的に通知します(大括弧はまだ配列から取得していることを示しています) 。それはアレイスライスです。ハッシュスライスは@hash{qw/ this that the other/}です。だからもう一度@はリストを探していると言い、中括弧はハッシュからそれらを取得していることを示しています。後ろ括弧なしで@または%が表示されたら、配列全体またはハッシュ全体を取得しています。

手がかりはすぐに第2の性質になります。

Perl6は少し異なり、熟練したPerl5ユーザーが数日慣れていきます。 ;)

ここで、件名に良いWikipediaの記事があります:視覚的なガイドとは別にSigil (Computer Programming)

は、シギルは簡単に、あまりにも他のものを作ります。逆参照および補間などが含まれる。補間のようなもののためにもっと複雑な演算子が使われているかもしれませんが、変数がどこで終わり、隣接する単語の文字が続くかを明確にするために必要な場合もありますが、難しいことを可能にしながら簡単なものを簡単に保つことが目的でした。

Natural Language Principles in Perl
6

:言語は、特定のローカル曖昧で逃げることができる理由の

一部が他の曖昧さは、種々の機構によって抑制されることです。英語は数字と語順を使用し、代名詞には大文字小文字のシステムの痕跡があります。「男性は男性を見て、彼らは彼を振り返ります」誰に何をしているのか、その文では完全にはっきりしています。同様に、Perlはその名詞に番号マーカーを持っています。つまり、$dogは1つの詐欺師であり、@dogは(潜在的に)多数です。だから$@は英語では "this"と "these"と少し似ています。 perlの@arrayで

+1

...私は2年前と同じように、これとまったく同じように答えました。http://stackoverflow.com/questions/1091634/why-do-perl-variables-need-to-start-with – ysth

+0

かわった。 ;) – DavidO

+0

@David O、twigilを持って、私はいくつかのスペアを持っていると思う – ysth

関連する問題