Domanda Commento Java alla fine della parentesi graffa / blocco


È una pratica accettata nel linguaggio di programmazione Java terminare una parentesi per un blocco di codice con un commento che spiega brevemente quale blocco di codice la parentesi si chiude? Personalmente penserei che siano commenti inutili che ingombrano la leggibilità del codice, ma forse potrei sbagliarmi. Per esempio:

public void myMethod(int foo) {    
    // some code
    if (foo == 2) {
        for (int i = 0; i < myMax; i++) {
            while (true) {
                // some more code
            } // end while
        } // end for
    } // end if
} // end myMethod(int)

La pratica di commentare blocchi di codice in modo simile è una pratica accettata?


32
2017-10-09 02:27


origine


risposte:


Questa non è esattamente una cattiva pratica, ma è un effetto collaterale mortale di scarsa pratica di codifica orientata agli oggetti!

Inoltre, questo viola le linee guida di stile e i principi di "codice auto-documentante". Non dovresti mai avere tante parentesi o un metodo abbastanza lungo da confondere il lettore sul posizionamento della parentesi, invece incapsulare quella funzionalità in un altro metodo che è ben documentato.

Le parentesi implicano o catene logiche if if altrimenti complesse, una buona pratica di programmazione consiste nel fare un metodo esattamente una cosa e farlo bene, quindi costruire il programma da questi metodi più piccoli e atomizzati. Vorrei leggere il pezzo fondamentale di Butler Lampson "Suggerimenti per la progettazione del sistema informatico". Fornisce alcuni dettagli su come progettare un buon software.

Quindi, in sostanza, non commentare in questo modo perché:

  1. Viola le linee guida di stile
  2. Mostra scarsa programmazione orientata agli oggetti - atomizza la tua funzionalità!
  3. È un micidiale effetto collaterale della pratica della codifica che va contro i concetti sottostanti del perché è stato creato Java - l'incapsulamento, in particolare l'occultamento delle informazioni
  4. Viola il concetto di codice auto-documentante
  5. Altri programmatori ti prenderanno in giro.

38
2017-10-09 03:46



La mia opinione è che di regola NON è una buona pratica. Come sempre con le regole ci potrebbero essere delle eccezioni ma molto rare.

Non è una buona pratica perché

  1. Gli editor moderni evidenziano la parentesi aperta quando si posiziona il cursore su quella di chiusura e viceversa.
  2. Più importante: se c'è la possibilità di non vedere l'inizio della clausola significa che il metodo è enorme (più di mezza pagina) che è una cattiva pratica.
  3. Aggiunge rumore al codice che confonderà i lettori che sono abituati a uno stile di codifica Java più convenzionale.
  4. Incorporando il commento di LordScree-Joachim Sauer: Questi commenti lo faranno essere dolori al collo da mantenere Quindi molto probabilmente non verrà mantenuto e le informazioni di solito non saranno sincronizzate con la realtà.

58
2017-10-09 02:33



Dipende da quanto sia complicato il metodo o la funzione. Come se tu avessi qualcosa che può essere facilmente letto e capito di quanto non ci sarebbe davvero un punto nel concludere OGNI riga con un commento che spiega che la parte è finita. Ecco a cosa servono indentazione e interruzioni di riga. Tuttavia, se si dispone di qualcosa che è veramente complesso e interessa una parte importante del codice, si dovrebbe indicare dove finisce quel codice e cosa fa quella sezione.


1
2017-10-09 02:31



Lo faccio solo quando c'è un posto nel codice che ha un sacco di parentesi graffe una dopo l'altra. Ma non per ogni coppia. Principalmente mi sembra di usarlo per cicli in modo da poter vedere facilmente che cosa è un blocco di codice ripetuto.

Qualcosa che assomiglia a questo:

            // ...
            File.Close ();
          }
        }
      }
    }
  }
}

Quindi aiuta ad aggiungere alcuni commenti:

            // ...
            File.Close ();
          }
        }
      }
    } // per: ogni file
  }
}

1
2017-11-21 07:31



Se ci sono blocchi nidificati dello stesso tipo, potrebbe confondere invece di fare del bene. Diciamo che hai 4 o 5 istruzioni if ​​annidate (tieni presente che questo è solo un esempio per dimostrare la situazione, indipendentemente dai suggerimenti "oh dovresti separarli" o "fai un metodo") in quel caso avrai 4 o 5 differente // termina se sequenziato. Dopo un po ', ti fa confondere quale "end if" è per quale affermazione, ti fa spendere ulteriore sforzo inconsciamente per vedere attraverso il codice / dichiarazioni reali perché non è sempre così pulito / breve come il tuo esempio.


0
2017-10-09 02:54



IMO, non aiuta molto. Il codice all'interno di un ciclo o di un'istruzione if non dovrebbe essere troppo grande. Sarebbe stato utile se ci fossero 500 linee all'interno del ciclo.


0
2017-10-09 03:04