Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Virheelliset koodit Ohjelmointiputkassa

Sivun loppuun

ville-v [04.03.2008 19:45:35]

#

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.

Metabolix [04.03.2008 20:04:47]

#

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.

Laitinen [04.03.2008 20:12:01]

#

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...

Metabolix [04.03.2008 20:13:02]

#

Laitinen kirjoitti:

C-standardia noudatettaessa /**/-kommentti on ainoa sallittu kommenttitapa.

Siirryhän edes viime vuosikymmenelle. C99 toi mukanaan //-kommentit.

Lumpio [04.03.2008 20:14:48]

#

Huono trolli.

Blaze [04.03.2008 20:15:25]

#

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

TsaTsaTsaa [04.03.2008 20:17:05]

#

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

Laitinen [04.03.2008 20:29:52]

#

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.

Juice [05.03.2008 13:07:09]

#

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ä.

Pekka Karjalainen [05.03.2008 14:18:52]

#

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

tkarkkainen [05.03.2008 14:27:01]

#

Lumpio kirjoitti:

Huono trolli.

Ääni tälle. Jos kyseessä ei olisi trolli, niin kaipa ville-v olisi jo hyökännyt puolustamaan totuuksiaan :)

Päärynämies [05.03.2008 19:41:40]

#

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.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta