2009-08-11 2 views
10

Questo potrebbe essere chiuso, ma ci proverò comunque.Parola migliore per inferire variabili diverse da var

Stavo mostrando un programmatore VB6 un po 'del mio codice C# l'altro giorno e ha notato la parola chiave var ed era tipo "Oh tipo di variante, non è una tipizzazione forte quando lo fai". e dovevo andare sul tipico discorso "var! = VARIANT" per spiegargli che non è una variante dedotta solo dal compilatore.

Stavo pensando ad altre parole che avrebbero potuto usare (team C#) in modo che questo genere di cose non accadesse. Personalmente, come inferire, qualcosa di simile:

infer person = new Person("Bob"); 

So che questo non è davvero così grande di affare, ma solo curioso di vedere quello che gli altri avrebbero usato per fare la stessa cosa.

Ho reso questo un wiki della comunità perché in realtà non ha una risposta.

+0

Grazie per quel Ben. –

+0

Nessun problema. –

+1

dedurre un nichel, dedurre un centesimo. –

risposta

7

C++ 0x utilizza la parola chiave "auto" per inferenza di tipo:

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

Questo non è un trade-off male per quei ragazzi dal momento che "auto" è stato (per quanto ne so) già di una parola chiave. Posso immaginare che in C#:

auto i = 3; 

mi piace "dedurre", anche se (ma poi non ho alcun problema con "var" o).

+4

"auto" era davvero una parola chiave, quindi era un candidato ideale per il riutilizzo, ma suona anche bene.E 'stato anche raccolto dal linguaggio D nello stesso contesto, quindi è un po' in crescita. –

+0

In particolare perché era una parola chiave completamente inutile. –

+0

Parola chiave terribile. Potresti anche averne un altro chiamato "matic". Allora avresti una coppia corrispondente come foo e bar. –

1

Penso che questa sia una grande idea. Io stesso ho dovuto spiegare la parola chiave var di tanto in tanto e in che modo è davvero solo un segnaposto per un tipo e che assicura ancora una digitazione forte.

inferno funziona per me! :)

0

Se la parola chiave è stata denominata variable anziché var, allora potremmo non vedere questo tipo di confusione. Questo potrebbe essere stato l'intento, ma qualcuno ha chiaramente pensato che digitare variable fosse troppo prolisso, portando all'ambiguità che abbiamo oggi.

2

Ma "inferire" è di 2 più caratteri di "var" ... Forse "var" non era la cosa migliore per mettere di fronte a un programmatore VB6 in un primo momento ...

+0

Stavo cercando di pensare a qualcosa di meglio di "inferire", ma "inf" non sembrava giusto ed era vicino a int, e "fer" ... semplicemente sbagliato. –

+0

Haha dovrebbe essere solo "v": v dog = new Dog(); sarebbe molto meglio! –

1

Che ne dici di pippo?

+0

sì, molto meglio di var;) –

+0

Penso che abbiamo anche bisogno di una parola chiave "bar". Forse per lanciare eccezioni puoi avere "foobar NotImplementedException()" –

1

D'altra parte, i programmatori Pascal/Delphi e ActionScript afferrano immediatamente il vero significato di var. Quindi, perché scegliere VB6? È sfortunato che abbia avuto Variant in esso, e quindi i ragazzi VB6 sostituiscono rapidamente lo var per quello, ma non importa da che parte si va, qualcuno da qualche parte sarà confuso.

Dato che VB6 è legacy da un po 'di tempo ormai, che var è perfettamente chiaro a qualcuno senza il peso dell'esperienza passata (voglio dire, quante persone nuove alla programmazione penserebbero allo var che significa qualcosa di diverso da "variabile" ?), e che var è stato specificamente utilizzato per indicare "variabile" da molti altri linguaggi popolari, non sembra una cattiva scelta.

Il problema evidente che vedo con la parola chiave infer è che non è ovvio che deduca il tipo di variabile. Basta guardarlo, potrebbe anche essere dedurre il suo valore o qualcosa del genere (specialmente se RHS non è uno new -statement).

3

Che ne dici di rianimare la parola chiave BASICLET?

let answer = 42; 
+0

I ragazzi VB6 saranno ancora confusi allora; la parola chiave Let (su una proprietà) viene utilizzata solo per i tipi di dati semplici, mentre Set viene utilizzata solo per gli oggetti. – Gavin

1

mi piace var, e pensano che il significato nel contesto di un linguaggio fortemente tipizzato è chiaro. dynamic, d'altra parte, è lo "oddball" nel codice C#, quindi la denominazione semantica più lunga è appropriata.

4
thisappearsweaklytypedbutisactuallystronglytyped i = 3; 

È l'unico modo per evitare confusione! Non preoccuparti, completamento automatico significa che non ci vorrà molto più tempo per digitare ...

1

C# dovrebbe essere tutto simbolico, come C++, non tutte le parole chiave, come VB. Come su "?"

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

Che tipo è Z? Chissà?

+0

Una stringa? Comunque, '?' è preso per l'operatore condizionale. – Blorgbeard

+0

Adoro quel C++ "simbolico" ogni volta che digito 'reinterpret_cast' o' static_assert' ... –

+0

questo potrebbe essere confuso con un tipo nullable a volte (non riesco a pensare a nessun'altra parte), ma mi piace nel complesso. – RCIX

1

Penso che C# sarebbe meglio senza alcuna parola chiave di "inferenza di tipo statico". Quindi sarebbe lavorare in questo modo:

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

Mi chiedevo perché C# progettisti sentivano parole chiave come "var" è stato necessario per inferenza di tipo statico. È stato necessario rispettare le regole grammaticali fondamentali di C#? Era perché avevano già pensato a "dinamico" e volevano rendere più chiara la distinzione tra inferenza di tipo statico e dinamico?

In ogni caso, dopo un'esposizione prolungata a Python, "var" (o qualsiasi parola chiave o qualificatore alternativa) si sente completamente superfluo. Prendi il seguente codice:

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

Quali ulteriori informazioni aggiungere "var" di fronte a "item" danno al lettore?

+0

"var" dice al lettore che il programmatore non ha fatto solo un errore stupido e ha omesso il tipo. Scommetto che è molto più semplice anche per il parser. Solo un'ipotesi, ma scommetto che iniziare con una parola chiave aiuta il parser a capire come funziona. –

+0

@John Saunders: O fai un errore ancora più stupido e scrivi la variabile in modo errato. – supercat

+0

Non so cosa intendi. Non ti permette di sbagliare l'ortografia della variabile. Se lo scrivi erroneamente alla dichiarazione, dovrai continuare a sbagliare l'ortografia ogni volta che la usi. –

0

Non completamente sull'argomento, ma VB.NET lo fa quasi troppo bene. Scommetto che è ancora più confuso per gli ex utenti VB6.

È quello che utilizza l'associazione tardiva o l'inferenza del tipo? Meglio controllare le proprietà del progetto.

+0

Mi riferisco a "Dim P = New Person()" per il caso in cui il valore iniziale è un'espressione di costruzione. – supercat