{!!!#- {id="Dixsjg7NbllG" .huomautus .hidden-print visible="%%'ohj1s19d11vika'|belongs%%" nocache="true"} **HUOMIO!** [Olen laittanut sinulle sähköpostia otsikolla: Ohj1: täydennä d11 kuntoon tai ota yhteyttä]{.red}. Laitathan kuntoon tai otat yhteyttä! !!!}

Ohjelmointi 1 -kurssin ohjelmointikäytänteet

Ensisijaisesti tällä kurssilla pyritään käyttämään C#-ohjelmoinnin tyypillisiä käytänteitä. Seuraavassa joitakin pääkohtia, tarkemmin asiasta löytää alla olevista linkeistä.

1. Skandien käyttö nimeämisessä

Vältä skandien (å, ä, ö) käyttöä. Vaikka periaatteessa skandeja on mahdollista käyttää muuttujien, luokkien, tiedostojen jne. nimissä, on merkistöongelmien välttämiseksi varminta käyttää aakkosnumeerisia merkkejä ASCII-taulukon ensimmäisen 128 merkin joukosta (ks. asciitable.com).

2. Tiedostot ja luokat

  • tiedoston nimi sama kuin luokan nimi, tällöin DoxyGen dokumentin teko onnistuu ilman kikkailuja
  • luokan nimi alkaa aina isolla kirjaimella (ja siis myös tiedoston, esim. class Laivanupotus on tiedostossa Laivanupotus.cs)
  • Esimerkkejä luokkien nimistä:
Suomeksi: Laiva
Luokan nimenä oikein: Laiva
Väärin: laiva, LAIVA

Suomeksi: Sierpinskin kolmio
Luokan nimenä oikein: SierpinskinKolmio
Väärin: sierpinskinkolmio, sierpinskinKolmio, Sierpinskinkolmio, 
        Sierpinskin_Kolmio, SIERPINSKIN_KOLMIO, SIERPINSKINKOLMIO

3. Muuttujat

  • lokaalit muuttujat (myös parametrit) alkaa pienellä kirjaimella
  • attribuutit alkavat pienillä kirjaimilla
  • sanavälit osoitetaan vaihtamalla kirjain isoksi (camelCase)
Suomeksi: Pituus
Muuttujan nimenä oikein: pituus, l (niinkuin length)
Väärin: Pituus, PITUUS, p (liian monitulkintainen)

Suomeksi: Autoja jäljellä
Muuttujan nimenä oikein: autojaJaljella
Väärin: autoja_jaljella, autojajaljella,
        Autoja_Jäljellä, AutojaJäljellä,
        AutojaJaljella, ...

Suomeksi: Elämälaskuri
Muuttujan nimenä oikein: elamalaskuri
Väärin: Elamalaskuri, ElamaLaskuri, elämälaskuri,
        elämä_laskuri, ...

4. Vakiot

Tällä kurssilla vakiot kirjoitetaan suuraakkosin siten, että sanat erotetaan alaviivalla (_). Näin ne erottaa helposti muuttujien nimistä, jotka alkavat pienellä kirjaimella.

Esimerkki:

const int KUUKAUSIEN_LKM = 12;

5. Aliohjelmat, funktiot ja metodit

Aliohjelmien, funktioiden ja metodien nimet alkavat isolla kirjaimella (PascalCase)

Suomeksi: Piirrä kolmio
Aliohjelman nimenä oikein: PiirraKolmio
Väärin: piirraKolmio, piirräKolmio,
        PiirräKolmio, Piirrä_Kolmio,
        piirrä_kolmio, ...

6. Sulut ja välilyönnit ja tyhjät rivit

  • aliohjelmien loppusulun jälkeen kaksi tyhjää riviä

  • tyhjä rivi kun asiayhteys muuttuu

  • aloittava lohkosulku { omalla rivillään

  • lopettava lohkosulku } samassa sarakkeessa aloittavan lohkosulun kanssa

  • sisennyksessä käytettään välilyöntejä, 4/sisennystaso, ei TAB-merkkiä (erikoismerkit näet esim. Notepad++:ssa View –> Show symbol –> Show all characters)

  • aliohjelmakutsuissa aloittava kaarisulku ( kirjoitetaan kiinni aliohjelman nimeen:

     MontakoVapaata(ruudut);  // VÄÄRIN olisi: MontakoVapaata (ruudut);
  • kontrollirakenteiden ehdoissa aloittava kaarisulku kirjoitetaan irti kontrollirakenteen avainsanasta:

     if (arvo == 0)      // VÄÄRIN olisivat if(arvo == 0), tai if( arvo == 0 )
     while (summa < 100) // VÄÄRIN olisi: while(summa < 100)

7. Kommentointi

  • käytetään XML-muotoista kommentointia jotta saadaan dokumentaatio
  • mielellään testataan kaikki kohtuuvaivalla testattavissa olevat funktiot
  • tekijä- ja versiotieto tiedoston alkuun, esimerkiksi
using System;
using System.Collections.Generic;

/// @author  Antti-Jussi Lakanen, Martti Hyvönen
/// @version 22.12.2011
///
/// <summary>
/// Harjoitellaan vielä taulukoiden käyttöä.
/// </summary>
public class Arvosana
{
// ...

8. Saantimääreet

Kirjoitetaan näkyville kaikki saantimääreet.

  • Attribuuteille private
  • Metodeille private/protected/public sen mukaan mikä on tarkoituksenmukaista

8.1 Esimerkki

#

Please to interact with this component

using System;

/// @author  Vesa Lappalainen
/// @version 22.12.2011

/// 
/// Laivanupotuspeli.
/// 
public class Laivanupotus // Luokan nimi, siksi alkaa isolla
{ // aloittava sulku omalla rivillä
    private int laivojenMaara = 4;  // attribuutti, siksi alkaa pienellä, kirjoitetaan private

    /// 
    /// Lasketaan montako vapaata ruutua on jäljellä
    /// 
    /// taulukko ruuduista, kussakin
    /// ruudussa 0 = vapaa, muu numero = laivan numero.
    /// vapaiden ruutujen määrän
    ///  // yksikkötesti Comtestin avulla
    /// 
    ///    int[,] ruudut = {{1, 0, 2}, {0, 0, 3}};
    ///    Laivanupotus.MontakoVapaata(ruudut) === 3;
    ///    int[,] ruudut0 = {{1, 4, 2}, {5, 5, 3}};
    ///    Laivanupotus.MontakoVapaata(ruudut0) === 0;
    /// 
///
public static int MontakoVapaata(int[,] ruudut) // funktio alkaa isolla, parametri pienellä { int vapaita = 0; // lokaali muuttuja, aloitetaan pienellä foreach (int arvo in ruudut) { if (arvo == 0) vapaita++; // if:n jälkeen ja == ympärillä tyhjät, sulun jälkeen myös } return vapaita; } // loppusulku samassa sarakkeessa alkusulun kanssa, kaksi tyhjää riviä funktion jälkeen /// /// Lasketaan montako vapaata ruutua jäljellä /// /// ei käytössä /// public static void Main(string[] args) { int[,] ruudut = new int[10, 10]; ruudut[3, 3] = 1; int vapaita = MontakoVapaata(ruudut); // funktiokutsussa sulku kiinni funktion nimessä System.Console.WriteLine("Vapaita " + vapaita); } }

9. String vai string

Maailmalla suositus tuntuu olevan että muuttujat esitellään string ja kun kutsutaan staattista metodia, niin String eli

    public static void Main(string[] args)
    {
        string jono = "kissa";
        int i = jono.IndexOf('s');
        string tulostettava = String.Format("Paikka oli {0}", i);
        Console.WriteLine(tulostettava);
    }

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.