Otsustamine
Praeguseks oleme selgeks saanud elementaarmõisted, oskame arvutit sundida väljastama sõnumeid ja oskame teha nii, et arvuti küsiks ise kasutajalt, failist või lausa veebist andmeid. Oskame panna arvutit arvutama meie eest ja oskame salvestada info arvutimällu.
Ükski tänapäeva programm ilma otsustusvõimeta ei kvalifitseeru programmiks. See on üks olulisemaid tingimusi programmide juures üldse - ta peab olema nö "mõtlemisvõimeline", olema suuteline tegema otsuseid ja vastavalt otsustele ka tegutsema. Eelmise nädala teemad on kõik väga vajalikud teadmised, mida on tarvis programmi kirjutamiseks ja eriti mängu kirjutamiseks. Kuid sellisel sisend-väljund-muutuja tasemel programmi või mängu võib võrrelda pigem kivikirvega kui näiteks AngryBirds'ga. Seega, et jõuda selliste teadmisteni, et teha Angry Birdsi-taoline mäng, peame veel palju teooriat KOOS praktikaga omandama. See, kui hästi mõni mäng töötab, oleneb sellest, kui hea on olnud selle mängu programmeerija. Hea programmeerija aga kujuneb AINULT läbi tohutul hulgal programmeerimise, ükskõik kui väikesed või suured need programmid ka alguses ei oleks. Selle nädala kaks suurt põhiteemat ilma milleta ei valmi ükski normaalne programm ega sirgu ükski programmeerija, on tingimuslause ja tsükkel.
Aeg panna oma programmid tegema otsuseid.
Programm peab oskama vastavalt sisendile käituda erinevalt. Näiteks:
- Kui Juku valis ekraanilt õige aarde, siis tuleb tema skoorile üks pall juurde lisada.
- Kui Kati saab vigastada, tuleb tal üks elu maha võtta.
- Kui Jack sai vastasele pihta, tuleb teha plahvatuse häält.
- Kui otsitavat faili ei leita, siis tuleb anda veateade.
- Kui Mikk jookseb vastu kasti, siis kast haihtub vms.
Otsuste tegemiseks on eelnevalt vaja kontrollida tingimust. Ehk kõigepealt kontrollime, kas Jack sai vaenlasele pihta ja alles siis paneme vastava wav-faili mängima :)
Oluline on aru saada, et tingimuse kontrolli tulemus saab olla AINULT õige või vale (i.k true or false). Kas mingi asi on toimunud või ei ole toimunud?
Arvutile aga ei saa lihtsalt öelda, et hei, Jack sai vaenlasele pihta, tee plahvatuse häält! Arvuti on rauast ja oskab aru saada vaid kahendkoodist ehk siis ainult arvudest :(
Toon sulle mõned näited, millistele küsimustele saab arvuti vastata:
- Kas kaks muutujat on võrdsed?
- Kas üks muutuja on teisest suurem?
- Kas üks muutuja on teisest väiksem?
Lisaks, ei ole kahe muutuja omavaheline võrdlemine kah nii sama. Muutujad, mida omavahel võrreldakse, peavad olema ühte tüüpi. Seega, peab programmeerija kõik vaimustavad vaenlased ja supersõdalaste kõik liigutused ümber kodeerima arvudeks, mida saab omavahel võrrelda ja alles seejärel saab teha otsuseid. Seega võiksime Jacki loo ümber tõlkida umbes nii:
Sellist ühes või teises suunas otsuste tegemist ja liikumist vastavalt tingimuse kontrollile nimetatakse programmeerimises ka hargnemiseks. Programm otsustab, millist haru pidi edasi minnakse, kui tingimus on üks, keerab näiteks vasakule, kui mitte, keerab paremale.
