2011-08-03 111 views
6

有誰知道,在某些腳本語言,即PHP或Perl中,「美元變量表示法」背後的實際原因是什麼? Python的創建者沒有發現$variable有用,我也沒有。爲什麼PHP和Perl迫使我經常按shift-4?腳本語言中的美元符號 - 爲什麼?

(OK,在Perl中你能以某種方式與區分$scalar@array%hash解釋,但它仍然可以成功地避免了那裏,類型並不需要明確)

+0

在Perl中@array可以根據上下文標量(它返回數組的長度) – Bruce

+0

你應該給紅寶石試試:) – Sairam

+6

這是之前http://stackoverflow.com/questions/3073812問/ why-php-variables-start-with-a-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從shell腳本繼承此語法,並且PHP從Perl繼承它。 – mob

2

他們解析,這樣,當使用變量可以很容易地與其他東西區分開來。

+0

通過「其他東西「你的意思可能是關鍵詞,但也許有20個關鍵詞,所以它可能很容易區分_them_和其他東西:) –

+0

@JakubM。它取決於例如perl的語言。有260多個關鍵字,php可能更少 - 但是函數和其他符號(從庫/模塊導入的那些符號以及可以定義的符號)之間存在潛在的衝突。另外在無簽名的語言中 - 像'map'或'command'這樣的單詞沒有明確的含義(是一個數據結構,我放入一個變量或一個函數,或者一個shell內置/可執行文件) – shalomb

7

其中一個設計目標與Perl的變量是使他們從內建命令,保留字,控制流的話,等視覺上可區別。對於不熟悉Perl的人來說,所有的線索都可能看起來像線噪聲。但對於熟練掌握Perl的人來說,他們所稱的「信號」使得代碼更具可讀性,更易於理解。正如您已經注意到的那樣,Perl5中的sigil類型會根據所訪問的基礎數據而變化。 $爲標量,@爲數組,%爲散列。

但有額外的視覺提示$hash{key}指的是哈希舉行的標量值。 $ sigil表示標量,括號表示我們正在索引一個散列(就像一個例子)。在索引的情況下,到一個數組,$array[0],如:$告訴我們,我們在訪問數組中舉行的標量值,取得了明顯的方括號,在括號內的指數點。當我們看到@array[1, 2, 3],我們通過我們從一個數組元素抓取(假設列表環境)的列表@的方式立即通知視覺(方括號還告訴我們應該從一個數組讓他們) 。這是一個數組片。散列片將是@hash{qw/ this that the other/}。因此,@再一次告訴我們要查找一個列表,大括號告訴我們我們從哈希中獲得它們。當我們看到沒有後綴括號的@%時,我們正在取整個數組或散列。

線索迅速成爲第二天性。

Perl6有一點不同,並會採取精通Perl5的用戶幾天就習慣了。 ;)

有關於這個問題有好的維基百科的文章:Sigil (Computer Programming)

從視覺引導

不談,印記使其他的東西也更容易;例如,解引用和插值。雖然可以使用更復雜的操作符來進行插值(並且偶爾還需要消除變量結尾和相鄰單詞字符的連續位置),但目標可能是讓簡單的事情變得簡單,同時讓困難的事情成爲可能。

6

Natural Language Principles in Perl:原因一語言可以擺脫某些地方含糊

部分原因是其他的模糊性通過多種機制抑制。英語使用數字和單詞順序,在代詞中使用一個案例系統的痕跡:「男人看着男人,他們回頭看着他。」這句話完全清楚了誰在做什麼。同樣,Perl在其名詞上有數字標記;即$dog是一個坑,而@dog是(可能)很多。所以$@有點像英文中的「this」和「these」。

+1

...我看到我回答這個兩年前完全相同的方式http://stackoverflow.com/questions/1091634/why-do-perl-variables-need-to-start-with – ysth

+0

Sigils還沒有改變。 ;) – DavidO

+0

@David O,有一個twigil,我想我有一些空閒的 – ysth

相關問題