Domanda

Quale ragionamento esiste dietro la distinzione tra maiuscole e minuscole in C#?

Sto valutando la possibilità di passare da VB.NET per sfruttare alcune funzionalità del linguaggio (CCR e rendimento) e comprendere il ragionamento alla base di questa differenza potrebbe rendere più semplice la transizione.

AGGIORNAMENTO] Beh, ho fatto il grande passo tre giorni fa.Imparare il C# non è stato particolarmente difficile, però riuscivo a malapena a ricordare i miei giorni in C++ alla fine degli anni '90.

La distinzione tra maiuscole e minuscole mi dà fastidio?non tanto quanto pensavo...inoltre sto scoprendo che in realtà è vantaggioso.In realtà sono davvero soddisfatto del CCR come modello di programmazione di coordinamento asincrono.Se solo avessi più tempo sul progetto attuale, trasferirei la base di codice in C# per trarne il massimo vantaggio.Non sarebbe giusto nei confronti del mio cliente, però.

Sto valutando il mio progetto attuale e vedo thread bloccati OVUNQUE!AHhhh!!!

[AGGIORNAMENTO]

Beh, sto programmando in C# da quasi un anno ormai.Mi piace davvero la lingua e odio davvero VERAMENTE passare a VB (specialmente quando è inevitabile!)

E la questione della distinzione tra maiuscole e minuscole?nemmeno un problema

È stato utile?

Soluzione

C # fa distinzione tra maiuscole e minuscole perché prende in considerazione i linguaggi di stile C che fanno distinzione tra maiuscole e minuscole. Questo è dalla memoria ecco un collegamento MSDN che non funziona per me giusto ora non riesco a verificare.

Vorrei anche sottolineare che questo è un caso d'uso molto valido:

public class Child
{
   private Person parent;
   public Person Parent
   {
      get { return parent;}
   }
}

Sì, puoi aggirare il problema utilizzando i prefissi sulle variabili dei membri, ma ad alcune persone non piace farlo.

Altri suggerimenti

Probabilmente stavano pensando " non vogliamo che le persone utilizzino SoMeVaRiAbLe in un posto e sOmEvArIaBlE in un altro.

Penso che il fatto che il caso possa trasmettere informazioni sia un'ottima ragione. Ad esempio, per convenzione, i nomi delle classi, i metodi pubblici e le proprietà iniziano con una lettera maiuscola per convenzione. E viceversa, i campi e le variabili locali iniziano con una lettera minuscola.

Dopo aver usato la lingua per anni, mi sono davvero divertito, il codice è molto più facile da leggere quando puoi leggere le informazioni semplicemente dalla cassa delle parole.

Ed è per questo che le persone lo fanno a volte, e può avere senso:

Foo foo = new Foo();

Lo faccio sempre, è molto utile. Se ci pensi in una situazione più utile come questa:

Image image = Image.LoadFrom(path);

A volte ha senso chiamare l'istanza come il nome della classe e l'unico modo per distinguerli è l'involucro. In C ++ la distinzione tra maiuscole e minuscole diventa ancora più utile, ma questa è un'altra storia. Posso approfondire se sei interessato.

Considera i nomi delle variabili nel seguente pseudocodice:

class Foo extends Object { ... }
...
foo = new Foo();

La distinzione tra maiuscole e minuscole consente convenzioni che usano case per separare nomi e istanze di classi; tali convenzioni non sono affatto rare nel mondo dello sviluppo.

C # eredita la distinzione tra maiuscole e minuscole da C e Java, che tenta di simulare per facilitare agli sviluppatori il passaggio a C #

Potrebbero esserci stati alcuni buoni motivi per rendere sensibile al maiuscolo / minuscolo C quando è stato creato tre decenni fa, ma non sembrano esserci dati sul perché. Jeff Atwood ha scritto un buon articolo sostenendo che la sensibilità al maiuscolo potrebbe non avere più senso .

Penso che avere identificatori con distinzione tra maiuscole e minuscole possa rendere il codice più leggibile, attraverso l'uso di convenzioni di denominazione, beh, e anche senza convenzioni di denominazione, la coerenza imposta da maiuscole e minuscole garantisce che la stessa entità sia sempre scritta allo stesso modo.

Probabilmente copiato da C, C ++, Java, ecc. o può essere mantenuto lo stesso apposta in modo che sia simile a quello di altri linguaggi.

Era solo una questione di gusti nel team di progettazione del linguaggio C#.Sono disposto a scommettere che fosse per comonalità con altri linguaggi della famiglia C.Tuttavia porta ad alcune cattive pratiche di programmazione come un campo privato e la sua proprietà associata che differiscono solo nel caso della prima lettera.

MODIFICARE:

Perché questo potrebbe essere considerato un male.

class SomeClass 
{
    private int someField;

    public int SomeField
    {
        get { return SomeField; } 
        // now we have recursion where its not wanted and its 
        // difficult for the eye to pick out and results in a
        // StackOverflowException.
    }
}

Prefissare i campi privati ​​con _ o m potrebbe renderli più facili da individuare.Non è un grosso problema e personalmente farò esattamente quello che ho appena detto è sbagliato (quindi fatemi causa!).

L'analisi è anche un po 'più semplice per i linguaggi sensibili al maiuscolo / minuscolo. Finché non ci sono buoni motivi per scegliere il modo senza distinzione tra maiuscole e minuscole, perché preoccuparsi?

Lo stai guardando in un modo molto limitato, dal tuo punto di vista. I progettisti linguistici devono tenere conto di tutta un'altra serie di considerazioni: ragioni culturali, compatibilità con altre lingue, pratiche di codifica comuni ecc.

Tutte le lingue moderne usano la distinzione tra maiuscole e minuscole: quali no?

Come qualcuno che ha usato BASIC per un certo numero di anni, mi sono molto stancato degli sviluppatori che usano casi diversi per la stessa variabile. Questo genere di cose è molto noioso da guardare e incoraggia la programmazione sciatta. Se non puoi essere disturbato per risolvere il caso, cos'altro non puoi preoccuparti di fare?

Da Guida per gli sviluppatori di .NET Framework Convenzioni di capitalizzazione , Case-Sensitivity:

  

Esistono le linee guida per la capitalizzazione   unicamente per facilitare gli identificatori   leggi e riconosci. L'involucro non può essere   usato come mezzo per evitare il nome   collisioni tra elementi della biblioteca.

     

Non dare per scontato che tutta la programmazione   le lingue fanno distinzione tra maiuscole e minuscole. Loro sono   non. I nomi non possono differire per caso   da solo.

La mia ipotesi migliore sul motivo per cui fa distinzione tra maiuscole e minuscole sarebbe perché Unix fa distinzione tra maiuscole e minuscole.Dennis Ritchie, il padre del C, fu anche co-autore di Unix, quindi è logico che il linguaggio da lui scritto coincidesse con l'ambiente disponibile a quel tempo.C# lo ha appena ereditato dal suo antenato.Penso che questa sia stata una buona decisione da parte di Microsoft, dato che i percorsi di Windows non fanno distinzione tra maiuscole e minuscole.

Suppongo che ti piacerebbe vedere un codice come:

SomeField=28;
someField++;
somefield++;
SOMEFIELD++;

compilato come se SomeField in qualsiasi variante di involucro fosse la stessa variabile.

Personalmente, penso che sia una cattiva idea. Incoraggia la pigrizia e / o la disattenzione. Perché preoccuparsi di incastrare correttamente la cosa quando non importa comunque? Bene, mentre ci siamo, forse il compilatore dovrebbe consentire errori di ortografia, come SoemField++?

Naming. I nomi sono difficili da trovare e non devi creare un nuovo nome quando parli di qualcosa di simile o devi usare una notazione per distinguerli.

Tali scenari sono proprietà di campi o argomenti nel costruttore che si sta per assegnare ai campi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top