2009-08-11 65 views
10

這可能會關閉,但我會嘗試。用於推斷變量以外的變量的更好的詞

我在前一天展示了一個VB6程序員的一些C#代碼,他注意到了var關鍵字,就像「哦,變體類型,當你這樣做的時候打字不是很強。我不得不繼續進行典型的「var!= VARIANT」演講,向他解釋這不是它只是編譯器推斷的變體。

我在考慮他們(C#團隊)可能使用的其他詞語,所以這種事情沒有發生。我個人比較喜歡推斷,是這樣的:

infer person = new Person("Bob"); 

我知道這是不是真的那麼大不了的,但只是好奇,想看看其他人會用做同樣的事情。

我已經使這個社區維基,因爲它沒有真正的答案。

+0

謝謝你的本。 – 2009-08-11 23:31:44

+0

完全沒問題。 – 2009-08-11 23:33:13

+1

推斷鎳,推斷一毛錢。 – 2009-08-11 23:41:31

回答

7

的C++ 0x使用「自動」關鍵字的類型推斷:

http://en.wikipedia.org/wiki/C%2B%2B0x#Type_inference

這不是一個壞的權衡那些傢伙因爲「汽車」是(據我所知)已經是一個關鍵詞。我可以想象它在C#:

auto i = 3; 

雖然我喜歡「推斷」(但我沒有任何問題「var」)。

+4

'auto'確實是一個關鍵字,因此它是重用的主要候選對象,但它也聽起來是對的。在同樣的背景下,它也被D語言拾取,所以它有點增長。 – 2009-08-11 23:51:08

+0

特別是因爲它是一個完全無用的關鍵字。 – 2009-08-12 17:44:10

+0

可怕的關鍵字。你可能會有另一個叫做「matic」的。那麼你會有一個像foo和bar一樣的匹配對。 – 2009-08-12 18:03:46

1

我認爲這是一個好主意。我自己必須不時地解釋var關鍵字,以及它如何真的只是一個類型的佔位符,並且它仍然確保了強大的輸入。

推斷對我的作品! :)

0

如果該關鍵字被命名爲variable而不是var,那麼我們可能不會看到這種混淆。這可能是意圖,但有人明確認爲打字variable過於冗長,導致我們今天的含糊不清。

2

但「推斷」是2個字符不是「VAR」 ......也許「無功」不是放在一個VB6程序員面前的第一個最好的事情...

+0

我試圖想到更好的東西,然後「推斷」,但「inf」感覺不對,並且接近int,而「fer」......只是錯誤的。 – 2009-08-11 23:36:50

+0

哈哈它應該只是「v」:v狗=新狗();會好得多! – 2009-08-11 23:36:56

1

foo

+0

是啊,比var好多了:) – 2009-08-11 23:37:34

+0

我想我們還需要一個「bar」關鍵字。也許對於拋出異常,你可以使用「foobar NotImplementedException()」 – 2009-08-11 23:40:34

1

另一方面,Pascal/Delphi和ActionScript程序員立即掌握了var的真正含義。那麼爲什麼選擇VB6?不幸的是它裏面有Variant,所以VB6傢伙很快就用var代替了,不過無論你走哪條路,某個地方的人都會感到困惑。

鑑於VB6是傳統的相當長的一段時間,現在反正是var是非常清楚的人沒有過去的經驗(我的意思是,有多少人新的節目會想到var意義的東西,從「變量」不同的負擔?),並且var已被專門用於表示其他幾種流行語言的「變量」,但它似乎並不是一個不錯的選擇。

我看到infer關鍵字出現的一個明顯問題是,它不明顯推斷出變量的類型。只是看它,它可能是推斷它的價值或東西(特別是如果RHS不是new -statement)。

3

如何恢復你的生活BASIC關鍵字LET

let answer = 42; 
+0

VB6的傢伙仍然會感到困惑; Let關鍵字(屬性上)僅用於簡單數據類型,而Set僅用於對象。 – Gavin 2009-08-12 00:25:36

1

我喜歡var,並認爲在強類型語言的上下文中的含義是明確的。另一方面,dynamic是C#代碼中的「古怪」,所以較長的語義命名是合適的。

4
thisappearsweaklytypedbutisactuallystronglytyped i = 3; 

這是避免混淆的唯一方法!不要擔心,自動完成意味着它不會真的需要更長的時間才能輸入...

1

C#應該像C++一樣符號化,而不是所有keywordy,就像VB一樣。如何 「

? X = 5; 
? Y = X.ToString(); 
? Z = Y + Y; 

什麼類型爲Z?誰知道?

+0

一個字符串?無論如何,'?'是針對條件運算符的。 – Blorgbeard 2009-08-12 00:55:27

+0

我只是喜歡那種「象徵性」的C++感覺,每次我輸入'reinterpret_cast'或'static_assert' ... – 2009-08-12 02:03:15

+0

這有可能與有時可以與空類型混淆(不能想到任何副手),但我喜歡整體。 – RCIX 2009-08-12 02:29:45

1

我認爲C#會更好,沒有任何「靜態類型推斷」關鍵字。所以它會這樣工作:

myDict = new Dictionary<string, MyClass>(); 

我想知道爲什麼C#設計者覺得像「var」這樣的關鍵字是靜態類型推理所需要的。是否有必要遵守C#的基本語法規則?是因爲他們已經考慮過「動態」,並且希望在靜態和動態類型推斷之間做出更清晰的區分?在任何情況下,在長時間暴露於Python之後,「var」(或任何其他關鍵字或限定符)感覺完全是多餘的。看看下面的代碼:

foreach (item in myList) { 
    // Do stuff 
} 

什麼其他信息將在「項目」的前面加上「VAR」給讀者?

+0

「var」告訴讀者,程序員不只是犯了一個愚蠢的錯誤,而忽略了這個類型。我敢打賭,解析器也很容易。只有一個猜測,但我打賭開始與關鍵字有助於解析器得到它的方向。 – 2009-08-12 02:21:53

+0

@John Saunders:或者犯一個偶數的錯誤,拼錯這個變量。 – supercat 2011-09-01 03:44:40

+0

我不知道你的意思。它不允許你拼錯變量。如果您在聲明中拼錯,則只要您使用它,就必須繼續拼錯。 – 2011-09-01 16:11:08

0

不完全在主題上,但VB.NET做這個幾乎乾淨。我敢打賭,這對於VB6用戶來說更令人困惑。

Dim p = New Person() 

是使用後期綁定還是類型推斷?更好地檢查你的項目屬性。

+0

對於初始值爲構造函數表達式的情況,我引用「Dim P = New Person()」。 – supercat 2011-09-01 03:43:55