Citat:
Ursprungligen postat av
kh31d4r
Du blandar ihop två saker här, eller så är ditt inlägg bara grötigt. Jag kan iaf inte se om det fetmarkerade avser mina två kodrader, eller ditt påstående om att kommentarer är bra för att berätta att en funktion sorterar saker.
Jag vidhåller att du kan döpa din funktion till sort om den sorterar, så behöver du ingen kommentar. Gör din funktion fler saker än sorterar? Då borde du laga din kod, inte skriva kommentarer.
Vad gäller de två raderna kod jag postade så tycker jag inte att de beskriver "vad" funktionen gör, är man intresserad av vad gränsvärdena kan vara så läser man koden, för den går att lita på - till skillnad från kommentarerna.
Jag tycker att det är märkligt att du inte förstår vad det du fetstilat syftar på. Jag kan ge ett exempel.
Kod:
// unstick_keys - unsticks the keyboard
// note: caps lock/num lock not affected
// note: make sure that kbd->Device is not locked before calling
void unstick_keys(keyboard *kbd)
{
// (kod)
}
Här står lite kommentarer om att något händer med tangentbordet, detta något kommer inte att ske med caps lock och num lock. Dessutom får inte kbd->Device (vilket troligtvis är ett objekt som hanterar själva hårdvaran) vara låst när man skickar det till funktionen. Den som ska använda funktionen behöver inte läsa kod alls, utan behöver bara se kommentarerna och sedan kan han använda funktionen. Jämför med detta:
Kod:
void unstick_keys(keyboard *kbd)
{
if(kbd->Device->isLocked())
throw new HardwareLockedException();
// (kod, någonstans inne i röran står tangentkoderna för caps lock och num lock med)
}
För det första måste man själv läsa inne i funktionen vad som sker för att ens se att hårdvaran inte ska vara låst. Om man alltid har kontroll av inparametrar skarpt avgränsade mot resten av funktionens kod är ju det bra. Men det kan man inte alltid ha (det kanske inte ens finns en isLocked-funktion i objektet, utan kanske bara andra funktioner som alla kommer att returnera felkoder om objektet är låst), och att se till att sådana kontroller är uppdaterade är ungefär lika påfrestande som att se till att kommentarer är uppdaterade.
För det andra får man själv lista ut baserat på hur funktionen verkligen gör det den gör, att caps lock och num lock inte påverkas av den.
Så ja, självkommenterande kod och vettig namngivning gör att kommentarer för det mesta inte behövs. Det är inte alltid sådant räcker. Vi kan ha en funktion som heter sort och alla förstår hur den används (åtminstone efter att de läst på internet hur man skriver en jämförelsefunktion). Vår tangentbordsfunktion däremot är av ett annat slag... Om man nu inte vill kalla den för unstick_unlocked_keyboard_except_caps_lock_and_num _lock. Vilket i och för sig skulle få folk att tänka till, men ändå.