2009-06-21 18 views
19

Come la mia istruzione formale in programmazione pre-date C, ho imparato C da K & R e altri testi.Best practice per la pronuncia del codice C

Esistono utili convenzioni per la vocalizzazione del codice C durante la lettura e la scrittura?

Per esempio, in

d = emalloc(sizeof(*d)); 
d->d_name = estrdup(name); 

è '=' meglio letta come 'è impostato su' o 'uguale' o qualcos'altro?

Sarebbe '==' quindi essere letto come 'uguale a' o 'è' o 'ha lo stesso valore di'?

Analogamente con "* d", "d-> d_name", e quindi "& d", "&", "& &", e così via.

So cosa significano tutti e cosa fanno, la domanda si riferisce a quello che dici (ad alta voce o internamente) quando leggi il simbolo, soprattutto se pensi che questo aiuti a capire e minimizzare la confusione.

+6

"Come la mia educazione formale in programmazione pre-date C" ... Impressionante. –

+2

+1 per la stravagante ma interessante domanda – SingleNegationElimination

+1

dovrebbe essere wiki della comunità. – SilentGhost

risposta

3

Non ci avevo mai pensato prima, ma ora mi rendo conto che non leggo in modo intermittente le dichiarazioni di linguaggio di programmazione come quelle precedenti come parole inglesi. Li guardo e so cosa fanno.

E, cosa interessante, funziona anche quando non so veramente cosa funzioni una funzione. Ad esempio, non ho mai incontrato prima emalloc(), ma il mio cervello mi dice ancora cosa fa (probabilmente) la dichiarazione.

Se per qualche motivo (la guerra la sicurezza nazionale??) Avevo tb leggere qualcosa di simile:

d->d_name = estrdup(name); 

al telefono, direi:

cosa" puntato da D's d_name membro viene assegnato il risultato di chiamare estrdup con il nome come parametro "

Ma questo è enfaticamente non quello che mi passa per la testa quando leggo il codice.

+0

Vicino a quello che ho imparato a fare: bello averlo confermato come approccio usato da altri. – mas

1

Io non sono un madrelingua inglese e nemmeno ho letto il codice, ma ecco come lo farei:

= -> uguale
== -> è pari a
& - > bit a bit e
& & -> e
& d -> indirizzo del

avrei letto * d, d-> d_name, d.d_name come "d"/"d d_name", come dovrebbe essere chiaro dal contesto.

9

pronuncio questo come:

d = emalloc(sizeof(*d)); 

dee dimensione pari ee malloc di dee stelle

d->d_name = estrdup(name); 

dee freccia dee sottolineano nome uguale ee scalpore nome babbeo"

Ma non chiamerei nessuna di queste migliori pratiche. Non pronuncio la parentesi eccetto quando sarebbe ambiguo, come per la precedenza degli operatori. Pronuncio quasi ogni altra punteggiatura. Io in realtà letto == come "uguale uguale"

+0

+1 Per la lettura di '==' come "uguale uguale". Lo faccio anche io ... :) – Miguel

4

Io non sono un nativo inglese, ma questi sono i termini che vedo in uso la più:

'=' - assign to 
'==' - equals 
d->d_name member of a struct 
&d - address of d 
& - bitwise and 
&& - logical and (or just "and" for short) 
*d - dereference d, or in case of *d = x "assign x to what is being pointed by d" 

Per quanto riguarda il tuo esempio:

d = malloc(sizeof(*a)); 

Assegna (malloc) una quantità di memoria uguale alla dimensione di ciò che è indicato da ae assegna il risultato a d.

d->d_name = estrdup(name); 

Assegnare alla d_name membro d il valore restituito dalla chiamata a estrdup con il nome come parametro.

1

Hmm, non ci avevo mai pensato prima.

Per parole e identificatori, li pronuncio solo come sono stati scritti.

Per i simboli, non penso ci sia una regola dura e veloce. Se l'operatore pronunciato come è scritto ha senso, allora lo faccio. Ad esempio, == vorrei pronunciare come uguale a uguale. Non c'è ambiguità lì e per la maggior parte dei programmatori scorre.

Operatori come - > anche se vorrei solo dire accesso ai membri. Dire "trattino più grande di" è corretto, ma immagino che otterrò alcuni sguardi divertenti.

10

ASCII Pronunciation Rules for Programmers ha una vasta lista di, beh, le regole di pronuncia ASCII ... non tanto il modo migliore per pronunciare un puntatore, necessariamente, ma almeno come verbalizzare i simboli.

+1

+1 Mi piacciono le regole, potrebbero tornare utili un giorno. Ad essere onesti non ho mai usato la pronuncia di alcun codice (pythoh, C, C++, ...). Quello che sto facendo di solito è solo descrivere il codice in parole come: allocare 'dee', impostare il nome membro in dee ... – SashaN

1
d = emalloc(sizeof(*d)); 

dee uguale ee malloc sizeof stelle dee

d->d_name = estrdup(name); 

dee ref name dee uguale ee mescolare nome DUP

if (d -> d_name == NULL) 

se dee nome dee ref è nullo

o

if d ee ref dee nome è uguale a null

2

Normalmente uso la parola/gruppo di parole che sono già utilizzati per gli elementi di sintassi C se devo pronunciare/leggere ad alta voce C Code-

esempio

* d = valore di indirizzo di memoria in d

d-> d_name = valore di indirizzo di memoria indicò alcuni offset indirizzo base in d (questo valore può essere un valore integrale o un altro valore di indirizzo!)

& d = indirizzo di memoria del valore d

x = y = valore di x aggiornate e modificate con il valore di y.

x == y = confrontano valore di x con il valore di y

quando stavo facendo questo ho scoperto che '' pronunciando seguente costrutti del linguaggio C sarebbe difficile/interessante:

union 
{ 
    int a; 
float b; 
} 

funzione puntatori,

typecasts,

-ad.

+0

Nel caso che qualcuno stia contando, per i tuoi tre casi complicati direi "union open-brace int a semi-colon float b semi-colon close-brace ma senza punto e virgola "; "function taking e return "; e "un uguale b cast to int" rispettivamente. –

1

Di solito pronuncio sia "=" che "==" come "uguale".

C'è poca ambiguità, dal momento che uso molto raramente "=" in un contesto in cui viene utilizzato il risultato, o "==" in un contesto in cui il suo risultato non viene utilizzato. Se il primo è uscito, forse nel codice che stavo leggendo che non ho scritto, potrei dire "se un singolo-uguale b", o "per i è uguale a j semi-colon i singoli-equivale j semi-colon più- più j. Spero che non sia un bug ".

In ogni caso, è abbastanza raro per me parlare a voce alta in un contesto in cui l'ambiguità è davvero importante. Quindi, come dico normalmente, è diverso da quello che farei in una situazione in cui avevo bisogno di essere veramente pedante nel trasmettere il testo in modo accurato.

Se dettavo molto codice (ad esempio la programmazione di coppie), di solito mi aspetto di leggerlo mentre è stato digitato, quindi è possibile individuare eventuali errori. Se la mia ambiguità spesso confondesse la dattilografia e il tempo perduto, allora mi aspetterei di concordare una convenzione sul posto. Molto più facile che formare un consenso tra tutti i programmatori C/C++/Java/C# nel mondo, mai.

2

IMO, ecco il modo migliore per leggere i seguenti (per quanto concerne PHP):

= "è (ora) impostato su"

== "è (ora) pari a"

=== "è (ora) identica a"

  • Chiamare = "è impostato su" aiuta a evitare di utilizzarlo in modo errato.
  • La parola "ora" è facoltativa ma ricorda ai novizi di programmazione (come me) la natura dinamica dei valori.
3

(Parlando lentamente e chiaramente.) Vado a leggere un testo per te, un personaggio alla volta. Lo leggerò lentamente e chiaramente, facendo una pausa leggermente dopo ogni personaggio. Ti chiederò di rileggerlo quando avrò finito, quindi ascolta attentamente, ma continua ad andare avanti se commetti un errore. Tutte le lettere sono minuscole e contengono punteggiatura ovunque. Siete pronti? (Attendere conferma.)

(Regola la velocità tra lento ed estremamente lento in base alla retroazione audio). d spazio equivale spazio emalloc parentesi sinistra dimensionedi parentesi sinistra asterisco d parentesi destra parentesi destra semitono nuovo- line d dash maggiore di d underscore nome spazio equivale spazio estddup left-parentesi nome parentesi destra punto e virgola

Ok, per favore rileggimi lentamente e un personaggio alla volta. (Confermare di aver ricevuto correttamente la trasmissione.Ripresentare se necessario.)

+0

Mi hai ipnotizzato lì a metà ...;) – sjngm