Permalänk
Medlem
Skrivet av Exxovion:

Är inte kommentarerna mest till för att de mer "oinsatta" ska förstå?

Kan man programmeringsspråket så listar man väl snart ut vad det handlar om?

Nej.
Kan du programmeringsspråket så kan du snart lista ut vad koden gör. (Med undantag för bidrag till IOCCC, kod skriven i Malbolge, och liknande hemskheter.)
Kommentarer är (bland annat) till för att tala om vad koden ska göra. Detta är inte alltid samma sak som vad den gör.

Kommentarer är även ovärderliga för vissa fall där koden ser väldigt konstig och t.o.m. felaktig ut, men gör det av en bra anledning - då förklarar kommentaren varför koden ser sådan ut och varför den behöver göra det. (Vanligtvis för att arbeta sig runt en bug eller konstighet i någon annan komponent av systemet som inte någorlunda enkelt kan ändras.)

Permalänk
Medlem
Skrivet av dpom86:

@CyberVillain: Min syn är:
Dokumentationen är vad.
Kommentarer är varför.
Koden är hur.

Jo jag var väldigt gråzonig där mellan doc och kommentering, men som många sagt innan är 'varför' viktigt också, och jag ser det som "dokumentation" även om det inte måste stå i doc rent tekniskt.

(Aja, jag gjorde väl mest en åsiktsdump. Kommer dra vidare.)

Om något står i en kommentar eller i en extern dokumentation spelar mindre roll, bara det står någonstans. Extern dokumentation är bättre för långa förklaringar av rena läslighetsskäl, men har nackdelen att den ännu lättare än kommentarer blir föråldrad och utdaterad, samt att den inte är lika omdelbart tillgänglig när man läser koden.

Permalänk

Jag kan ärligt säga att jag inte läst igenom allt här, men tänkte ändå lägga in min åsikt.

Min åsikt i det hela är enkelt: Det beror på vilket språk och sammanhang.
När jag arbetar i high level som Java, C#, VB, Javascript, PHP, Python, Pearl m.f,
så brukar som som regel inte skriva kommentarer.

Undantaget är om jag t.ex gör ett förarbete
eller liknande (API implementationer, algoritmer eller annan lite mer specificerad kod) åt någon annan som är mindre kunnig inom programmering. Dock gäller kommentarerna bara t.ex dom olika stegen i en algoritm eller förklaring på token-generering för API nycklarna (typ: "//Token = AES(tid i ms, api nyckel)" ) m.m.

Är det bara jag som ska arbeta på den, så blir där inga kommentarer (fast //TODO i Java är rätt trevlig under tidiga utvecklingsstadier )

När det kommer till low level så som Assembler och C\C++ så beror på det på storleken på projektet.

Då jag jobbar mycket med AVR och ARM, så blir det, framförallt på ARM processorer, ofta mycket kod och oftast flera personer involverade.
Skriver jag en drivrutin för en extern IC, så kan det vara bra om jag kommenterar vad olika register gör, vilka registerbitar jag sätter vid initieringen och vad dom gör/varför.

Håller på att avsluta ett projekt nu där det varit 5 olika personer inne i skrivit koden innan jag började på företaget i Maj 2017. Det var något av den värsta spagettikoden jag någonsin sett, massor av konstiga klåparhack på felaktigt initierad SPI. Massor av okontrollerade while-loopar (till och med while-loopar i while-loopar) i stil med "while(!txReady)" och när jag frågar var den sätts så får jag svaret "Den sätt av ett avbrott om TXE-flaggan är satt". Detta helt utan hänsyn till CRS.
Skrev till USB bufferten utan att ens kolla i fall där var en öppen anslutning och massor av annat som får en att undra hur det någonsin kunnat fungera.
Och givetvis så hade inget lämnat några kommentarer. Ända som var kommenterat vad massor av gammal test-kod som dom inte förmådde att rensa bort när dom var klar med den.

Givetvis ska man inte kommenterar var varannan rad.
Men en fin fingervisning i stil med: if (USART2->SR & USART2_SR_TC) { //If TC is set (Transmitt complete)
är inte dumt när det kommer till register och liknande (usart är kanske ett dåligt exempel då det är något man kan utantill).
Vissa förespråkar kommentarer i långa if-satser och dylikt, men om du har en så lång if-sats så har du skrivit koden fel. Den bör då ha delats upp i funktioner istället vars namn förklarar vad den gör.
Detsamma gäller långa funktioner, dela upp i mindre.

Vad sen gäller dokumentation så har vi ju arbetssätt vi utgår från.
Så som flödesdiagram/funktionsdiagram för all kod, all mjukvara ligger på SVN på företagets server
och alla ändringar ska beskrivas när man gör en commit. Riskanalyser och andra tråkiga dokument.
Även manualer för hård och mjukvara ska valideras och uppdateras varje vecka om ändringar gjorts, detta går
ju dock snabbt när man vet vad man själv ändrat och var i manualen detta finns.

Ber om ursäkt för det långa inlägget.

Permalänk
Medlem

Man bör åtminstone kommentera funktions/metod/klass-deklarationer osv. Sen kan det ju vara bra att slänga in en kommentar där koden kan vara lite förrädisk, dvs kod som vid en första anblick kan verka konstig men finns där av en anledning. Jag vet inte hur många som är utbildade programmerare, men i programvaruteknik som jag läst har vi lärt oss att det ska kommenteras som jag nämnt. En ny person ska kunna ta över ditt projekt utan problem. Själv tar jag hellre över ett projekt med kommentarer än utan, då syftet med en kodsnutt nån annan skrivit inte alltid är självklar.

Visa signatur
Permalänk
Medlem

Jag kommenterar implementations detaljer vars syften inte är direkt uppenbara eller när jag känner att det kan vara behjälpligt. Ser inte hur det på något sätt är av ondo för någon, snarare tvärt om. Även i egna projekt som vuxit sig stora är det inte alltid lätt att ha koll på alla detaljer. Då kan en kommentar på rätt ställe var till stor nytta.

Visa signatur

| Ryzen 5800x | Asus prime x470 pro | Asus rtx 3080 tuf oc | Gskill 32gb 3,6ghz | aw3225qf |

Permalänk
Medlem
Skrivet av brorsan:

Man bör åtminstone kommentera funktions/metod/klass-deklarationer osv. Sen kan det ju vara bra att slänga in en kommentar där koden kan vara lite förrädisk, dvs kod som vid en första anblick kan verka konstig men finns där av en anledning. Jag vet inte hur många som är utbildade programmerare, men i programvaruteknik som jag läst har vi lärt oss att det ska kommenteras som jag nämnt. En ny person ska kunna ta över ditt projekt utan problem. Själv tar jag hellre över ett projekt med kommentarer än utan, då syftet med en kodsnutt nån annan skrivit inte alltid är självklar.

Jag håller med ovan, alla skriver kod på olika sätt.
Vissa till och med försvårar kod för att själva se "smarta" ut.
Har också fått lära mig sen tidigt att det ska kommenteras, största anledningen är då att någon kan komma att ta över som inte skriver kod på samma sätt som du, samt att det kan gå snabbare att själv hitta rätt i ett stort projekt.

Permalänk
Medlem

För en novis som mig, som har fått ärva en hel del kod, är det riktigt bra med kommenterar. Mitt arbete är inte att koda men jag verkar ha halkat in på det bananskalet, av någon anledning.

Permalänk
Medlem

Det är lustigt att tro att en person som inte kan uttrycka en idé klart i kod skulle kunna göra det bättre med ett naturligt språk. Problemet är allt som oftast just att personen inte tänker klart innan de börjar.

Ett klart bättre alternativ till "förtydligande" kommentarer är automatiserade tester, som fungerar som en levande dokumentation. En kommentar, eftersom den inte kan köras, är en lögn som väntar på att hända.

TODO-typen av kommentarer gör sig bättre i ett ärendehanteringssystem, där det kan ses av alla och prioriteras av produktägaren.

En viktig funktion som kommentarer faktiskt kan fylla är strukturerade kommentarer som används för att automatiskt generera t.ex. en API-dokumentation.

Permalänk
Medlem

@CyberVillain: Du är säkert en jätteduktig programmerare men du behöver onekligen jobba på din attityd mot andra människor. Du framstår som en ganska otrevlig typ och snudd på osympatisk när du skrattar rakt ut åt folks åsikter, tycker att det borde vara dödsstraff på vissa typer av kommentarer och skriver rakt ut till en annan människa att hen borde få sparken. Jag hoppas för din egen skull att du inte behandlar dina kollegor på samma vis.

Visa signatur

Rigg: ASUS ROG Strix B660-I Gaming WIFI | i5 12400F | Corsair Vengence DDR5, 32 GB | nVidia Geforce GTX 1060 3GB | Samsung 980 PRO, 1 TB

Permalänk
Avstängd

@wixia: Finns ingen bättre än när en undersåte skriver dålig kod så man får ta fram dummstruten..

Visa signatur
Permalänk
Medlem
Skrivet av wixia:

@CyberVillain: Du är säkert en jätteduktig programmerare men du behöver onekligen jobba på din attityd mot andra människor. Du framstår som en ganska otrevlig typ och snudd på osympatisk när du skrattar rakt ut åt folks åsikter, tycker att det borde vara dödsstraff på vissa typer av kommentarer och skriver rakt ut till en annan människa att hen borde få sparken. Jag hoppas för din egen skull att du inte behandlar dina kollegor på samma vis.

Med den attityden så sitter han nog ensam helt utan arbetskamrater.

Skickades från m.sweclockers.com

Permalänk
Medlem

Låter ju som ett dilemma.

"Dom är bra när det görs på rätt sätt."

Så, well, hur vanligt är det att det inte görs på rätt sätt? Och hur kan man förhindra att det missbrukas? Bättre utbildning?

Permalänk
Medlem
Permalänk
Avstängd

Hittade denna idag, kommentaren hjälpte inte, en kärna på servern gick ändå åt till att inte göra någonting alls

//Väntar på att systemet ska matsmälta requesten
while(stopWatch.ElapsedMilliseconds < 60*1000) {}

Visa signatur
Permalänk
Inaktiv

Jag uppskattar när det finns kommentarer som pekar ut saker man inte kan läsa sig till i den kodsnutt man tittar på speciellt när det kommer till lås/synkronisering/minneshantering, eller om man har jobbat runt något specifikt problem.

Men det är lätt att kommentarer ruttnar, mycket bättre med bra komitt meddelanden i det versionshanteringsystem man använder.

Edit: interface får gärna vara kommenterade.

Skickades från m.sweclockers.com

Permalänk

Nu har jag ingen programmerare per-se, men finns det ingen oskriven regel som säger att kommentera inte det som framgfår av koden. Själv. Minns minns första kurs på universitet och det var obligatorisk att kommentera rikligt på sina inlämningsuppfigter. Slutresultatet blev att man hade massa kommentarer i stil med "/* Variabler */ -Detta var på civilingenjörsprogrammet i teknisk fysik. Resultatet blev det omvända mot var regeln skull illustrera.

Permalänk
Avstängd

@Strangeattractor: hehe, du hade fått underkänt om jag var din professor Jag som en av arkitekterna på mitt förra jobb fick code reviawa kandidaters koduppgift, blev inte lätt på intervjun om det fanns onödiga kommentarer i koden

Visa signatur
Permalänk
Medlem
Skrivet av Strangeattractor:

Nu har jag ingen programmerare per-se, men finns det ingen oskriven regel som säger att kommentera inte det som framgfår av koden. Själv. Minns minns första kurs på universitet och det var obligatorisk att kommentera rikligt på sina inlämningsuppfigter. Slutresultatet blev att man hade massa kommentarer i stil med "/* Variabler */ -Detta var på civilingenjörsprogrammet i teknisk fysik. Resultatet blev det omvända mot var regeln skull illustrera.

På inledande programmeringskurser så brukar det alltid finnas krav på att man skall kommentera så in åt helvete mycket - och oftast fel saker.

Permalänk
Medlem

Jag har jobbat som utvecklare i några år och tycker att man bör kommentera kod i vissa fall. All form av API bör dokumenteras så att man har en chans att använda en funktion/metod utan att behöva läsa 100 rader kod. Vissa delar av koden kommer vara komplicerad hur gärna man än vill att det inte ska vara det. Komplicerad kod bör dokumenteras för det hjälper nästkommande utvecklare förstå varför man tog ett beslut som vid första anblick kan se konstig ut.

Som erfarenhet så sitter jag på ett stort företag och jobbar med kod som började utvecklas för ca 20 år sedan. När man då stöter på en rad i stil med "double xt = xv * xc * 10.54;" så är det jäkligt trevligt att veta vad 10.54 representerar. Även om man skriver "double cogAngleAdjustment = 10.54;" så kan det fortfarande vara svårt att förstå varför det blev just 10.54.

Sist så vill jag tillägga att dom som säger "om man behöver kommentera kod så är man en dålig programmerare", kan aldrig ha jobbat i industrin eller åtminstånde bara jobbat på något nyare hot shot mjukvaruföretag. Det kryllar av dåliga programmerare och ingenjörer som inte är programmerare egentligen som skriver mängder med rader dålig kod varje år. Har dom då åtminstånde kommenterat koden så finns det kanske en liten chans att man lyckas förstå vad dom försökt åstadkomma inom en rimlig tid.

Permalänk

Det enda negativa vad jag kan tänka mig är att kompilering kan ta något längre tid med kommentarer. Annars är det en högst personlig fråga om vad man föredrar.

Ska bli intressant att följa tråden, men den kommer tyvärr inte leda till någon generell slutsats om vad som är att föredra samt vilket alternativ som är bäst.

Visa signatur

[IT-Dept]
Ryzen 1700 OC - 32 - 1070

Permalänk
Skrivet av AllMessedUp:

Det enda negativa vad jag kan tänka mig är att kompilering kan ta något längre tid med kommentarer.

Högst en piss i havet längre tid.

Permalänk
Hedersmedlem

La precis till en kommentar i mitt hobby-projekt. Skönt att inte behöva bli tveksam över varför jag satt sändarens och mottagarens adress till samma utan kan lämpligt säga att det är en funktion av hårdvaran som kräver det.

Åh vad skönt! Då behöver jag inte läsa igenom databladet i framtiden och sätta mig in i det.

Permalänk
Avstängd
Skrivet av Shimonu:

La precis till en kommentar i mitt hobby-projekt. Skönt att inte behöva bli tveksam över varför jag satt sändarens och mottagarens adress till samma utan kan lämpligt säga att det är en funktion av hårdvaran som kräver det.

Åh vad skönt! Då behöver jag inte läsa igenom databladet i framtiden och sätta mig in i det.

Och jag tog precis bort två kommentarer som en giithub contributor hade skrivit (Notera cut and paste felet i kommentaren också)

public bool IsKeyDown(int keycode) { // Returns true if the key is currently being pressed var key = (SlimDX.DirectInput.Key) keycode; bool down = KeyState.IsPressed(key) || MyKeyDown[keycode]; return down; } public bool IsKeyUp(int keycode) { // Returns true if the key is currently being pressed var key = (SlimDX.DirectInput.Key) keycode; bool up = KeyState.IsReleased(key) && !MyKeyDown[keycode]; return up; }

edit: MyKeyDown? Det där måste jag undersöka

Visa signatur
Permalänk
Keeper of Traditions
Skrivet av AllMessedUp:

Ska bli intressant att följa tråden, men den kommer tyvärr inte leda till någon generell slutsats om vad som är att föredra samt vilket alternativ som är bäst.

Det är för att det inte finns ett universellt svar

Olika utvecklare har olika preferenser, och olika företag har olika policy:s.

Visa signatur

|| Intel 8700K || Asus RTX 4070 TI Super TUF || Samsung 750 EVO 500GB & Kingston A2000 1TB & Samsung 960 EVO 250GB || Corsair RM 850x || Antec P183 || Asus G-Sync RoG Swift PG279Q || Dell XPS 15 || Thinkpad X220

The Force is like Duct Tape, it has a light side, a dark side, and holds the universe together.

Permalänk
Medlem
Skrivet av MaloW:

Ett rätt dåligt exempel (för detta är bara ett hobby-projekt jag sitter själv på så jag skriver inga super commit-kommentarer) men […]

Väldigt off-topic, men utifrån din kommentar låter det som du valt att implementera ett jättestort anti-pattern: svälja exceptions och returnera null istället (vilket kommer ge null-pointer exceptions utan något som beskriver problemet i detalj, vilket de svalda undantagen förmodligen gör)

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Avstängd
Skrivet av Teknocide:

Väldigt off-topic, men utifrån din kommentar låter det som du valt att implementera ett jättestort anti-pattern: svälja exceptions och returnera null istället (vilket kommer ge null-pointer exceptions utan något som beskriver problemet i detalj, vilket de svalda undantagen förmodligen gör)

NJa, inte off topic. Maintainability är ju en stor del av att inte kommentera kod

Visa signatur
Permalänk
Medlem
Skrivet av CyberVillain:

Och jag tog precis bort två kommentarer som en giithub contributor hade skrivit (Notera cut and paste felet i kommentaren också)
edit: MyKeyDown? Det där måste jag undersöka

Alltså, att majoriteten av de som skriver kod är ganska kassa på det tror jag dom flesta här kan vara överens om.
Så när du behöver förstå vad denna dåligt skrivna koden faktiskt försöker göra är det ju djävligt nice att ha en kommentar som förklarar vad jeppen som skrev koden försökte åstadkomma tänker jag.

Jag menar, tänk dig att du ska sätta dig in i ett projekt som en idiot har jobbat på (personen i fråga vet inte att dom är en idiot), denna idiot delar dock din inställning ang kommentarer. Får du inte då oläsbar kod där det även är otydligt vad idioten faktiskt försökte åstadkomma?

Jag tänker att det borde vara lättare för en idiot att skriva en beskrivande kommentar än att bygga bra kod (även om många även misslyckas med kommentarer). Eller menar du att all sådan dokumentation bör vara skriven av idioten separat i wiki eller liknande?

Personligen håller jag med ditt tänk om diskussionen är helt och hållet ideologisk så att säga. Men precis som alla ideologier så är det mer ett önskvärt mål att sträva efter snarare än något som faktiskt fungerar i verkligheten förutom i undantagsfall.

Permalänk
Avstängd

Jag är övertygad en idiot inte skriver bättre kommentarer än kod

Visa signatur
Permalänk
Medlem
Skrivet av Teknocide:

Väldigt off-topic, men utifrån din kommentar låter det som du valt att implementera ett jättestort anti-pattern: svälja exceptions och returnera null istället (vilket kommer ge null-pointer exceptions utan något som beskriver problemet i detalj, vilket de svalda undantagen förmodligen gör)

Jag håller med, det är lite av en temporär-lösning atm, jag har tänkt byta ut "return null" till att kasta ett checked exception istället. Problemet var att jag behövde en snabb-fix till att där kastades unchecked exceptions från gson, och jag hatar verkligen unchecked exceptions i min kod, i just detta exemplet så dog hela min http-server eftersom runtime-exceptionet propagerades upp hela vägen och dödade min tråd eftersom det aldrig hanterades.

Permalänk
Avstängd
Skrivet av MaloW:

Jag håller med, det är lite av en temporär-lösning atm, jag har tänkt byta ut "return null" till att kasta ett checked exception istället. Problemet var att jag behövde en snabb-fix till att där kastades unchecked exceptions från gson, och jag hatar verkligen unchecked exceptions i min kod, i just detta exemplet så dog hela min http-server eftersom runtime-exceptionet propagerades upp hela vägen och dödade min tråd eftersom det aldrig hanterades.

Du ska låta din infrastruktur lösa det istället. Säg att du kastar ett ArgumentException långt ner i koden, detta plockas upp av din http-infrastruktur högre upp och så blir det en 400 bad request. (By convention inte explicit kod)

Visa signatur