SuomiGameHUB

Maailma tarvitsee pelejä

Metodit ja funktiot

Metodien käyttö on oleellista ohjelmoinnissa, koska ne auttavat meitä tekemään koodista siistimpää ja helpommin hallittavaa vähentämällä toiston määrää. Jos esimerkiksi koodissamme on paljon samankaltaista toiminnallisuutta, voimme yksinkertaistaa sitä kokoamalla toistuvat osat metodeiksi.

Lohkot

Tarkastellaanpa vähän koodista löytyviä koodilohkoja (eli blokkeja). Lohkot on ympäröity aaltosuluilla {} ja niiden päältä löytyy niitä määrittelevä koodirivi. Koodissamme on nimiavaruuslohko (namespace) ja sen sisällä luokkalohko (class), tässä tapauksessa MainWindow.

namespace SGH_Esimerkki
{
    public sealed partial class MainWindow : Window
    {
    }
}

Luokan sisällä voimme määritellä metodeja. MainWindow-luokan sisältä löytyy jo kaksi metodia, MainWindow() ja myButton_Click(). Metodien ulkopuolelle voidaan myös määritellä globaaleja muuttujia ja näiden näkyvyyttä voidaan hallita käyttämällä avainsanoja kuten “public” tai “private”, josta puhumme lisää tulevaisuudessa.

Tietotyyppien muuntaminen

Muuttujien kanssa työskennellessämme kohtaamme usein tilanteita, joissa meidän täytyy muuntaa tietotyyppejä. Koodissamme saattaa olla tekstikenttiä, joiden arvot ovat merkkijonoja, mutta meidän täytyy käsitellä niitä kokonaislukuina. Tässä tapauksessa käytämme metodia nimeltään “TryParse”, joka yrittää muuntaa merkkijonon kokonaisluvuksi. Jos muunnos onnistuu, se palauttaa kokonaisluvun muuttujaan, joka on määritelty out-avainsanalla; muuten se palauttaa virheilmoituksen.

int.TryParse(luku1.Text, out int yksi);
int.TryParse(luku2.Text, out int kaksi);

Kun meillä on käytössämme tarvittavat muuttujat ja niiden arvot, voimme suorittaa erilaisia laskutoimituksia, kuten yhteenlaskua, kertolaskua tai vähennyslaskua. Tämän jälkeen voimme esittää tulokset käyttäjälle. Jos haluamme esimerkiksi näyttää tulokset eri riveillä ohjelman ikkunassa, voimme käyttää erikoismerkkejä kuten rivinvaihtoa (“\n”) merkkijonoissamme.

summa = yksi + kaksi;
tulo = yksi * kaksi;
erotus = yksi - kaksi;

tekstikentta.Text = 
    "\nsumma: " + summa.ToString() +
    "\ntulo: " + tulo.ToString() +
    "\nerotus: " + erotus.ToString();

Kapselointi metodien avulla

Tässä kohtaa metodit osoittavat arvonsa. Jos koodissamme on useita samankaltaisia laskutoimituksia tai muita toimintoja, emme halua kopioida ja liittää samoja koodirivejä uudestaan ja uudestaan. Sen sijaan voimme kapseloida toiminnallisuuden metodiin, jota voimme kutsua tarpeen mukaan. Näin koodista tulee paljon siistimpää ja helpompaa ylläpitää. Esimerkiksi, jos meillä on satoja laskutoimituksia, metodien avulla voimme vähentää koodin määrää huomattavasti. Samalla koodin luettavuus paranee, koska jokaisen laskutoimituksen logiikka on määritelty vain kerran, metodin sisällä.

Käytännössä, jos haluaisimme vaikka laskea useita lukujen summia, tulot ja erotukset, voisimme tehdä erillisen metodin näille laskutoimituksille ja kutsua sitä aina tarvittaessa. Tämä ei ainoastaan tee koodista tehokkaampaa, mutta myös selkeyttää sitä, mikä helpottaa myöhempää debuggausta ja mahdollistaa koodin jatkokehityksen sujuvammin.

Metodi voidaan määritellä esimerkiksi seuraavasti: `private void laskutoimitukset()`. Tämä metodi on nyt tyhjä ja voidaan täyttää halutulla koodilla. Jos meillä on jo valmista koodia, jonka haluamme siirtää tähän uuteen metodiin, voimme leikata sen ja liittää `laskutoimitukset`-metodin sisälle. Näin ollen metodi suorittaa yksinkertaisesti laskutoimituksen ykkösen ja kakkosen välillä.

private void myButton_Click(object sender, RoutedEventArgs e)
{
    tulo = laskutoimitukset(yksi, kaksi);
}

private int laskutoimitukset(int y, int k)
{
    int tulo = y * k;
    return tulo;
}

Kun haluamme kutsua luomaamme metodia, kirjoitamme `laskutoimitukset();`. Tämä komento käynnistää metodin, suorittaa sen koodin ja palaa takaisin siihen kohtaan, josta metodia kutsuttiin.

Jos käyttämiemme muuttujien, kuten `int yksi` ja `int kaksi`, määritelmät ovat metodien ulkopuolella ja ne ovat globaaleja muuttujia, ei niitä tarvitse määritellä uudelleen metodin sisällä. Jos ne kuitenkin ovat lokaaleja muuttujia, voidaan metodille antaa parametreja, jotka otetaan vastaan sulkeiden sisällä. Esimerkiksi, metodi voidaan muuttaa muotoon `private void laskutoimitukset(int y, int k)`. Tässä `y` ja `k` ovat parametreja ja ne saavat arvonsa silloin, kun metodia kutsutaan.

Avainsana “void” viittaa siihen, että metodi ei palauta arvoa. Jos kuitenkin haluaisimme, että metodi palauttaa jotain, voimme korvata `void`-sanan esimerkiksi `int`:llä, joka kertoo, että metodi palauttaa kokonaisluvun. Palautusarvo voidaan tallentaa muuttujaan kutsumisen yhteydessä: `int tulo = laskutoimitukset(yksi, kaksi);`.

Tämä on turvallisempi tapa käyttää metodeja, koska se ei muuta ohjelman globaaleja arvoja. Se palauttaa arvon, joka voidaan ottaa vastaan ja käyttää erikseen. Tämä vähentää virheiden riskiä, erityisesti suurissa projekteissa, joissa useat koodaajat työskentelevät yhtä aikaa. Jokainen koodaaja voi pyytää arvoa metodilta ja käyttää sitä omassa koodissaan ilman, että tämä vaikuttaa muihin osiin ohjelmaa.

Joten kun näet termejä kuten “funktio” tai “metodi”, ne viittaavat käytännössä samaan asiaan: koodinpätkään, joka suorittaa tietyn toiminnon ja mahdollisesti palauttaa arvon. Ero on vain, että proseduraalisissa kielissä (kuten C) puhutaan funktioista, ja olio-ohjelmointikielissä (kuten C#) puhutaan metodeista. Näiden käyttö tekee koodista jäsennellympää, helpommin ymmärrettävää ja ylläpidettävää ja antaa mahdollisuuden rakentaa monimutkaisempia ohjelmia järkevällä tavalla.

Edellinen osa: Toistolauseet.

Keskustelu

Aloita uusi keskustelu