Hyvää iltaa, arvon putkaväki.
Päätin nyt puuttua erääseen meitä kaikkia koskevaan asiaan. Ohjelmoitaessa koodin selkeys on usein suotavaa, ja siksi onkin ikävää, että erilaisia rivitys- ja järjestelymetodeja on käytössä. Monen koodivinkin ja esimerkkikoodin tapauksessa käytetään kuitenkin harmittavan usein vääriä.
Tässä viestissä otan kantaa vain niin sanottuun C-syntaksiin. Esimerkkinä käytän sitä koodivinkkiä, jonka huomasin ensimmäisenä:
/*Funktio, joka käsittelee haun tulokset*/ int handler(void *data, int argc, char **argv, char **colName) { int i; for(i=0;i<argc;i++) { printf("%s: %s\n", colName[i], argv[i]); } printf("\n"); return 0; }
Tämän koodin virheet ovat hyvin nähtävissä. Seuraavaksi hyppäänkin pari selityskohtaa yli, ja kirjoitan kommentoituna seuraavan koodin oikealla menetelmällä:
/* Funktio, joka käsittelee haun tulokset. C-tyyliseen kommenttiin kuuluvat rivinvaihdot ja sisennys. Ei tähtiä rivien alkuun. */ // Sulkeet ovat kiinni funktion nimessä. // Aloittava aaltosulku on samalla rivillä funktion kanssa. int handler(void *data, int argc, char **argv, char **col_name){ // Esimerkissä sisennys on 4 rivinvaihtoa. // Paras vaihtoehto on kuitenkin tabulaattorinäppäin. int i; // Riviä seuraavan kommenttimerkin molemmin puolin on välilyönti. for(i = 0; i < argc; i++){ // Kahden muuttujan operaattorien // molemmille puolille kuuluu välilyönti. // Kommentti jatkuu usealle riville näin. // Muuttujat kirjoitetaan kokonaisuudessaan pienin kirjaimin. printf("%s: %s\n", col_name[i], argv[i]); } // Lopettava aaltosulku omalla rivillään. printf("\n"); return 0; }
Toivottavasti otatte nyt opiksi, ja jälkipolvien ihmistainten periessä Ohjelmointiputkan, vain oikeat menetelmät ovat käytössä. Näin maailmamme muuttuu paljon paremmaksi.
Millä ihmeen perusteella väität, että aloittavan aaltosulun pitäisi olla samalla rivillä, ilman väliä edellisen merkin perässä? Miksei forin jälkeen tule väliä? Miksi kommenttien pitäisi jatkua tuolla tavalla, miksi ylipäänsä pitää kirjoittaa riville mahtumattomia kommentteja koodirivin loppuun eikä omille riveilleen? Pystytkö alkuunkaan esittämään joitain tosiasioita väitteittesi tueksi? Esimerkiksi C99-speksissä muotoilu ei mene lainkaan noin, onko se sinusta jotenkin huono auktoriteetti tässä asiassa?
Jokseenkin ainoa asia, jonka välttämättömyydestä olen samaa mieltä, on se, että koodissa täytyy olla välejä. On paljon selkeämpää lukea siististi välitetty laskulauseke kuin valitettavan yleinen a+b/c%d*f_a-s+f(x,y+y0,z/0)
-tyylinen lauseke. Toinen asia on tietenkin järkevä (tasavälinen) sisennys. Muuten kukin asetelkoon koodinsa, miten haluaa, vaikka toki minustakin tietyt merkintätavat ovat mukavampia ja käytännöllisempiä kuin toiset.
Ville-v, huoh. Ensinnäkin pedanttisesti C-standardia noudatettaessa /**/-kommentti on ainoa sallittu kommenttitapa. Lisäksi muutenkin koko postaus on totaalisen pelle. Toivottavasti et ollut tosissasi...
Laitinen kirjoitti:
C-standardia noudatettaessa /**/-kommentti on ainoa sallittu kommenttitapa.
Siirryhän edes viime vuosikymmenelle. C99 toi mukanaan //-kommentit.
Huono trolli.
ville-v kirjoitti:
Ohjelmoitaessa koodin selkeys on usein suotavaa, ja siksi onkin ikävää, että erilaisia rivitys- ja järjestelymetodeja on käytössä. Monen koodivinkin ja esimerkkikoodin tapauksessa käytetään kuitenkin harmittavan usein vääriä.
Anteeks vaan, mutta mun koodauskonventiot on parempia ku sun koodauskonventiot ;)
Jokaiseen tilanteeseen löytyy sopiva Hackles-strippi, tässä koodauskonventioista: http://hackles.org/cgi-bin/archives.pl?request=98
ville-v kirjoitti:
...... // Esimerkissä sisennys on 4 rivinvaihtoa. ......
Vautsi.
En kyllä ymmärrä, miksi jälkimmäinen tyyli olisi "oikeampi", varsinkin kun omasta mielestäni on paljon selkeämpää, että lohkon aloittava aaltosulku on omalla rivillään (paljon helpompi huomata koodin seasta jos jostain syystä pitää huomata) ja myös muuttujien nimeämiskäytäntö siinä (EDIT: siis ensimmäisessä) on parempi.
Tsekkaappa tämä tyyliopas (ainakin kohta 3.5): http://www.cs.tut.fi/cgi-bin/run/oliot/download/cpptyyliopas.pdf
Metabolix: okei, artikuloin itseni huonosti, mutta tarkoituksenani oli puolustaa /**/-kommenttia jo sen yhteensopivuudenkin vuoksi. Lisäksi ansia käytetään vielä kohtuullisen usein, mutta C99:ssä //-kommentti on toki sallittu.
Antaa jokaisen koodata tavallaan, kunhan tosiaan jätetään vähän "ilmaa" koodin sekaan, sisennetään ja kommentoidaankin jos tarve vaatii. Minusta tuo ville-v:n ensimmäinenkin koodinäyte on varsin selkeää luettavaa.
Sen sijaan koodivinkit vaatisivat kyllä muuten siistimistä mm. päivittämisen ja kehnoimpien poiston nimissä.
Saattapi olla niin, että nimenomaan yhden projektin tai firman sisällä koodausstandardi on todella arvokas asia. Arvokkainta on se, että se on olemassa, eikä se, mitä se määrää, kunhan se määrää jotakin järkevää ja toimivaa. Silloinhan jokainen projektiin osallistuva on jo valmiiksi samalla sivulla koodin ulkonäön kannalta.
Sen sijaan eri yhteyksissä törmää väistämättä erinäköisiin koodaustyyleihin, ja siihen on paras tottua. Täällä esimerkiksi on toistakymmentä eri ohjetta:
http://www.chris-lott.org/resources/cstyle/
(Sivu on aika wanha.)
Vinkkinä trolleille lopuksi, että paras tapa provoilla C- tai C++-koodareita on ehdottaa, että kielen varattuja sanoja voi lyhentää kätevästi esim. seuraavan muotoisilla defineillä: #define R return
. Näin monet yksinkertaiset funktiot voi kirjoittaa kätevästi yhdelle riville :-P
Lumpio kirjoitti:
Huono trolli.
Ääni tälle. Jos kyseessä ei olisi trolli, niin kaipa ville-v olisi jo hyökännyt puolustamaan totuuksiaan :)
Vau! Ihan minun koodivinkkini päässyt morkattavaksi. Pitäisi varmaan olla otettu tästä kunniasta.
Minusta tuollaiset suoranaiset pilkunnussinnat jostain koodaustyylistä ovat täysin turhia. Aloittajakin osasi hienosti perustella miksi asiat pitäisi tehdä niin kuin hän ehdottaa. Tietysti joku järki ja säännönmukaisuus pitää olla käytössä kun koodaillaan ja jota noudattaa sitten koodissaan. Itsestäni sillä ei niin väliä ole mikä se säännöstö on, kunhan se vain jollain tapaa on järkevä. Itselleni sisältö on ainakin esitystapaa tärkeämpi (ei, tämä ei tarkoita, ettei esitystavalla olisi väliä).
Esimerkiksi tuossakin tarkoituksella olen laittanut aloittavat sulut omalle rivilleen, koska se mielestäni on selkeämpi ja ei tietääkseni mitenkään väärä tapa.
Tulipa taas kivasti tuhlattua aikaa melko turhaan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.