Devo ammettere che non sono d'accordo con alcune delle cose che le altre risposte raccomandate, quindi ho intenzione di buttare i miei due centesimi;
Commenti
La documentazione è estremamente utile per gli estranei che leggono il tuo codice. Di solito molte cose non saranno abbastanza prolisse da essere lette e comprese immediatamente, e dovresti quindi spiegare cosa stai facendo.
Modifica : la discussione nella sezione dei commenti ha messo in evidenza qualcosa di giusto: il sovradimensionamento viene solitamente fatto quando si scrive codice cattivo .
Commentare il tuo lavoro dovrebbe essere preciso e minimale, ma, a mio parere, dovrebbe essere sicuramente presente. Almeno un commento per ogni 15 righe di codice. Ad esempio, in cima ai blocchi sul codice, aggiungi una riga su ciò che stai facendo:
def login(username: str, password: str, create_session: bool = True):
# Filter the user we need from the database
hash = md5(password)
users = db.table("users", db_entities.USER)
results = [x for x in users.query(lambda c: c.get("username") == username and c.get("password_hash") == hash)]
if len(results) == 0:
return None, None
else:
# Create a login session record in the database.
if create_session:
sessions = db.table("sessions", db_entities.SESSION)
ses = sessions.new()
ses.set("username", username) \
.set("expiery", 31536000 + time.time())
sessions.update(ses)
return results[0], ses
else:
return results[0], None
Commenti minimi che spiegano perché e che cosa stai facendo sono molto utili in tutto il codice. Non sono d'accordo con la risposta che afferma
If I come across code containing comments, I prepare for the worst: the code is likely to be bad, and to be honest the comments are likely to be bad too.
Molte volte, con garbo, è documentato un buon codice. È vero che i cattivi programmatori vedono la loro documentazione come "Va bene, il mio codice è cattivo, aggiungiamo alcune frasi per renderlo più chiaro".
Sì, e anche se questo si verifica parecchio, è anche vero che i bravi programmatori che scrivono codice pulito vogliono anche assicurarsi che ritornino al loro codice e capiscano perché vogliono che la loro funzione si comporti in quel modo, o perché hanno bisogno di quella linea che sembra un po 'ridondante, ecc ...
Sì, i commenti che spiegano le cose ovvie, i commenti che non sono chiari, i commenti che sono stati messi insieme per assicurarsi che "questo codice sia documentato, sì, qualunque cosa", sono odore di codice. Rendono la lettura del codice più difficile e irritante. (Aggiunta di un esempio di seguito)
# Logging into Gmail when the module is imported
_client = login()
def get_client():
global _client
return _client
Example clarification: "No shit, Sherlock. does _client = login()
log into the mail service? OMG!"
More clarification: the login()
method has no relation to the login()
method from the above example.
Ma i commenti che corrispondono agli standard, spiegano il perché e non il come, e rispondono alle domande giuste , sono molto molto ( molto ) utili.
Commenti in linea
Una cosa dovresti NON (e se potessi scrivere quello più grande, lo farei), è scrivere i tuoi commenti nella stessa riga del codice. Rende i commenti molto specifici della linea, che manca completamente lo scopo di commentare il tuo codice.
Ad esempio, cattivi commenti in linea:
outer = MIMEText(details["message"]) # Constructing a new MIMEText object
outer["To"] = details["to"] # Setting message recipient
outer["From"] = "xAI No-Reply" # Setting message sender
outer["Subject"] = details["subject"] # Setting message subject
outer.preamble = "You will not see this in a MIME-aware mail reader.\n" # I don't know what I'm doing here, I copied this from SO.
msg = outer.as_string() # Getting the string of the message
_client = details["client"] # Assigning the client
_client.sendmail(SENDER, details["to"], msg) # Sending the mail
Sarebbe molto più facile leggere e comprendere questo codice senza i commenti, che lo rendono disordinato e illeggibile.
Invece, i commenti all'interno del codice dovrebbero essere posizionati sopra i blocchi sul codice e dovrebbero rispondere alle importanti domande che potrebbero sorgere durante la lettura del blocco di codice.
# Constructing the email object with the values
# we received from the parameter of send_mail(details)
outer = MIMEText(details["message"])
outer["To"] = details["to"]
outer["From"] = "xAI No-Reply"
outer["Subject"] = details["subject"]
outer.preamble = "You will not see this in a MIME-aware mail reader.\n"
msg = outer.as_string()
# Sending the mail using the global client (obtained using login())
_client = details["client"]
_client.sendmail(SENDER, details["to"], msg)
Molto più chiaro, giusto? Ora sai anche che devi usare la funzione login()
e fornire i parametri a send_mail()
con tutto ciò che hai usato. Aiuta un po ', ma manca ancora una cosa.
Documentazione funzioni
È stato ampiamente discusso. Dovresti sempre lasciare che i tuoi lettori sappiano di cosa tratta la tua funzione, perché e cosa fa. Come fa questo, questo non appartiene alla documentazione, ma forse alle note a piè di pagina della funzione.
Dovresti descrivere chiaramente cosa ti aspetti dai tuoi parametri e se vuoi che vengano ottenuti / creati in un metodo specifico. Dovresti dichiarare quale dovrebbe essere la tua funzione, quale sia il suo utilizzo, ecc.
Ancora una volta, questa è la mia opinione e metodologia durante la scrittura del mio codice. Non solo quelli, ma quelli sono solo alcune delle cose che non sono d'accordo con le altre risposte. Oh, e naturalmente, non solo i commenti leggono il tuo codice, ma il tuo codice stesso. Scrivi codice pulito, comprensibile e gestibile . Pensa al tuo futuro se stesso durante la codifica; -)