2011-05-22 13 views
35

可能重複:
Any reason for having 「val capacity : Int」 instead of 「val Int Capacity」 in Scala爲什麼Scala選擇變量名後的類型?

在Scala中變量的聲明像:

var stockPrice: Double = 100. 

凡型(雙)如下所述標識符(stockPrice)。傳統上,在諸如C,Java,C#等命令式語言中,類型名稱位於標識符之前。

double stock_price = 100.0; 

它純粹是一種味道的問題,還是最終有類型名稱幫助編譯器以任何方式?去也有相同的風格。

+0

C,Java和C#都來自C.Pascal,例如,使用與Scala相同的樣式。 – 2011-05-22 02:07:03

+0

不知道關於帕斯卡。謝謝。 – Rohit 2011-05-22 02:22:57

+4

我不確定要合併的意圖關閉這個問題。這個人更有可能出現在搜索中,除非搜索者足夠幸運,以至於他們碰巧在詢問一個名爲'capacity'的變量。 – 2011-05-22 11:26:11

回答

51

除了支持類型推斷,這有一個人體工程學的優勢了。

對於任何給定的變量名+型,有機會,名稱是信息的比較重要的一塊。將它移動到左側會更顯眼,並且一旦習慣風格,代碼更具可讀性。

人機工程學益處:

  • 隨着valvardef成員名稱之前,而不是它們的類型,它們都整齊地列排隊。
  • 如果您更改成員的只是類型,或者完全贊成推斷放棄它,然後細粒度差異工具將清楚地表明,名字是沒有改變的
  • 同樣,VAL之間變化的/ var/DEF是的diff
  • 推斷,應考慮在Scala中默認行爲是很清楚,你只需要在某些特定的場景類型規格,即使在當時它主要用於編譯器完成。因此,把它們放在聲明的開頭就強調了錯誤的東西。
  • 「名稱:類型」而不是「類型名稱」更符合大多數程序員實際考慮聲明的方式,這更自然。
  • 針對指針和數組的不同C/C++和Java約定(例如,*是以下名稱的前綴,而不是C/C++中前一種類型的後綴,或者[]是名稱和類型中的有效後綴Java)對新手或語言轉換仍然感到困惑,並且在單行聲明多個變量時會導致一些非常真實的錯誤。斯卡拉在這裏沒有留下任何疑問和困惑的餘地。
+9

我認爲看到像Eclipse這樣的Java IDE也首先顯示名字也很有趣。不在源代碼中,但例如在代碼大綱中。 – 2011-05-22 10:27:31

+0

@Mirko - 非常真實... – 2011-05-22 11:01:57

15

這事後,以便它可以爲類型推斷被刪除:

var stockPrice: Double = 100.0 
var stockPrice = 100.0 

然而,真實的命令式語言,通常有類型的第一位。例如,帕斯卡爾沒有。現在

,C這樣做,和C++,Java和C#是基於C的語法,所以他們自然這樣做的太多,但有絕對無關,與命令式語言。

+0

你能否解釋一下你的意思是「刪除類型推斷」?謝謝。 – Rohit 2011-05-22 02:17:44

+0

@Rohit看看這個例子,類型被刪除,以便它可以被推斷出來。 – 2011-05-22 02:40:43

+3

我不認爲特別是類型定位可以將它們排除在外。 – Raphael 2011-05-22 09:00:58

4

應當指出的是,即使C沒有「傳統」定義變量名前的類型,但確實允許聲明應交錯。

int foo[]; 

其中foo的類型是之前和之後它宣佈,詞法。

除此之外,我猜這是一個沒有差異的區別。編譯器開發人員當然不會在意這種或那種方式。

+0

+1只是因爲這是關於C語法的非常獨特的觀察。讓我希望我在大學讀編譯原理或讀龍書... – 2011-05-22 08:44:16

62

凱文說得沒錯。主要觀察的是,「類型名稱」語法的偉大工程只要類型是短關鍵字,如INT浮動

int x = 1 
float d = 0.0 

對於一個價格,你得到兩條信息:「一個新的定義從這裏開始「,」這裏是定義的(結果)類型「。但是我們現在已經過去了簡單原始類型的領域。如果你寫

HashMap<Shape, Pair<String, String>> shapeInfo = makeInfo() 

你定義(名稱)的最重要的部分是埋在類型表達式後面。與

val shapeInfo: HashMap[Shape, (String, String)] = makeInfo() 

比較它說清楚

  • 我們在這裏定義的值,而不是一個變量或方法(VAL)
  • 的我們定義的東西的名字是shapeInfo
  • 如果你關心關於它,這裏是類型(HashMap [...])
+3

感謝您的信任投票:) – 2011-05-22 11:05:10

相關問題