5. Avaldise struktuur
Selle nädala praktikumis valmistume eksamiks. Tuleval esmaspäeval on võimalik proovida eksami alusosa ülesannete lahendamist. Seal tuleb lisaks automaadile avaldise puu peal harjutus. Seetõttu on oluline puu esitust harjutada.
- Puu stuktuur. Kõigepealt võite natuke mõelda, miks me esitame avaldist puu kujul ja mis on erinevad puu läbimise võimalused. Lisaks võib ka uurida Pythoni süntaksit. See on ka hea sissejuhatus Java AST lisatöö jaoks.
- RegexAnalyzer. Sellele sarnane ülesanne tuleb meil proovieksamil, aga oluline on aru saada ikka struktuuri läbimise põhimõttest, sest proovieksamil on võib-olla hulga asemel vaja luua Map või arvutada midagi hoopis muud. Kõik võib muutuda, aga põhimõtte jääb samaks!
- Rohkem puu ülesandeid. Iseseisvalt (või kui praktikumis jääb aega üle) võib ka uurida need harjutusülesanded, et oleks rohkem variante nähtud.
- Eksami alusosa formaadi kohta on meil veel eraldi leht, kuhu kogume ka näited eelmistest aastatest. Kõik harjutused on muidugi kasulikud, aga kui aega on vähe, siis selle lehe esimene ülesanne on alusosa harjutamiseks hea mõtte.
- Kodutöö tähtaeg on küll ülejärgmine nädal, aga selle esimene osa tasub kindlasti uurida enne proovieksamit, sest see on ka harjutus puu struktuuri peale.
Selle nädala eesmärk on juba väga fundamentaalne. Puu töötlemine rekursiooniga ei ole ainult niisama harjutus, vaid selles peitub kogu Tõde programmeerimise kohta! Me ei taha programmidesse suhtuda holistilise new-age lähenemisega, vaid süstemaatiliselt saame aru üksikosadest ja nende komponeerimisest. Süsteemi disaini jaoks on selline modulaarne mõtlemine väga kriitiline ja seda saab kõige paremini harjutada just puu ülesennete peal.
Võtame näiteks, kui on vaja töödelda järgmise avaldise süntaksipuud: keeruline + megakeeruline
. See ajab mind hulluks, kui näen lahendusi, kus hakatakse mõtlema, et mis nüüd saab, kui megakeerulises avaldises on viis jagamistehet? OMG, miks Sa üldse sinna vaatad?? Hoolitse siin liitmise eest! Meil hakkab nüüd üsna läbiv teema olema, et tahame iga tipu juures sellele vastav loogika seal implementeerida ja ainult seal. Kui on lisainfo vaja selleks, siis seda tuleb parameetrina kaasa anda!
Õige parameetritega abifunktsioonide väljamõtlemine on selle nädala kodutöö peamine väljakutse. Ideaalne oleks, kui proovid vähemalt natuke ise seda mõelda, aga kui jääd hätta, siis seda võib praktikumijuhendajate või sõprade käest küsida. Jällegi palun arvestada, et selle vajaliku abifunktsiooni väljamõtlemine on peamine programmidisaini element sellel ülesandel. Kui see on ette antud, siis ülejäänud on üsna mehhaaniline...