Una lingua che non consente i commenti produrrebbe un codice più leggibile? [chiuso]


15

Solo per curiosità, ho iniziato a chiedermi se un linguaggio che non consente i commenti avrebbe prodotto un codice più leggibile in quanto si sarebbe costretti a scrivere un codice di auto-commento.

Inoltre, potresti scrivere codice errato come prima perché non ti interessa. Ma qual è la tua opinione?


44
Pensi che ci sia una differenza tra un linguaggio che non consente i commenti e gli sviluppatori che non li usano?
Jeremy Heiler,

21
L'idea che non consentire i commenti costringerebbe gli sviluppatori a scrivere più codice autocompattante è assurda.
Adam Crossland,

2
@Jeff che è una funzione IDE / editor non una funzione langugae IMHO
jk.

4
non sono sicuro che sia possibile forzare gli sviluppatori a fare qualsiasi cosa
jk.

2
@Adam @ jk01: hanno persino un linguaggio che costringe gli sviluppatori a indentare il codice in un modo specifico ;-)
Joris Meys,

Risposte:


61

Penso che i programmatori troverebbero un altro modo per aggiungere commenti ...

string aComment = "This is a kludge.";

7
Mi piace come questo "commento" abbia più livelli
Logan Capaldo,

29
Un ulteriore vantaggio è che andrà nel binario, quindi puoi vedere anche i commenti lì! Semplifica notevolmente il reverse engineering.

1
Hai ragione. Dovremmo usare invece le istruzioni #ifdef.
James,

9
Questo è probabilmente il miglior esempio di "programmazione in una lingua" anziché "programmazione in una lingua" che io abbia mai visto. =)
gablin

2
In MOO c'è il supporto per i commenti, ma tutti i programmi vengono analizzati per l'archiviazione e non analizzati per la visualizzazione, quindi i commenti vengono persi. L'idioma per commenti persistenti è letterali di stringa ala"this is a comment";
Ben Jackson,

44

Non penso sia così semplice:

anche in un codice ben scritto e autocomponente, ci sono situazioni legittime in cui dovresti scrivere commenti.


13
+1 per i commenti è più di una semplice narrazione di ciò che il codice sta facendo. Anche il miglior "codice auto-documentante" deve avere commenti per l'elaborazione di molte cose. Spesso, il codice avrà dipendenze esterne, ipotesi di input, avvertenze, aree migliorabili, vulnerabilità note e innumerevoli altre cose che non sarebbero mai altrimenti riconosciute. I commenti hanno molti usi.
Adam Crossland,

3
Esattamente. Come si registra "intento" o "perché" o "prova di correttezza" senza commenti?
S.Lott

2
D'accordo, i commenti dovrebbero essere "Perché" e non "Cosa". Chiunque non riesca a ottenere il What dal codice non dovrebbe leggerlo.
Matteo Leggi l'

3
@Matthew: Per essere onesti, puoi facilmente scrivere codice che non è facilmente decifrabile. Sì, il codice leggibile è la migliore fonte di "cosa".

14

Supponendo che tu sia un programmatore perfetto (cosa che non sei, ma supponiamo solo) ...

Ci sono molti effetti non visibili che possono accadere nel codice quando si interfaccia con cose che non sono state scritte. Ad esempio, ci possono essere difetti di progettazione nella libreria di qualcun altro o (se sei uno sviluppatore del kernel) nell'hardware di qualcun altro. Avere commenti per spiegare perché hai usato kludge particolare in un determinato posto può essere essenziale per comprendere il codice e assicurarti che kludge non venga rimosso (rompendo le cose).


11

È difficile per me avvolgere la mia mente sull'idea che la rimozione di opzioni da una lingua renderebbe in qualche modo migliori i programmi scritti in tale lingua. I commenti non sono obbligatori e anche scrivere codice auto-documentante non lo è.

Non vi è alcun sostituto per le buone pratiche di sviluppo.


6

In teoria, COBOL è stato originariamente progettato in modo tale da significare che si autodocumentava in modo sufficiente che anche i non sviluppatori (ovvero i supervisori) potevano rivedere il codice scritto e determinare cosa stava succedendo. Tuttavia, in pratica, man mano che un programma diventa più complesso, è difficile comprendere tutto ciò che sta accadendo esclusivamente attraverso il codice.

Durante la rimozione commenti potrebbe costringere alcuni sviluppatori a scrivere codice che è meglio a documentazione di sé, ci sono ancora gli sviluppatori là fuori che scrivere codice scarsamente documentata (ad esempio i nomi delle variabili di a, b, c, ecc) ed è quelle abitudini che le persone hanno bisogno di essere formati fuori di Di. In questi casi, la rimozione dei commenti non influirebbe su quegli sviluppatori e potrebbe ostacolare gli sforzi di altri sviluppatori per spiegare pezzi di codice complessi.


1
Sto leggendo un po 'di codice ora con questo: argument = 3.0; aa = sqrt( argument ); bb = f( aa ); Sigh.
S.Lott

Cobol è una lingua speciale. Ma il "." L'operatore è malvagio !!! In qualche modo interrompe la sintassi di una frase.
Loïc Faure-Lacroix il

3

Ogni programma viene scritto per implementare requisiti funzionali che sono al di fuori del programma, sia scritti o semplicemente nella testa di qualcuno.

Penso che la funzione più essenziale dei commenti sia quella di stabilire una mappatura tra i requisiti e il codice. Il motivo per cui è necessaria la mappatura è consentire modifiche incrementali. Quando si verifica una modifica ai requisiti, è necessario apportare le modifiche corrispondenti al codice, se il codice deve rimanere una soluzione ai requisiti. I commenti servono come tabella di marcia per le modifiche.

Se il linguaggio è un linguaggio specifico specifico di dominio (DSL) perfettamente adattato al problema da risolvere, la mappatura dovrebbe essere un semplice isomorfismo e i commenti non sarebbero necessari. Il codice sorgente avrebbe semplicemente indicato il problema e nient'altro avrebbe dovuto essere detto. La soluzione del problema sarebbe sepolta nell'attuazione della lingua.

Poiché le lingue in cui lavoriamo non sono tali DSL e rimarranno tali per qualche tempo, abbiamo ancora bisogno di commenti . È una questione di laurea. A volte il problema è una buona corrispondenza con la lingua attuale, ma di solito no.

Guarda anche...


2

Lavoro da qualche parte che non consente commenti in linea (cioè puoi avere solo commenti nella parte superiore delle funzioni). No, non semplifica la lettura del codice. Lo rende peggio di ordini di grandezza.


Supponendo che non vi siano limiti al numero di metodi, perché non limitate a trasformare i vostri blocchi di codice in metodi applicabili e quindi a dare ai metodi nomi descrittivi (o più commenti, nel vostro caso)? Nella maggior parte del codice "buono" che ho visto, i metodi sono raramente più lunghi di circa 10 righe ed è abbastanza ovvio ciò che fa.
Scott Whitlock,

@Scott - Sono fermamente a favore del fatto che il codice dovrebbe essere auto-documentato e che i commenti in linea devono essere evitati, ma vietarli esplicitamente è eccessivo.
Jason Baker,

@Jason - Sono d'accordo con te, ma non sono d'accordo con l'idea che senza commenti incorporati si tratti di "ordini di grandezza peggiori".
Scott Whitlock,

@Scott: ricevi molti commenti come "il motivo per cui facciamo lo strano controllo nullo sulla riga 37 è ..." e poi devi guardare i tuoi occhi tra il codice e i commenti. Sarebbe molto più semplice avere quel commento sopra la linea 37.
Xodarap,

2

Evito di commentare il codice e funziona.

Evito tutti i commenti in-code (inline o stream) a favore di docblock + variabili significative + programmazione spartana , e funziona.

E sì, so che i blocchi di documenti sono tecnicamente commenti, tuttavia sono in realtà complementari al codice, non invadenti e "standardizzati" ... tutto ciò che un commento comune non lo è.

Quello che penso potrebbe funzionare come sostituto dei commenti: un linguaggio / sintassi / linguaggio standardizzato per i docblock, qualcosa come le annotazioni in java.


"un linguaggio / sintassi / idioma standardizzato per il blocco dei documenti": non doxygenfunzionerebbe per questo? en.wikipedia.org/wiki/Doxygen
sleske

Doxygen è uno strumento di documentazione, lo stesso di phpdocumentor e della cosa che genera la documentazione Java da javadoc (homonim?). Ciò che intendo è che il linguaggio / sintassi / idiomi faceva parte del linguaggio di programmazione stesso e non un commento che deve essere analizzato per tag / proprietà.
dukeofgaming

4
Quindi, eviti i commenti chiamandoli qualcos'altro.
Nate CK,

2

Non solo non influirebbe sulla qualità, come altri hanno osservato, sarebbe davvero fastidioso.

Sono sicuro che molti di noi hanno fatto qualcosa del genere di volta in volta:

foreach ( myObject obj in SomeList )
 {
    Debug.Writeline( obj.Name );
//  for some reason this isn't working
//  obj.SetArielPotency( setting );
//  obj.DoSomeProcess();       
 }

Quanto sarebbe irritante se non potessi commentare alcune righe di codice per capire da dove proviene quel bug?

Indipendentemente dai commenti su come funziona il codice, semplici cose pratiche come quella o far cadere una TODOnota conveniente sono cose che rendono più facile risolvere problemi minori e ricordare cosa stavamo facendo quando abbiamo iniziato a scrivere il codice.


1

I commenti sono come un sommario del libro. Certo, puoi capire tutto leggendo il codice, ma perché mai vuoi leggere un'intera pagina quando potrebbe essere riassunta in una riga commentata?


3
Se riesci a sintetizzarlo in una riga, puoi nominare una funzione o un metodo abbastanza descrittivamente per spiegare cosa fa.
Scott Whitlock,

1

Mentre sono d'accordo con le altre risposte che anche il codice di auto-documentazione necessita di commenti, ciò è rilevante solo per le lingue attuali .

Penso che la vera domanda sia: "È possibile progettare un nuovo linguaggio di programmazione che non ha bisogno di commenti?" Dovrebbe essere piuttosto alto livello con una grande quantità di astrazione. Ogni affermazione e funzione sarebbero costrette ad essere leggibili tramite la sintassi del linguaggio.


1
La programmazione alfabetica offre un linguaggio che non ha bisogno di commenti. Scrivi il tuo documento, che include tutte le spiegazioni, il supporto, la prova, l'intento, i compromessi, i kludges, ecc. Necessari, nonché il codice. Dal momento che il codice non è pensato per funzionare da solo, funziona bene.
S.Lott

@DisgrunteldGoat: non pensarci più. Dovresti iniziare da una lingua particolare, e io parlo solo 5. Tutte le altre lingue sarei perso come se fossi in olandese.
Joris Meys,

Per quanto riguarda il secondo paragrafo: certo che puoi. Prendi tutte le lingue correnti che offrono supporto per i commenti e rimuovi il supporto per i commenti. Se queste lingue avessero bisogno di commenti, allora sarebbero nel codice compilato o l'interprete farebbe qualcosa di diverso da ignorarli.
Kit

1

I programmatori indisciplinati scriveranno codice errato, indipendentemente dalla lingua.

Intrigante che Python, che ha solo per convenzione (_-prefisso), non fa alcuno sforzo per sorvegliare questo, e molto codice è ancora in fase di scrittura.

Rant: A volte penso che lingue più permissive costringerebbero più persone a imparare a programmare correttamente, piuttosto che il contrario (cioè l'unico modo per Java e dannazione che tu sia se vuoi pensare alle funzioni come oggetti di prima classe).


1

Immagino: probabilmente no. Perché? Perché dovresti codificare "perché" come un formalismo nella lingua e perché "perché", sia codificato in lingua che commentato in lingua è comunque sottoutilizzato dai programmatori.


1

Il codice può certamente essere un auto-commento nello spiegare cosa sta facendo, ma non è sempre possibile per il codice spiegare perché lo sta facendo. È qui che i commenti sono maggiormente necessari.

Se, ad esempio, è necessaria una sezione di codice per conformarsi a un regolamento specifico, come si spiega senza un commento? Se l'algoritmo utilizzato da un particolare pezzo di codice è descritto in un articolo scritto nel 1998 da M. Matsumoto e T. Nishimura, come si spiega senza un commento? Se un algoritmo non fornisce esattamente la funzionalità ottimale ma fa un compromesso giustificato molto specifico che può causare problemi futuri in caso di modifica di altro codice, come si spiega senza un commento?

Che cosa succede se una sezione del codice è stata verificata da un revisore indipendente in modo che non possa essere modificata senza invalidare tale verifica e il codice viene utilizzato per costruire un prodotto la cui conformità con tale verifica è richiesta dai clienti. Come lo indichi senza un commento?


0

Ho sempre pensato che sarebbe bello avere un commento di una sola parola in modo che se si anteponesse una parola con un simbolo (diciamo due punti), quella parola sarebbe ignorata. In questo modo, avresti potuto dire un lisp che consentiva solo commenti di una sola parola all'interno di un'espressione s. Ad esempio, potresti trasformare questo:

(if (= x y)
    x
    y)

... in questo:

(if (= x y)
    :then x
    :else y)

Se è assolutamente necessario, è possibile concatenare più commenti di una sola parola per formare un commento incorporato:

(if x :Remember, :x :could :be :nil!
    ...)

Certo, questo è un dolore da digitare. In effetti, questo è il punto. Ti incoraggia a usare i commenti in linea con parsimonia e a mantenerli brevi e pertinenti. Ma ho la sensazione che avrei avuto difficoltà a convincere qualcuno ad usare la lingua.


Inoltre rende difficile la lettura, il che vanifica l'uso dei commenti per rendere il codice più leggibile.
Nate CK,

0

Questo è doppio o niente. Alcuni programmatori non fanno nulla per rendere leggibile il codice. Non consentire commenti rafforzerà questo. Alcuni programmatori scrivono buoni commenti, anche se sarebbero ancora migliori se si trattasse di refactoring del codice anziché di commenti: la rimozione dei commenti può costringerli a fare il refactoring migliore.

Ragioni per cui questa è una buona idea: - Nessuna

Ragioni per cui questa è una cattiva idea: - Ci sono molti più atroci programmatori rispetto ai programmatori buoni ma non grandi - Dovrebbero esserci quasi sempre dei commenti per strani gotcha, riassunti, ecc. - Anche se si evitano i commenti, probabilmente si utilizzerà commenti come palcoscenico lungo la strada: inserisci un commento quando scrivi qualcosa, quindi torna indietro e rifattalo. Ma non puoi sempre farlo immediatamente perché stai ancora imparando. - Incoraggerà le persone a lavorare su di esso - Chi lo userebbe? Le persone che scrivono codice illeggibile e vogliono una scusa (cattiva) e le persone che sono già innamorate dell'idea (che possono semplicemente "non scrivere commenti" per cominciare). Se questo è quello che vuoi, basta scrivere uno standard di codifica che mostri come vuoi che le persone lo facciano.

Ragioni in cui ciò può essere rilevante - Dove potrebbe essere utile è parte di un sistema per migliorare il "non commento", ad es. un linguaggio o IDE che ha un buon supporto per qualcosa di meglio dei commenti e come parte del suo tono, evita i commenti. Non so come funzionerebbe, ma vale la pena pensarci almeno.

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.