un programmatore, molte lingue - il nome dilemma


14

Quando lavori attraverso più linguaggi di programmazione, c'è un problema che riscontri ...

Un nome (identificatore) valido in una lingua non è valido in un'altra. Per esempio...

var new function thissono parole chiave in JavaScript, ma puoi usarle liberamente in Python. Allo stesso modo list dict defpuò essere utilizzato in JavaScript senza problemi.

Questo è molto comune e qualcosa che i programmatori generalmente conoscono rapidamente quando programmano in più lingue.

Tuttavia, quando lavori in collaborazione, devi definire alcune regole / linee guida per i membri del tuo team per garantire coerenza e uniformità nel codice. Con i team, questo problema diventa più importante del semplice ricordare cosa è valido e cosa non lo è mentre si programma.

Quindi, la mia domanda è: quali strategie adotti ...

  • prendi semplicemente l'unione di tutte le parole riservate presenti in tutte le lingue che usi, distribuisci un elenco a tutti e astieniti dal loro uso?
  • accetta la diversità e fai ulteriori problemi quando "cambia contesto"
  • adottare un terreno intermedio in cui una lingua può usare l'altra, ma non viceversa

(Nota: sto solo parlando di Python e JavaScript in questa domanda ... ma per favore rispondi alla domanda in modo più ampio)

-- AGGIORNARE --

Grazie per tutte le risposte Quindi il consenso generale che vedo emergere è quello di consentire ai programmatori di usare qualsiasi nome indipendentemente da ciò che fanno altre lingue - fintanto che i nomi sono descrittivi, non fa male.


1
O semplicemente richiedi che ogni nome di variabile inizi con a $. Funziona con PHP, JavaScript e alcuni compilatori C / C ++ . In tutta serietà, questa è una cosa che PHP ha capito bene.
Joey Adams,

Risposte:


46

Avendo programmato in parecchie lingue negli oltre 30 anni della mia esperienza, direi che cercare di trovare standard di denominazione che funzionino in qualsiasi lingua è probabilmente un'idea a torta nel cielo.

All'inizio della mia esperienza, ho provato a usare le macro #define in C per creare cose che avrebbero fatto apparire il mio codice C come il codice Pascal che stavo usando prima. Ero così abituato a programmare in Pascal che pensavo che se avessi potuto far funzionare C come Pascal mi avrebbe reso più produttivo. Presto ho scoperto che mi sbagliavo.

Ciò che mi ha reso più produttivo è stato imparare la C e non cercare di sfruttare la sintassi di Pascal in un'altra lingua solo perché mi rendeva più a mio agio.

Penso che vincerai potenzialmente i tuoi programmatori impedendo loro di fare qualcosa in una lingua, solo perché è sbagliato farlo in un'altra lingua che stai utilizzando.

Se limiti le convenzioni di denominazione a cose che hanno senso spiegare l'uso variabile, probabilmente creerai un buon codice, in qualunque lingua.


3
I nomi che hanno senso sono tutti i motivi di cui hai bisogno.
JeffO

24

Non dovresti nominare le cose "list", "new", "var", "this" in primo luogo, poiché non sono abbastanza descrittive in nessuna lingua.


2
Idem "funzione". Se non è una parola chiave, non è pensata per esserlo.
MPelletier,

11

Il passaggio da, diciamo, javascript a python è già un cambio di contesto. Non penso che sia negativo se i nomi delle variabili cambiano, soprattutto se le modifiche al nome sono idiomatiche con la lingua. Si potrebbe anche sostenere che i cambi di contesto più difficili possono aiutare in questo caso in quanto aiutano a rafforzare "amico, stai scrivendo javascript non python ora".


7

Penso che se stai usando la denominazione variabile descrittiva, il problema che descrivi dovrebbe essere minimo. Detto questo, se è minimo, anche accettare lo spostamento del contesto causato dalla denominazione variabile tra le lingue diventa minimo.


5

Le parole più riservate (in qualsiasi lingua) sono piuttosto generali. Preferisco nomi di variabili / funzioni più descrittivi e ciò significa che non ho quasi mai riscontrato questo problema. Devo ammettere di essere stato infettato da Charles Simonyi con il suo schema di denominazione originale - questo era in Xerox alla fine degli anni '70, prima ancora che fosse chiamato Notazione ungherese - e ciò tende anche a significare che i nomi sono qualcosa di tutt'altro che sano di mente userebbe mai come parole riservate.


5

Non dovresti perdere tempo a scrivere le linee guida finché non scopri che questo è un problema reale , non ipotetico.

Una situazione a cui riesco a pensare dove questo può diventare un problema è quando condividi strutture di dati tra linguaggi di programmazione. Ad esempio, se si dispone di un oggetto Javascript sul lato client che si riflette in un oggetto Python sul lato server e si desidera naturalmente che abbiano gli stessi nomi per i loro membri. In tal caso la regola è semplice: non usare nomi che sono parole riservate in nessuna delle lingue. Questo è tutto. Scrivilo nelle linee guida se vuoi. Passa ora a compiti più importanti.

A proposito, né list né dict è una parola riservata in Python. Possono essere usati come nomi di variabili, anche se piuttosto scadenti.


3

Nella mia esperienza, la soluzione per questo è avere ampie convenzioni di denominazione che si applicano a tutte le lingue. Che si tratti di JavaScript, C # o di qualche altro linguaggio funky, il modo in cui vengono denominate variabili e classi può diventare uno standard all'interno di una base di codice ed è così che generalmente vedrei risolvere questo problema. Le convenzioni possono essere concordate per consenso di tutti, semplicemente una maggioranza vuole una linea guida, la direzione dice: "È così che facciamo", o poche altre possibilità che immagino.

Raramente vedo il problema identificativo che descrivi perché la maggior parte delle volte il mio nome di classe o variabile è abbastanza descrittivo da non essere in conflitto così facilmente. Allo stesso tempo, se uno sta lavorando con gli altri piuttosto che avere chiarezza su come la squadra vuole gestire questo è il punto importante.


2

Non riesco a vedere come questo possa mai essere un problema, a meno che tu non abbia intenzione di spostare il codice da una lingua all'altra. Se tendi personalmente a dimenticare quali nomi di variabili sono validi, non utilizzare un nome di variabile a meno che tu non sia personalmente sicuro che sia valido. Ma se altre persone usano nomi di variabili non validi, il loro codice non verrà compilato o eseguito. Quindi, se stai lavorando sul codice di qualcun altro e hanno chiamato qualcosa 'var', puoi essere abbastanza sicuro che sia un nome valido in qualunque lingua stiano usando.

Se si prevede di spostare il codice da una lingua all'altra, potrebbe essere necessario un elenco di nomi vietati. Ad esempio, il mio documento sulle pratiche di codifica C proibisce l'utilizzo di new o class come variabile perché ciò rende il codice più difficile da trasferire su C ++. In tal caso, è ragionevole stabilire regole che facilitino quel lavoro, qualora fosse necessario,


-2

Basta attenersi a CamelCase con lettere minuscole. Funziona ovunque. Questo si chiama cercare il minimo comune denominatore tra sistemi incompatibili e ti troverai spesso a farlo!


5
Tranne che in alcune lingue, il caso della prima lettera è significativo in termini di sintassi.
Karl Bielefeldt,

1
... e viola il quasi-standard culturale stabilito in molte lingue.
martedì 18

La notazione ungherese è molto più offuscante del CamelCase ... ;-)
Zeke Hansell,

@Karl: ovviamente il suggerimento è limitato ai confini della lingua. Sapevi che Java può iniziare nomi di variabili con un simbolo di dollaro? Ho visto codice Java che assomiglia a PHP, era ovvio dove il programmatore precedente avesse imparato a programmare!
dotancohen,

@dotancohen: Ricordo di aver visto un programma di Pascal in una rivista di hobby molti anni fa, quando Pascal stava solo facendo scena. Era palesemente ovvio dalla struttura del codice (e dal fatto che usavano variabili globali per passare valori a subroutine e funzioni) che il programma era uno dei migliori programmi di base che io abbia mai visto scritto Pascal. ;-)
Zeke Hansell,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.