Tämä kurssi on jo päättynyt.

Sanasto

Tämä sivu selittää ohjelmointitermien merkityksiä lyhyesti ja Ohjelmointi 1 -kurssin näkökulmaa painottaen.

Selittelyjä

Useilla termeistä on muitakin merkityksiä sekä ohjelmoinnin ulkopuolella että muissa ohjelmointiyhteyksissä. Tällä sivulla keskitytään O1-kurssin kannalta oleellisimpiin merkityksiin. Määritelmät ovat epämuodollisia ja osin epätarkkoja mutta kurssimme tarpeisiin riittäviä.

Annetut englanninkieliset lähimmät vastineet eivät aina tarkoita prikulleen samaa kuin suomenkieliset. Tästä sivusta on myös englanninkielinen laitos.

Voit katsoa myös Scala-kielen virallisen sanaston, jota emme tosin kurssilla noudata pilkuntarkasti.

Puuttuuko jotain?

Etsitkö tältä sivulta jotain, mitä täällä ei ole? Ilmoita minulle: juha.sorva@aalto.fi.

Selityksiä

abstrakti luokka

abstract class luokka, jolle pätee: 1) siinä voi olla (myös) abstrakteja metodeja ja abstrakteja muuttujia; 2) siitä ei voi luoda ilmentymiä kuin aliluokkiensa kautta; 3) muut luokat voivat periä sen; 4) (Scalassa:) se voi välittää konstruktoriparametreja yläkäsitteelleen (toisin kuin piirreluokka) ¶ Ks. luku 7.5.

abstrakti metodi

abstract method metodi, jolle on määritelty puumerkki muttei runkoa ¶ Ks. luvut 7.3 ja 7.5. Abstrakteja metodeita voi olla piirreluokissa ja abstrakteissa luokissa eli sellaisissa luokissa, joista ei suoraan luoda ilmentymiä.

abstrakti muuttuja

abstract variable ilmentymämuuttuja, jolle on määritelty tietotyyppi muttei arvoa ¶ Ks. luku 7.3. Abstrakteja muuttujia voi olla piirreluokissa ja abstrakteissa luokissa eli sellaisissa luokissa, joista ei suoraan luoda ilmentymiä.

abstraktio

abstraction yleistys, käsitteellistys; malli, josta on jätetty pois epäoleellisia yksityiskohtia ¶ Ohjelmointi on abstraktioiden määrittelemistä ja hyödyntämistä; ks. esim. luvut 1.6, 2.1, 2.3, 3.2, 6.1, 6.3, 7.1, 7.3 ja 9.3. Abstraktioita on erilaisia. Esimerkiksi parametrin lisääminen funktiolle tai luokalle abstrahoi pois ratkaistavan ongelman yksittäiset käyttötapaukset ja tekee ratkaisusta yleisemmän. Rajapinta voi taas abstrahoida pois ongelman ratkaisutavan eli toteutuksen; ks. abstraktiotaso.

abstraktiotaso

level of abstraction (tällä kurssilla erityisesti:) ratkaisun riippumattomuus toteutustavasta ¶ Yleiskäyttöiset ohjelmointityökalut kuten while-silmukka ja foldLeft-metodi ovat abstrakteja siinä mielessä, että niillä voi ratkaista monia erilaisia ongelmia; ne ovat on abstraktimpia käyttötapausten suhteen kuin vaikkapa nimenomaisesti kokoelman koon palauttava size-metodi. Kuitenkin käyttäjänsä näkökulmasta size on korkeammalla abstraktiotasolla. Sen kutsujan ei tarvitse tietää miten se on toteutettu (silmukalla, foldLeftillä vai jotenkin muuten); se on abstraktimpi toteutustavan suhteen kuin mainitut yleiskäyttöisemmät työkalut. Termiä käytetään näin mm. luvuissa 6.3, 7.1 ja 9.1. Ks. myös korkean tason kieli ja matalan tason kieli.

AI

AI artificial intelligence eli tekoäly

aihealue

domain ongelmakenttä tai aihepiiri, jota ohjelma käsittelee ¶ Esimerkiksi tietokonepelin aihealueeseen kuuluu pelimaailma sääntöineen. Ks. myös malli.

ajaa

run 1) määrätä tietokone toimimaan tietyn ohjelman mukaisesti; 2) toimia ohjelman määräämällä tavalla, suorittaa ¶ Vrt. "Aurora ajoi kirjoittamansa ohjelman ja huomasi tulosteesta, että ohjelmassa oli bugi." ja "Tietokone ajaa ohjelman vaihe vaiheelta käskyjä noudattaen."

ajonaikainen tyyppi

runtime type sama kuin dynaaminen tyyppi

ajonaikainen virhe

runtime error virhe, joka ilmenee (vasta) ohjelmaa ajettaessa, yleensä siksi, että jonkin toimenpiteen suorittaminen epäonnistuu ¶ Ks. luvut 1.8, 4.2 ja 4.3 ja vrt. käännösaikainen virhe ja looginen virhe. Esimerkiksi nollalla jakaminen ja tietokoneen vapaan muistin loppuminen aiheuttavat ajonaikaisia virheitä. Ellei ajonaikaista virhettä ehkäistä tai käsitellä, se johtaa tyypillisesti ohjelma-ajon "kaatumiseen" eli keskeytymiseen.

ajuri

driver ohjelma, jonka tehtävänä on ohjata tietyn oheislaitteen, kuten hiiren tai näytönohjaimen, käyttöä ¶ Käyttöjärjestelmä käyttää oheislaitteita ajurien avulla.

algoritmi

algorithm vaiheittainen ratkaisumenetelmä jollekin ongelmalle ¶ Ks. luku 1.2. Algoritmeja voi toteuttaa ohjelmiksi eri tavoin, esim. eri ohjelmointikieliä käyttäen. Algoritmit eivät silti väistämättä liity tietokoneisiin tai ohjelmointiin; esimerkiksi tapa, jolla lukuja jaetaan jakokulmassa, on algoritmi (joka voidaan kyllä toteuttaa tietokoneohjelmaksikin).

aliluokka

subclass, derived class luokka, joka perii jonkin toisen luokan ja edustaa yliluokkansa kuvaaman käsitteen alakäsitettä ¶ Aliluokka "perii" yliluokan ominaisuudet; ks. luku 7.5. Sen ilmentymät ovat paitsi aliluokan itsensä tyyppisiä, myös yliluokan tyyppisiä. Aliluokka määritellään mm. Scalassa kirjaamalla aliluokan määrittelyyn merkintä välittömästä yliluokasta; aliluokalle voi Scalassa kirjata vain yhden välittömän yliluokan. Vrt. piirreluokan liittäminen ja ks. moniperintä.

aliohjelma

subprogram sama kuin funktio

alkio

element kokoelman tai vastaavan tietorakenteen sisältämä arvo ¶ Ks. luku 1.5.

alkiokokoelma

ks. kokoelma

ankkuri

anchor (O1Libraryssä ja joissain muissakin yhteyksissä:) kuvan kohta, josta se kiinnitetään asemoitaessa kuvia suhteessa toisiinsa ¶ Kuvan ankkurina voi olla esimerkiksi sen keskikohta tai jokin kulmista. Näin voidaan vaikkapa asemoida "tämän kuvan ankkuri tuon kuvan yläreunan keskelle". O1Library-kirjastossa ankkureita kuvaa luokka Anchor. Ks. luku 2.5 ja tuon luokan dokumentaatio.

Any

Any kaikkien Scala-luokkien yliluokka ¶ Ks. luku 7.5.

AnyRef

AnyRef useimpien Scala-luokkien yliluokka ¶ Ks. luku 7.5. Scala-ohjelmaa suorittava virtuaalikone käsittelee AnyRef-olioita viittausten kautta; vrt. AnyVal. AnyRef on Anyn välitön aliluokka. Ks. myös Object.

AnyVal

AnyVal eräiden tehokkuusoptimoitujen Scala-luokkien yliluokka ¶ Ks. luku 7.5 (ja 3.5). Scala-ohjelmaa suorittava virtuaalikone ei käsittele AnyVal-olioita viittausten kautta; vrt. AnyRef. AnyVal on Anyn välitön aliluokka.

API

API application programming interface eli ohjelmointirajapinta

apply

apply (Scala-kielessä:) erikoisnimi, joka voidaan antaa metodille, jotta tuota metodia voisi kutsua mainitsematta metodin nimeä laisinkaan ¶ Ks. luvut 5.3 ja 6.2. Jos oliolla on apply-niminen metodi, niin se toimii "olion oletusmetodina": olio(parametrit) on lyhennysmerkintä kutsulle olio.apply(parametrit).

argumentti

argument 1) parametrilauseke; 2) parametriarvo ¶ Sanoja "parametri" ja "argumentti" käytetään monesti sekaisin. On kohtalaisen yleistä käyttää sanaa "argumentti", kun funktiolle välitettävää tietoa tarkastellaan funktion itsensä ulkopuolelta (esimerkiksi funktiokutsulausekkeessa), ja sanaa "parametri", kun funktion vastaanottamia tietoja tarkastellaan funktion sisällä (erityisesti: parametrimuuttujista puhuttaessa); joidenkin mielestä tuo on ainoa oikea merkitys. Tämän kurssin materiaalissa on vältetty "argumentti"-termiä.

arvo

value 1) "yksittäinen ohjelman käsittelemä tiedonjyvänen" eli lausekkeen evaluoimisen tulos, jota ei voi enää evaluoida yksinkertaisemmaksi; 2) hakurakenteen sisältämän avain–arvo-parin toinen osa, joka voidaan hakea avaimen perusteella ¶ Esimerkiksi Scala-kielisen aritmeettisen lausekkeen 1 + 1 arvo on kokonaisluku kaksi (ks. luku 1.3), funktiokutsun min(10, 5) arvo on luku viisi (ks. luku 1.6) ja lausekkeen Buffer(10, 2, 3) arvo on viittaus erääseen puskuriin (ks. luku 1.5). Termiä "arvo" käytetään tällä kurssilla hieman eri tavoin kuin osassa Scala-kieltä hyödyntävästä ohjelmointikirjallisuudesta, jossa arvoiksi sanotaan mitä tahansa olioita.

arvon läpinäkyvyys

referential transparency lausekkeen ominaisuus, jolla tarkoitetaan, että lausekkeen voi yhtä hyvin korvata sen arvolla muuttamatta ohjelman merkitystä ¶ Ei siis ole ohjelman tuottaman tuloksen kannalta merkityksellistä, evaluoidaanko arvoltaan läpinäkyvä lauseke kerran, useasti vai ei kertaakaan, kunhan lausekkeen arvo saadaan selville. Arvon läpinäkyvyys edellyttää, että lausekkeessa kutsutaan vain vaikutuksettomia ja muutenkin puhtaita funktioita. Tämä ominaisuus voi tehdä ohjelmista helpommin luettavia, muokattavia ja tehokkaita ja on keskeinen varsinkin funktionaalisessa ohjelmoinnin. Ks. luku 11.2.

askeltaja

stepper muuttuja, jota käytetään pitämään kirjaa arvosta, joka on viimeisin tietyssä etukäteen tunnetussa arvojen sarjassa ¶ Yksi muuttujien rooleista. Ks. luvut 3.1 ja 5.5. Askeltaja voi esimerkiksi pitää kirjaa kasvavasta järjestysnumerosta: 0, 1, 2 jne.

avain

key tieto, jonka perusteella voi paikantaa tai selvittää toisen tieto; erityisesti: tieto, jonka perusteella hakurakenteesta voi poimia arvon ¶ Ks. luku 9.2 ja vrt. indeksi.

avain–arvo-pari

key–value pair avaimen ja arvon muodostama pari ¶ Avain–arvo-pareja käytetään hakurakenteiden alkioina; ks. luku 9.2.

avoin luokka

open class luokka, jolle voi määritellä välittömiä alatyyppejä vapaasti ¶ Scalassa luokka avataan sanalla open. Piirreluokat ja abstraktit luokat ovat automaattisesti avoimia, mutta tavalliset luokat eivät ilman erillistä merkintää ole. Ks. luku 7.5. Vrt. suljettu luokka ja ks. myös final.

bitti

b(inary dig)it digitaalisen tiedon perusyksikkö, jolla voi olla yksi kahdesta arvosta ¶ Usein bitin kahteen arvoon viitataan numeroilla 0 ja 1; biteistä voi näin muodostaa binaarilukuja. Bittejä järjestelmällisesti yhdistelemällä voidaan kuvata erilaista tietoa esimerkiksi tietokoneessa; ks. luku 5.4.

Boolean

Boolean totuusarvoja Scala-ohjelmissa kuvaava tietotyyppi ¶ Boolean-tyyppisiä arvoja on vain kaksi: tosi ja epätosi, joita kuvaavat Scalassa literaalit true ja false. Ks. luku 3.3; ks. myös vertailuoperaattori ja logiikkaoperaattori.

bugi

bug virhe ¶ Sanaa käytetään erityisen usein toimintavirheistä, jotka ilmenevät ohjelmaa ajettaessa, eli ajonaikaisista ja loogisista virheistä.

build

build valmistella ohjelma ajamista tai käyttöönottoa varten ¶ Tämä on lavea ja epämääräinen termi, jolla ei ole vakiintunutta suomennosta; se voi viitata monenlaisiin automaattisiin valmisteluvaiheisiin. Monissa yhteyksissä kääntäminen on keskeinen ohjelman "rakentamisen" vaihe; muita vaiheita voivat olla esimerkiksi automaattinen testaus ja dokumenttien generointi koodin perusteella. O1-kurssilla build tarkoittaa käytännössä ohjelman kääntämistä.

by name

(call-)by-name tapa välittää parametreja funktiolle siten, että parametrilauseketta ei evaluoida ennen sen välittämistä funktiolle vaan aina kun tai jos sen arvoa funktion suorituksen aikana tarvitaan ¶ Ks. luku 7.2. Jos by name -parametrin arvoa ei funktion suorituksen aikana kaikissa tapauksissa käytetä lainkaan, voi parametria sanoa väljästi evaluoiduksi. By name -parametrin evaluointi ei ole laiskaa, vaan parametrilauseke evaluoidaan aina käytettäessä uudestaan. Scalassa tämä on toinen kahdesta parametrinvälitystavasta; vrt. by value. Ks. myös by need.

by need

(call-)by-need tapa välittää parametreja funktiolle siten, että parametrilauseketta ei evaluoida ennen sen välittämistä funktiolle vaan laiskasti, korkeintaan kerran: parametrilauseke evaluoidaan ensimmäisellä kerralla kun (tai jos) kutsuttu funktio sen arvoa tarvitsee, minkä jälkeen arvo pidetään tallessa eikä lauseketta enää evaluoida uudelleen ¶ Muistuttaa by name-parametreja mutta eroaa niistä siten, ettei parametrilauseketta evaluoida toistuvasti; parametrimuuttuja on siis laiska. Suora tuki by need -parametreille on melko harvassa ohjelmointikielessä, kuuluisimmin Haskellissa. Scalassa vastaavan toiminnan saa tallentamalla by name -parametrin arvon paikalliseen muuttujaan.

by reference

(call-)by-reference tapa välittää parametreja funktiolle siten, että kutsuttu funktio voi käsitellä kutsuvan koodin muuttujaa (eikä vain vastaanota arvoa muuttujasta tai muualta; vrt. by value) ¶ Tämä on call-by-reference-termin alkuperäinen ja monen mielestä ainoa oikea merkitys. Tällaisia by reference -parametreja on vain joissain ohjelmointikielissä, eikä niitä esiinny O1-kurssilla tai Scalassa. Nykyään joidenkin puheessa tämä termi tarkoittaa mitä tahansa parametria, jonka arvo on viittaus (eli viittauksen käyttöä by value -parametrina). Vaikka tuo toinen merkitys on monen mielestä termin virhekäyttöä, on se yleistynyt. Käytännössä voi olla epäselvää, mitä kukin termillä tarkoittaa.

by value

(call-)by-value tapa välittää parametreja funktiolle siten, että parametrilauseke evaluoidaan hanakasti eli jo etukäteen ennen funktiokutsun alkua, minkä jälkeen lausekkeen arvo välitetään kutsutulle funktiolle ¶ Scalassa kuten monessa muussakin ohjelmointikielessä by value on oletusarvoinen ja yleisin tapa välittää funktiolle parametreja; sen vaihtoehto on by name.

case

case Scalan varattu sana, jota käytetään mm. 1) match-käskyn sisällä kunkin mahdollisen tapauksen eli hahmon alussa; 2) tapausluokan määrittelyn alussa ¶ Ks. luvut 4.3 ja 4.4.

catch

catch (Scala-kielessä:) poikkeustenkäsittelyssä käytetty varattu sana, jolla aloitetaan try-lohkon jälkeinen toinen lohko, siinä tapauksessa, että try-lohkoa suoritettaessa tapahtui virhe ¶ catch-lohko suoritetaan try-lohkon jälkeen mutta mahdollista finally-lohkoa ennen.

debugata

debug etsiä ja korjata virheitä ohjelmasta; erityisesti: etsiä ajonaikaisia tai loogisia virheitä

debuggeri

debugger apuohjelma, jonka avulla ohjelmoija voi tutkia ohjelman suoritusta vaiheittain samalla tarkastellen tietokoneen muistin sisältöä ¶ Debuggeria voi käyttää debugatessa tai muusta syystä ohjelmaan perehtyessä. Aiheesta on kurssimateriaalissa erillinen sivu.

deklaratiivinen ohjelmointi

declarative programming yleinen ohjelmointiparadigma, jossa ohjelman mielletään muodostuvan ongelman ratkaisemiseen tarvittavista määritelmistä, säännöistä, rajoitteista (tms.) eikä peräkkäisten käskyjen sarjoista kuten imperatiivisessa ohjelmoinnissa ¶ Ks. luku 11.2. Deklaratiiviseen paradigmaan monesti luetaan erilaisia toisistaan paljonkin poikkeavia ohjelmointitapoja. Funktionaalinen ohjelmointi lienee deklaratiivisen ohjelmoinnin merkittävin aliparadigma.

dialogi(-ikkuna)

dialog (box) eräänlainen GUI-elementti; ikkuna, joka näytetään käyttäjälle väliaikaisesti ja jota käytetään käyttäjän ja ohjelman väliseen "vuoropuheluun" ¶ Ks. luku 12.4. Monissa sovelluksissa on suurempi pääikkuna, jonka oheen avataan väliaikaisesti erilaisia pienempiä dialogeja.

dokumentaatio

documentation asiakirja tai sellaisten kokoelma, joka kuvailee ohjelmaa siihen perehtyvälle ihmiselle ¶ Ohjelman osien rajapinnat on tapana kuvata laatimalla niistä dokumentaatiota; ks. luvut 3.2 ja 3.5. Ks. myös Scaladoc.

dokumentaatiokommentti

doc(umentation) comment erityisellä tavalla muotoiltu kommentti, jonka perusteella dokumentaatiota voidaan tuottaa osittain automaattisesti ¶ Ks. luku 3.2. Scala-ohjelman ja siihen upotettujen dokumentaatiokommentien perusteella voidaan luoda dokumentaatiota Scaladoc-työkalulla.

domain

domain sama kuin aihealue ¶ Sanalla viitataan muissa yhteyksissä usein myös verkkotunnuksiin kuten aalto.fi, mikä on ihan eri asia.

Double

Double (mm. Scala-kielessä:) tietotyyppi, jolla kuvataan desimaalilukuja liukulukuina ¶ Ks. luvut 1.3 ja 5.4. Vastaavalla tietotyypillä on samankaltainen nimi useassa muussakin ohjelmointikielessä; nimi tulee ilmaisusta double-precision floating-point number.

DRY

DRY periaate, jonka mukaan kukin ohjelmistoon liittyvä seikka tulee olla määritelty vain kerran yhdessä paikassa ¶ Sanoista don’t repeat yourself. Lähdekoodin laatimiseen sovellettuna DRY-periaate kannustaa välttämään toisteisuutta koodissa, ja periaatteen noudattaminen tekee usein ohjelmasta helpomman muokata ja lukea. Ks. esim. luvut 1.4, 5.1, 7.3 ja 9.3. Vastaava periaate on esitetty ohjelmoijien keskuudessa myös monella muulla nimellä. Vastakohta: WETWET.

DSL

DSL domain-specific language eli täsmäkieli

dynaaminen

dynamic ohjelma-ajoon tai ohjelman suorittamisen tuottamaan prosessiin liittyvä, ohjelmaa ajaessa määrittyvä; ei-staattinen, muuttuva ¶ Tietokoneohjelmalla voi sanoa olevan kaksi "olomuotoa", staattinen ja dynaaminen; ks. esim. luvut 1.2 ja 2.1. Ohjelman dynaamisiin piirteisiin voi vaikuttaa esimerkiksi ohjelman käyttäjän antama syöte. Ks. myös dynaaminen tyyppi.

dynaaminen ohjelmointi

dynamic programming ohjelmien toteuttamistekniikka, jossa pienempien osaongelmien ratkaisuja tallennetaan muistiin, jotta niitä voidaan tehokkaasti hyödyntää (kenties useita kertoja) isompien osaongelmien ratkaisuissa ¶ Tästä tekniikasta on yksi pieni esimerkki luvussa 12.2. Sanalla "dynaaminen" ei ole tässä yhteydessä ihan sama merkitys kuin muissa kurssilla esiintyvissä yhteyksissä. Sana on aikanaan valittu tämän tekniikan nimeen osin siksi, että se kuulostaa hienolta.

dynaaminen sidonta

dynamic binding, dynamic dispatch käytäntö, jossa vasta ohjelma-ajon aikana lyödään ajonaikaisen tiedon perusteella lukkoon, mitkä funktiot suoritetaan ¶ Olio-ohjelmoinnissa dynaaminen sidonta ilmenee muun muassa siten, että vasta metodikutsua käynnistettäessä tehdään kohdeolion dynaamisen tyypin perusteella päätös siitä, mikä metoditoteutus suoritetaan; päätökseen vaikuttaa siis se, minkä aliluokan olio on viestiä vastaanottamassa. Ks. luku 7.3.

dynaaminen tyyppi

runtime type, dynamic type arvon tyyppi ¶ Määrittyy dynaamisesti ohjelma-ajon aikana. Staattiselta tyypiltään tietynlaisen lausekkeen tai muuttujan arvolla voi olla mikä tahansa sellainen dynaaminen tyyppi, joka on staattisen tyypin kanssa yhteensopiva; ks. luku 7.3.

dynaamisesti tyypitetty

dynamically typed (ohjelmointikielestä:) tyyppijärjestelmältään sellainen, että lähdekoodin osille ei määritetä eri tyyppejä staattisesti vaan ainoastaan arvojen dynaamiset tyypit tarkastetaan (ohjelma-ajon aikana) ¶ Esimerkiksi muuttujilla ei siis dynaamisesti tyypitetyssä kielessä ole eri tyyppejä, vaan niihin voi sijoittaa mitä tahansa arvoja. Vrt. staattisesti tyypitetty. Dynaamisesti tyypitettyjä ohjelmointikieliä ovat esimerkiksi Python, JavaScript ja Ruby. Scala ei varsinaisesti ole dynaamisesti tyypitetty, mutta taipuu myös sellaiseen käyttöön.

Eclipse

Eclipse eräs ohjelmointiympäristö, IDE ¶ Eclipseä käytetiin O1:n varhaisemmissa versioissa.

editori

editor sovellusohjelma tekstin muokkaamiseen

ehdollinen operaattori

short-circuited operator logiikkaoperaattori, jonka jälkimmäistä operandia ei evaluoida, jos loogisen operaation tulos määrittyy jo ensimmäisen operandin perusteella ¶ Ks. luku 5.1. Ehdollisen operaattorin evaluointi on siis väljää.

eksplisiittinen

explicit nimenomaisesti sanottu, selvästi ilmoitettu; ohjelmakoodiin nimenomaisesti kirjattu ¶ Vastakohta: implisiittinen.

elementti

element 1) alkio; 2) GUI-elementti

enum

enum varattu sana, jolla mm. Scalassa määritellään luetelma

ensimmäisen asteen funktio

first-order function funktio, joka ei ole korkeamman asteen funktio

evaluoida

evaluate määrittää lausekkeen arvo ¶ Ks. esim. luku 1.3. Lausekkeen evaluoimiseksi tarvittavat toimenpiteet riippuvat lausekkeesta. Esimerkiksi aritmeettisen lausekkeen kuten 1 + 1 evaluoiminen vaatii laskutoimituksen tekemistä, kun taas muuttujan nimen muodostama lauseke evaluoidaan noutamalla arvo nimetystä muuttujasta. Funktiokutsulauseke evaluoidaan suorittamalla kyseinen funktio; tällaisen lausekkeen arvo on funktion palautusarvo. Evaluointi voi olla tiukkaa tai väljää.

evaluoimaton parametri

(call-)by-name parameter parametri, joka välitetään funktiolle by name -käytännöllä

evaluointialue

evaluation area tietokoneen muistin osa (kehyksen sisällä), jota käytetään apuna lausekkeita evaluoitaessa ¶ Ks. esim. luvut 1.3 ja 1.7. Tämä on lähinnä tässä kurssimateriaalissa käytetty termi. Evaluointialue on keskeinen kurssimateriaaliin upotetuissa ohjelman suorittamista kuvaavissa animaatioissa; se on graafinen yksinkertaistus virtuaalikoneen toiminnasta.

final

final määre, joka 1) luokan alkuun kirjattuna kokonaan estää periytymisen tuosta luokasta; 2) metodin alkuun kirjattuna estää tuon metodin korvaamisen ¶ Ks. luku 7.5 ja vrt. suljetun luokan määrittelevä sealed sekä avoimen luokan määrittelevä open.

finally

finally poikkeustenkäsittelyssä käytetty varattu sana, jolla aloitetaan try-lohkon jälkeinen toinen lohko, joka suoritetaan try-lohkon (ja mahdollisen catch-lohkon) jälkeen riippumatta siitä, tapahtuiko try-lohkoa suoritettaessa aikana virhettä vai ei.

for-silmukka

for loop silmukka, joka on muodostettu for-avainsanaa käyttäen ¶ O1-kurssilla esiintyvät for-silmukat ovat fordo-silmukoita, jotka käyvät läpi annetun kokoelman ja toistavat tiettyä toimenpidettä kunkin tuon kokoelman alkion kohdalla; ks. luvut 5.5 ja 5.6. Monesti for-silmukoilla käydään läpi tiukasti evaluoituja kokoelmia, jolloin toistokertojen lukumäärä ja läpikäytävät alkiot tunnetaan toiston alkaessa; kuitenkin on mahdollista käsitellä aivan samoin myös väljästi evaluoituja kokoelmia. fordo-silmukoiden lisäksi on foryield-silmukoita, ja Scalan for-käsky on muutenkin monipuolinen; lisää aiheesta kerrotaan toisilla ohjelmointikursseilla ja muissa lähteissä, ja hieman on myös Scalaa kootusti -sivullamme.

full stack

full stack ks. solution stack

funktio

function aliohjelma; ohjelman osa, joka huolehtii tietystä tehtävästä ja joka voidaan määrätä suoritettavaksi kutsumalla sitä ¶ Ks. luvut 1.6, 1.7 ja 1.8. Funktio määritellään kirjaamalla ohjelmakoodiin sen puumerkki ja runko. Kun funktio on määritelty, sitä voi kutsua, jolloin sen ohjelmakoodi suoritetaan. Mm. Scala-kielessä funktiot voivat olla vaikutuksellisia tai vaikutuksettomia. Metodit ovat olioihin liitettyjä funktioita. Ks. myös korkeamman asteen funktio ja nimetön funktio.

funktiokutsu

function call 1) lauseke, joka evaluoidaan suorittamalla tietyn funktion ohjelmakoodi; 2) tällaisen lausekkeen evaluoimisesta syntyvä toiminta; funktion koodin suorittaminen ¶ Ks. luvut 1.6 ja 1.7. Monille funktioille välitetään parametreja; parametrilausekkeet kirjataan funktiokutsulausekkeeseen. Kun funktiokutsu suoritetaan, sen tarpeisiin luodaan (tavallisesti) kehys ja funktion rungon sisältämät käskyt suoritetaan. Funktiokutsulausekkeen arvo on funktion koodin suorittamisen tuottama palautusarvo. Scala-ohjelmien funktiot palauttavat aina jonkin arvon, joskin palautusarvo voi olla vain Unit merkkinä siitä, ettei merkityksellistä palautusarvoa ole.

funktioliteraali

function literal literaali, joka määrittelee nimettömän funktion ¶ Scala tarjoaa useita tapoja kirjoittaa funktioliteraaleja; ks. luku 6.2. Tunnetaan myös nimellä lambdafunktio.

funktion runko

function body funktion määrittelyn se osa, joka määrittelee, mitkä käskyt suoritetaan, kun funktiota kutsutaan ¶ Ks. luku 1.7. Scala-koodissa funktion runko kirjoitetaan funktion puumerkin ja yhtäsuuruusmerkin perään.

funktionaalinen ohjelmointi

functional programming ohjelmointiparadigma, joka perustuu vaikutuksettomiin funktioihin ja muuttumattomaan tietoon ja jossa tyypillisesti käytetään runsaasti korkeamman asteen funktioita ¶ Ks. luku 11.2 ja vrt. imperatiivinen ohjelmointi. Funktionaalinen ohjelmointi on keskeinen deklaratiivisen ohjelmoinnin muoto.

globaali muuttuja

global variable Muuttuja, joka on näkyvissä kautta koko ohjelman. ¶ Tällä termillä viitataan monesti vain muuttujiin, jotka on määritelty luokkien ja olioiden ulkopuolella (vaikkakin esimerkiksi olion jäsenmuuttujat voivat olla julkisia). Globaalien muuttujien perusteettomasta käytöstä syntyy helposti spagettikoodia.

graafinen käyttöliittymä

graphical user interface käyttöliittymä, joka perustuu pelkkien kirjoitusmerkkien lisäksi myös graafisiin elementteihin kuten ikkunoihin ja nappuloihin ¶ Ks. luvut 2.7, 3.1 ja 12.4. Graafisiin käyttöliittymiin viitataan suomeksikin usein lyhenteellä GUI. Graafiset käyttöliittymät ovat nykyään hyvin yleisiä, ja aivan erityisen yleisiä ne ovat sellaisissa sovellusohjelmissa, joiden käyttäjät eivät itse ole ohjelmoijia. Ks. myös komentorivi.

GUI

GUI graphical user interface eli graafinen käyttöliittymä

GUI-elementti

GUI element graafisen käyttöliittymän osa ¶ Ks. GUI-komponentti.

GUI-komponentti

GUI component graafisen käyttöliittymän osa; erityisesti: sellainen graafisen käyttöliittymän osa, joka on sijoitettu ikkunan sisälle ¶ Esimerkiksi nappulat ja tekstikentät ovat GUI-komponentteja. GUI-elementillä tarkoitetaan usein samaa, mutta joissain yhteyksissä komponenteiksi kutsutaan vain käyttöliittymäikkunan varsinaisen sisällön muodostavia osia (ei esim. dialogeja ja muita ikkunoita), kun taas "elementti"-sanalla on yleisempi merkitys.

hahmonsovitus

pattern matching ohjelmointitekniikka, jossa annetun lausekkeen arvoa verrataan hahmoihin eli kuvauksiin siitä, millainen tuon arvon tyyppi, rakenne tai muu ominaisuus voi olla ¶ Mikäli lausekkeen arvo sopii tiettyyn hahmoon, suoritetaan tuota hahmoa vastaava koodi. Kaikki ohjelmointikielet eivät tue hahmonsovitusta, mutta melko monet tukevat ainakin jossain määrin. Scalassa yksi hahmonsovituksen keskeisistä työkaluista on match-käsky; ks. myös case.

hakurakenne

map, dictionary kokoelma, jonka alkiot ovat avain–arvo-pareja ja josta voi poimia arvon käyttämällä tuon arvon yksiselitteisesti osoittavaa avainta ¶ Ks. luvut 9.2 ja 10.1. Hakurakenteita on (esim. Scalassa) sekä muuttuvatilaisia että muuttumattomia. Hakurakenteista käytetään monia muitakin nimiä kuten "sanakirja", "assosiatiivinen taulukko" ja "mäppi".

hanakka

eager tiukka ja lausekkeet aikaisessa vaiheessa evaluoiva ¶ Hanakka evaluointi on laiskan evaluoinnin vastakohta ja eroaa merkittävästi muustakin väljästä evaluoinnista. Scalassa kuten monessa muussakin ohjelmointikielessä lausekkeiden evaluointi on oletusarvoisesti hanakkaa: muuttujat eivät ole laiskoja ellei toisin määritetä, ja niiden saamat arvot evaluoidaan heti sijoituskäskyn yhteydessä eikä vasta sitten, kun tai jos arvoa myöhemmin tarvitaan. Vastaavasti tavalliset (eli by name) parametrit evaluoidaan hanakasti jo ennen funktiokutsun alkua ja riippumatta siitä, käyttääkö funktio todella niiden arvoa.

heikko tekoäly

weak AI tekoäly, joka toimii kapeaksi rajatulla erikoisalueella ¶ Tarkoittaa melkein samaa kuin suppea tekoäly; termillä saatetaan lisäksi korostaa eroa vahvaan tekoälyyn, jolla on tietoisuus.

hierarkia

hierarchy ks. tyyppihierarkia

IDE

IDE ohjelmoijan avuksi laadittu apuohjelma, joka kokoaa yhteen erilaisia ohjelmoijan työkaluja kuten editorin, kääntäjän, virtuaalikoneen tms. ¶ Sanoista integrated development environment. Esimerkiksi kurssilla käytetty IntelliJ on IDE. Ks. luvut 1.2 ja 5.4. Sovelluskehitin tarkoittaa suunnilleen samaa.

if

if monissa ohjelmointikielissä esiintyvä valintakäsky, jolla määrätään tietokone valitsemaan kahdesta vaihtoehdosta totuusarvoisen lausekkeen arvon perusteella ¶ Ks. luku 3.4. Ks. myös match.

ilmentymä

instance luokan perusteella luotu olio, yksittäistapaus luokan kuvaamasta käsitteestä ¶ Ks. luku 2.3. Ilmentymien tietoja ei kirjata ohjelmakoodiin samoin kuin yksittäisolioiden, vaan ne luodaan luokkamäärittelyn perusteella instantioimalla. Ilmentymiä sanotaan myös "instansseiksi".

ilmentymämuuttuja

instance variable 1) luokan jäsenmuuttuja; 2) luokan jäsenmuuttujan ilmentymäkohtainen kopio tietokoneen muistissa ¶ Ilmentymien tiedot varastoidaan ilmentymämuuttujiin; ks. luku 2.4.

imperatiivinen ohjelmointi

imperative programming yleinen ohjelmointiparadigma, joka perustuu muuttuvatilaisen tiedon käsittelyyn peräkkäin järjestetyillä käskyillä (lauseilla) ja vaikutuksellisilla aliohjelmilla ja johon tyypillisesti yhdistyy runsas silmukoiden käyttö toiston välineenä ¶ Ks. luku 11.2 ja vrt. funktionaalinen ohjelmointi.

implisiittinen

implicit piilevä; (vain) epäsuorasti pääteltävissä oleva; kätketty; ei eksplisiittinen

import

import (Scalassa ja useassa muussakin kielessä:) koodin kirjoittamista kätevöittävä käsky, jolla ohjelmoija ilmoittaa etukäteen, että aikoo käyttää työkaluja tietystä pakkauksesta (tai vastaavasta "työkalupakista") jäljempänä ohjelmassa ¶ Kun sopiva import-käsky on annettu, voi pakkauksen sisältöön viitata lyhyesti, kirjoittamatta täydellisiä nimiä. Ks. luvut 1.6 ja 5.3. Käyttämämme REPL-ympäristö suorittaa joitakin import-käskyjä automaattisesti; ks. luku 1.6.

indeksi

index alkion järjestysnumero sellaisessa kokoelmassa, jonka alkiot ovat numeroidussa järjestyksessä ¶ Esimerkiksi vektorit, puskurit ja taulukot ovat indeksoituja kokoelmia. Indeksoidun kokoelman alkioihin pääsee käsiksi indeksin perusteella; ks. luku 1.5. Joissakin ohjelmointikielissä indeksointi alkaa ykkösestä eli ensimmäisen alkion indeksi on 1. Toisissa (kuten Scalassa) se alkaa nollasta.

indeksoida

index 1) osoittaa alkiokokoelman kohta indeksiä käyttäen; 2) varustaa indekseillä ¶ Esimerkiksi lausekkeessa puskuri(0) = 10 indeksoidaan puskuria (merkitys 1), ja näin sijoitetaan sen ensimmäiseksi alkioksi luku 10.

indeksoitu

indexed (kokoelmasta:) indekseihin perustuva

input/output

input/output ohjelman ja sen ulkopuolisten tahojen välinen viestintä; lukeminen ja kirjoittaminen ¶ "Ulkopuolisia tahoja" voivat olla esimerkiksi tiedostot (ks. luku 11.3), tietokoneen oheislaitteet (esim. näppäimistö, näyttö) ja toiset tietoverkossa sijaitsevat tietokoneet. Usein käytetään lyhennettä I/O tai IO.

instanssi

instance sama kuin ilmentymä

instantioida

instantiate luoda olio tietyn luokan ilmentymäksi ¶ Ks. luku 2.3. Instantioinnin yhteydessä uudelle oliolle varataan muistitilaa ja alustetaan olio konstruktorin avulla. Instantiointikäskyn voi sanoa olevan eräänlainen erikoisfunktiokutsu.

IntelliJ IDEA

IntelliJ IDEA eräs ohjelmointiympäristö, IDE ¶ Tunnetaan myös lyhyemmin nimellä IntelliJ tai IJ. IntelliJ’n avoin ilmaisversio (Community Edition) on O1-kurssin virallinen ohjelmointityökalu. IntelliJ’hin on tarjolla A+ Courses -lisäosa, joka kätevöittää mm. tehtävien noutamista ja palauttamista.

I/O

I/O lyhenne termille input/output

iteraatio

iteration 1) toistaminen siten, että kukin toistokerta jatkaa siitä, mihin edellinen jäi; 2) sellaiseen toistoon perustuva ohjelmien toteutustapa; erityisesti: käskyjen toistaminen silmukalla ¶ Vrt. rekursio ja ks. luku 12.2.

iteraattori

iterator olio, joka tarjoaa palvelun tietyn kokoelman sisällön läpikäymiseen väljästi tietyssä järjestyksessä ¶ Ks. luku 11.3.

itsenäinen yksittäisolio

standalone object yksittäisolio, joka ei ole kumppaniolio

Java

Java 1) eräs ohjelmointikieli; 2) alun perin Java-kielen yhteyteen suunniteltu ohjelmointityökalusto, ns. Java platform, johon sisältyy eritoten Java-virtuaalikone ¶ Java-kieli on tarkoitettu lähinnä imperatiiviseen olio-ohjelmointiin. Java-ohjelmia ajetaan yleensä Java-virtuaalikoneessa kuten Scala-ohjelmiakin usein. Scala-ohjelmista on tällöin helppo käyttää Java-kielellä laadittuja kirjastoja; ks. luvut 5.4, 11.3 ja 12.4.

JavaScript

JavaScript eräs ohjelmointikieli ¶ JavaScriptillä on ohjelmointikielien joukossa de facto -erityisasema sikäli, että nykyiset web-selaimet osaavat suorittaa JavaScript-ohjelmia. Sitä käytetäänkin laajasti web-sivuilla. Muunkielisten ohjelmien kääntäminen JavaScriptiksi on yleistynyt, ja Scala-kielisiäkin ohjelmia voi kääntää JVM-tavukoodin sijaan myös JavaScriptiksi käyttämällä Scala.js-välineistöä. Nimestään huolimatta JavaScript on aivan eri asia kuin Java; nimien samankaltaisuus johtuu takavuotisista markkinointisyistä.

Java-virtuaalikone

Java Virtual Machine eräs virtuaalikone ¶ Ks. luku 5.4. Java-virtuaalikone eli JVM suunniteltiin Java-ohjelmointikielen yhteyteen, mutta sittemmin on ryhdytty kääntämään monia muitakin ohjelmointikieliä sellaiseksi tavukoodiksi, jota JVM osaa suorittaa. Scala on yksi näistä kielistä.

julkinen

public ulospäin näkyvä; rajapintaan kuuluva; mistä tahansa ohjelmassa käytettävissä oleva ¶ Ks. luku 3.2 ja vrt. yksityinen. Scalassa kaikki sellaiset luokkien ja yksittäisolioiden jäsenet, joiden näkyvyyttä ei erikseen ole rajoitettu, ovat julkisia.

JVM

JVM Java Virtual Machine eli Java-virtuaalikone

järjestäminen

sorting kokoelman alkioiden asettaminen järjestykseen jonkin kriteerin perusteella ¶ Esimerkiksi lukuja sisältävän kokoelman voi järjestää nousevaan tai laskevaan suuruusjärjestykseen; ks. luku 10.1. Järjestämisen yhteydessä voidaan luoda uusi kokoelma järjestettyä tietoa varten; muuttuvatilainen kokoelma voidaan vaihtoehtoisesti järjestää "paikallaan" (in place).

jäsen

member nimetty luokan tai yksittäisolion osa ¶ Erityisesti: metodit ja jäsenmuuttujat ovat jäseniä.

jäsenmuuttuja

member variable muuttuja, joka on luokan tai yksittäisolion jäsen ¶ Luokkien jäsenmuuttujia sanotaan ilmentymämuuttujiksi, koska niistä luodaan muistiin kopio jokaista luokan ilmentymää kohden; ks. luku 2.4.

kapselointi

encapsulation sana, jolla tarkoitetaan jompaakumpaa seuraavista tai niiden yhdistelmää: 1) tiedon piilottaminen jonkin rajapinnan taakse esimerkiksi näkyvyysmääreitä käyttäen; 2) aliohjelmien liittäminen samaan kokonaisuuteen niiden käsittelemien tietojen kanssa (kuten olioissa)

katenoida

(con)catenate yhdistää peräkkäin asettaen ¶ Käytetään ohjelmoinnin yhteydessä etenkin merkkijonoista. Esimerkiksi merkkijonot "kon" ja "katenoida" katenoimalla syntyy merkkijono "konkatenoida".

kehys

(stack) frame osa tietokoneen muistista, joka on varattu tietyn funktiokutsun suorittamiseen tarvittavien tiedon varastoimiseen ¶ Ks. luvut 1.7 ja 1.8. Kehysten tyypilliseen sisältöön lukeutuvat mm. paikalliset muuttujat, osio lausekkeiden evaluoimiselle funktiokutsun aikana sekä tieto siitä, mistä ohjelman kohdasta funktiota on kutsuttu ja mihin siis tulee palata funktiokutsun päättyessä. Kukin kehys pidetään varattuna niin kauan kuin funktiokutsu kestää. Kehykset muodostavat kutsupinon.

keinoäly

artificial intelligence (AI) tekoäly

kenttä

field sama kuin jäsenmuuttuja

keskeytyskohta

breakpoint debuggerissa asetus, joka saa ohjelman suorituksen pysähtymään, kun tarkasteltavan ohjelman suorituksessa saavutaan tiettyyn vaiheeseen ¶ Ks. debuggeria esittelevä sivu.

keskusmuisti

main memory, primary storage muisti, jonka sisältöä tietokoneen prosessori käsittelee ¶ Tavallisesti keskusmuistin sisältö ei säily, jos kone pannaan pois päältä; keskusmuisti eroaa näin kiintolevyistä ja muista massamuisteista. Kun ohjelmoidessa puhutaan muistista, tarkoitetaan usein nimenomaan keskusmuistia.

kiintoarvo

fixed value muuttuja, jonka arvoa ei vaihdeta sen jälkeen, kun muuttuja on kerran alustettu sopivalla arvolla ¶ Yksi muuttujien rooleista. Ks. luku 2.6 ja vrt. vakio ja val-muuttuja.

kiintolevy

hard drive, hard disk, hard disk drive massamuisti, joka perustuu pyörivään magneettiseen levyyn ¶ Kiintolevyt ovat olleet hyvin yleisiä viime vuosikymmeninä ja ovat yleisiä edelleen, vaikka puolijohteisiin perustuvat SSD-levyt ovatkin niitä syrjäyttäneet. Puhekielessä "kovalevy" tarkoittaa samaa.

kirjasto

library valikoima aliohjelmia, luokkia tai vastaavia ohjelmien osiksi sopivia komponetteja ¶ Eräät kirjastot, kuten Scala API, liittyvät kiinteästi tiettyyn ohjelmointikieleen. Jotkin kirjastot ovat yleiskäyttöisempiä kuin toiset, eli niiden tarjoamia osia voi hyödyntää useammanlaisten eri ohjelmien "rakennuspalikoina".

kirjastofunktio

library function funktio, joka sisältyy johonkin kirjastoon ¶ Sanalla voi korostaa, että kyseessä ei ole ohjelmoijan itsensä tiettyyn sovellukseen laatima funktio vaan yleiskäyttöisemmän kirjaston osa.

kirjoittaa

write, print 1) välittää tietoa ohjelmasta sen ulkopuolelle (osa I/O:ta) teksti tai binaarilukuina; 2) sijoittaa ¶ Ks. luku 11.3; ks. myös tulostaa.

klosuuri

(lexical) closure sama kuin sulkeuma

koheesio

cohesion yhteenliittyvyys, yhtenäisyys; se, kuinka tiiviisti tietty ohjelman osa muodostaa yhden selvästi rajatun kokonaisuuden, jonka osat liittyvät toisiinsa ¶ Esimerkiksi luokalla on korkea koheesio, jos se määrittelee yhden selvästi muista erottuvan käsitteen eikä sisällä tähän käsitteeseen liittymättömiä jäseniä. Koheesio on toivottava piirre ohjelmaa suunnitellessa; ks. luku 9.3.

kokoelma

collection tietorakenne, jonka tehtävänä on pitää kirjaa useasta tietyntyyppisestä arvosta ¶ Scala-ohjelmissa kokoelmia kuvataan olioina. Kokoelman sisältämiä arvoja sanotaan alkioiksi. Kokoelmia on eri tyyppisiä; erilaiset kokoelmat eroavat toisistaan mm. tehokkuudessa. Joissakin kokoelmissa alkiot ovat hyvin määritellyssä järjestyksessä esimerkiksi indeksien perusteella. Jotkin kokoelmat ovat muuttumattomia, toiset muuttuvatilaisia. Monet kokoelmat ovat tiukkoja mutta toiset väljiä. Kokoelmatyypit ovat usein tyyppiparametrillisia. Kurssilla esiin tuleviin kokoelmatyyppeihin lukeutuvat mm. puskurit, merkkijonot, vektorit, taulukot, hakurakenteet, listat, laiskalistat ja ja pinot. Myös monikot voi lukea erikoiseksi kokoelmatyypiksi.

kokooja

gatherer muuttuja, jota käytetään kokoamaan tulos useiden yksittäisten arvojen perusteella, näitä arvoja vaiheittain yhdistellen ¶ Kokoojaan voidaan esimerkiksi muodostaa vaiheittain lukujen summa. Kokooja on yksi muuttujien rooleista. Ks. luvut 2.6 ja 5.5.

komentorivi

command line tekstipohjainen ympäristö tietokoneen käyttämiseksi ¶ Komentoriviä käyttävä ihminen käynnistää ohjelmia kirjoittamalla ohjelman nimen (tarvittavine lisätietoineen). Tyypillisesti ohjelman tuloste tulee tällöin näkyviin, sekin tekstimuodossa. Komentorivi voi olla vaihtoehto graafiselle käyttöliittymälle; toisaalta komentorivi voi olla myös osa graafista käyttöliittymää. Esimerkkejä komentoriviympäristöistä ovat Windowsin Command Prompt ja Linuxien Terminal-ohjelmat. Luvussa 5.4 on esimerkkejä Scala-työkalujen käytöstä komentorivillä.

komentosarja

script skripti (erityisesti: sellainen skripti, jonka avulla automatisoidaan työvaiheita)

kommentti

comment lähdekoodiin kirjoitettu ihmislukijalle tarkoitettu osio, jota tietokone ei tulkitse osaksi suoritettavaa ohjelmaa ja joka ei siis vaikuta ohjelman toimintaan ¶ Asianmukainen kommenttien käyttö kuuluu hyvään ohjelmointityyliin. Ks. luku 1.2 ja kurssin tyyliopas. Ks. myös dokumentaatiokommentti.

komponentti

component 1) osa; 2) GUI-komponentti

konekieli

machine code, machine language ohjelmointikieli, joka sopii (tietynlaisten) prosessorien suoritettavaksi ¶ Ks. luku 5.4. Konekielet ovat yleensä erittäin matalatasoisia laitteistoriippuvaisia kieliä. Prosessorin käsittelemät konekieliset ohjelmat muodostuvat tällöin (binaari)luvuista, mutta konekielinen ohjelma voidaan esittää myös symbolisessa muodossa. Nykyään ohjelmat usein kirjoitetaan korkean tason kielellä, joka muunnetaan konekieleksi ennen ajamista esimerkiksi kääntämällä. Sanaa "konekieli" voidaan käyttää myös symbolisista konekielistä ja virtuaalikoneiden suoritettaviksi sopivista näennäiskonekielistä.

koneoppiminen

machine learning tietotekniikan osa-alue, jossa ohjelmisto tai järjestelmä oppii sille annetun datan perusteella tekemään päätöksiä, ennustuksia tai muita arvioita sellaisistakin tapauksista, jotka vain muistuttavat datassa esiintyviä (mutteivät ole niiden kanssa identtisiä) ja joita ohjelmoija ei ole erikseen koodiksi kirjannut ¶ Koska monet koneoppimisen sovellukset tekevät nykyään ihmisiin vaikutuksen, niistä usein puhutaan tekoälynä. Ks. luku 7.2.

konkatenoida

concatenate sama kuin katenoida

konkreettinen luokka

concrete class luokka, joka ei ole abstrakti eikä piirreluokka ¶ "Tavallinen luokka". Konkreettisessa luokassa ei voi olla abstrakteja jäseniä, mutta myös konkreettinen luokka voi toimia yliluokkana kuten abstrakti luokkakin; ks. luku 7.5.

konsoli

console tekstikonsoli

konstruktori

(instance) constructor aliohjelma, joka suoritetaan ilmentymää luodessa ¶ Sana "konstruktori" viittaa ohjelmakoodiin, joka suoritetaan instantioinnin yhteydessä, kun olion tiedoille on varattu muistitilaa. Konstruktorin pääasiallinen tehtävä on alustaa vastaluodun olion tila halutunlaiseksi. Monesti konstruktorille annetaan parametreja, jotka täsmentävät, millainen ilmentymä luokasta halutaan luoda. Scala-ohjelmiin ei tarvitse kirjoittaa konstruktoria mihinkään erilliseen paikkaan (kuten joissakin muissa kielissä), vaan konstruktori muodostuu luokan runkoon kirjoitetuista käskyistä; ks. luku 2.4. Scalassakin voi kirjoittaa erillisen konstruktorin, jos haluaa kuormittaa ilmentymien luomiskäskyä; ks. esim. luku 4.1.

konstruktoriparametri

constructor parameter konstruktorille välitetty parametri ¶ Ks. luvut 2.3 ja 2.4. Konstruktoriparametreja käytetään, kun luokasta instantioidaan uusia olioita. On tyypillistä, että konstruktoriparametrien arvot sijoitetaan uuden olion ilmentymämuuttujien arvoiksi, mutta niitä voi hyödyntää myös muulla tavoin.

koodi

code ks. ohjelmakoodi

korkeamman asteen funktio

higher-order function funktio, joka käsittelee toisia funktioita: ottaa niitä parametriksi tai palauttaa niitä ¶ Ks. luku 6.1. Käytetään myös nimeä "korkeamman kertaluvun funktio". Muunlaisia funktioita voi sanoa ensimmäisen asteen funktioiksi.

korkean tason kieli

high-level language ohjelmointikieli, jonka abstraktiotaso on korkea ja joka ei riipu ohjelmaa suorittavan tietokoneen erityispiirteistä ¶ Kielen "korkeus" on suhteellista, mutta esimerkiksi Scalaa pidetään yleisesti varsin korkean tason ohjelmointikielenä. Vrt. matalan tason kieli ja konekieli. Korkean tason kielet ovat yleensä ihmisten käyttöön sopivampia kuin matalan tason kielet.

korvata

override toteuttaa jo määritelty jäsen (metodi tai muuttuja) toisin yleisemmän määrittelyn käyttämisen sijaan ¶ Tietty luokka voi korvata vaikkapa piirreluokan määrittelemän metoditoteutuksen omalla toteutuksellaan, joka sopii juuri kyseisen luokan ilmentymille; ks. esim. luku 7.3. Korvaaminen onnistuu myös yksittäisessä luokan ilmentymässä, jonka toiminnan halutaan poikkeavan luokalle yleisesti määritellystä toiminnasta; ks. esim. luku 2.4.

kovalevy

hard disk, hard disk drive puhekielinen synonyymi kiintolevylle

kumppaniolio

companion object yksittäisolio, joka toimii tietyn luokan "kumppanina" ja mallintaa kyseistä luokkaa itseään olio-ohjelmassa ¶ Kumppaniolio on luokkansa kanssa samanniminen ja tulee määritellä samassa lähdekooditiedostossa; ks. luku 5.3. Luokalla ja sen kumppanioliolla on pääsy toistensa tietoihin. Kumppanioliossa voidaan pitää kirjaa esimerkiksi luokkaan liittyvistä vakioista tai muusta sellaisesta tiedosta, joka liittyy luokan edustamaan käsitteeseen mutta ei ole ilmentymäkohtaista.

kuormittaa

overload määritellä samaan ohjelmakomponenttiin (esim. luokkaan) keskenään samannimisiä funktioita, joilla on erilaiset parametrit ja siten eri puumerkit ¶ Ks. luvut 1.6 ja 4.1.

kutsua

call, invoke, apply määrätä funktio suoritettavaksi ¶ Ks. funktiokutsu.

kutsumuoto

signature sama kuin puumerkki

kutsupino

(call) stack pinotyyppinen kehyksiä sisältävä tietorakenne, jonka avulla pidetään ohjelma-ajon aikana kirjaa kullakin hetkellä käynnissä olevista funktiokutsuista ¶ Ks. luvut 1.7 ja 1.8.

käsky

command tietokonetta ohjeistava määräys ¶ Käytämme kurssilla "käsky"-sanaa epämuodollisesti mistä tahansa tietokoneen komentamisesta. Esimerkiksi tilan muuttamiseen käytettävät lauseet ovat käskyjä, samoin vaikutuksettomat lausekkeet.

käynnistysfunktio

main function/method funktio, jonka kautta tietyn sovelluksen voi käynnistää ja johon kirjataan, mitä tietokoneen kuuluu tuolloin tehdä ¶ Kätevin tapa merkitä Scala-funktio käynnistysfunktioksi on kirjoittaa sen eteen @main; ks. luku 2.7. Vaihtoehto käynnistysfunktiolle on käynnistysolio.

käynnistysolio

app object (Scalassa:) sovellukseen kuuluva yksittäisolio, joka määrää, mitä tietokoneen kuuluu tehdä, kun tuo sovellus käynnistetään ¶ Scala-oliosta voi tehdä käynnistysolion kirjaamalla sen yhteyteen extends App; ks. luku 2.7. Vaihtoehto käynnistysoliolle on käynnistysfunktio.

käyttöalue

scope se osa ohjelmakoodia, josta käsin tiettyä ohjelman osaa voi käyttää ¶ Esimerkiksi Scalassa luokan julkisen metodin käyttöalue on koko ohjelma, yksityisen vain tuo luokka itse (mahdollisine kumppaniolioineen), ja funktion parametrimuuttujan kyseisen funktion runko. Ohjelman lohkorakenne vaikuttaa käyttöalueeseen; ks. luku 5.6. Ks. myös luku 7.1.

käyttöjärjestelmä

operating system ohjelmisto, joka hallinnoi laitteiston käyttöä ja tarjoaa ohjelmoijalle palveluita ohjelmien laatimisen tueksi ja loppukäyttäjälle sovellusten käynnistämiseksi ¶ Käyttöjärjestelmä mm. huolehtii laitteiston (muisti, prosessori, tiedostot, tietoverkko, oheislaitteet ym.) käytöstä ja tarjoaa ohjelmoijan käyttöön abstraktioita, joiden kautta tuota laitteistoa voi hyödyntää.

käyttöliittymä

user interface ohjelman tai laitteen se osa, jonka kanssa käyttäjä vuorovaikuttaa ¶ Sovellusohjelman käyttöliittymä voi esimerkiksi perustua tekstikonsoliin→ tulostuviin kirjoitusmerkkeihin tai se voi olla graafinen. Ks. myös näkymä ja vrt. malli.

käyttöliittymätapahtuma

GUI event (graafiseen) käyttöliittymään liittyvä tapahtuma ¶ Esimerkiksi hiiren liikkeet sekä käyttöliittymän nappuloiden painaminen ovat käyttöliittymätapahtumia. Ks. luvut 3.1 ja 12.4.

käyttötavan yhtenevyys

uniform access principle joidenkin ohjelmointikielten syntaksin noudattama periaate, jonka mukaan ohjelmoijan on voitava käyttää toimintoja samalla merkintätavalla, vaikka nuo palvelut olisikin sisäisesti toteutettu eri tavoin ¶ Erityisesti: olion metodeihin ja muuttujiin on päästävä käsiksi keskenään samanlaisella merkinnällä; merkinnästä ei pidä näkyä, onko kyseessä parametrittoman metodin kutsu vai tutkitaanko olion jäsenmuuttujan arvoa. Ks. luvut 2.6 ja 7.3.

käännösaikainen virhe

compile-time error virhe, joka havaitaan automaattisesti ohjelmaa staattisesti käsittelemällä eli ohjelmaa ajamatta; erityisesti: virhe, joka havaitaan ohjelmaa kääntäessä ¶ Ks. luvut 1.8, 3.5 ja 7.3 ja vrt. ajonaikainen virhe ja looginen virhe. Monet käännösaikaiset virheet ovat syntaksivirheitä.

kääntäjä

compiler apuohjelma, joka muodostaa annetusta lähdekoodista toisenkielisen tai muuten erilaisen version; erityisesti: apuohjelma, joka muodostaa käännetyn version staattisesti, ohjelma-ajosta erillään ¶ Ohjelmia voidaan kääntää välikielelle tai suoraan konekieleksi. Scala-ohjelmia käännetään yleensä Java-virtuaalikoneelle sopivalle välikielelle. Ks. luku 5.4 ja vrt. tulkki. Ks. myös *build*.

laama

llama ohjelmointiin pitkälti liittymätön nisäkäslaji

laiteajuri

device driver ks. ajuri

lajitteleminen

sorting sama kuin järjestäminen

lambdafunktio

lambda function sama kuin nimetön funktio ¶ Erityisesti kielissä, joissa sellaisen määrittelemiseen käytetään sanaa "lambda" tai vastaavaa kreikkalaista aakkosta. Nimen taustaa on selitetty luvussa 6.2.

lambdalauseke

lambda expression sama kuin funktioliteraali ¶ Erityisesti kielissä, joissa funktioliteraaleissa käytetään sanaa "lambda" tai vastaavaa kreikkalaista aakkosta. Nimen taustaa on selitetty luvussa 6.2.

laiska

lazy väljä ja lausekkeiden toistuvaa evaluointia välttävä ¶ Ks. luku 7.2. Tämä adjektiivi kuvaa erästä tapaa, jolla lausekkeita voidaan evaluoida. Laiska muuttuja saa arvon siihen sijoitettavasta lausekkeesta väljästi eli vain kun tai jos tuon muuttujan arvoa käytetään; tämän jälkeen arvo on tallessa muuttujassa, josta se saadaan lauseketta uudelleen evaluoimatta. Scalassa laiskan muuttujan voi määritellä ilmaisulla lazy val. Laiskan kokoelman kuten laiskalistan alkioista muodostetaan vain ne, joita käytetään; nuo alkiot varastoidaan tällöin muistiin. Ks. myös by need. Vastakohta: hanakka.

laiskalista

lazy-list eräänlainen muuttumaton, laiska alkiokokoelma, joka sopii käytäväksi läpi järjestyksessä ¶ Nimensä mukaisesti laiskalistat ovat laiskasti evaluoituja listoja→. Scalassa niitä kuvaa luokka LazyList. Koska laiskalistoja ei evaluoida tiukasti, ne voivat olla päättymättömiä eikä niitä läpikäyvän korkeamman asteen metodin tai silmukan toistokertojen määrää ole välttämätöntä määrittää ennalta. Ks. luvut 7.2 ja 9.1. Scala-kielen vanhemmissa versioissa vastaavasta kokoelmasta käytettiin nimeä "virta" (Stream), ja tuota vanhaa nimeä käytetään edelleen joissakin lähteissä.

lause

statement käsky, joka määrää tietokoneen suorittamaan jonkin toimenpiteen ¶ Esimerkiksi Scalan tulostuskäskyä println(1 + 1) ja sijoituskäskyä a = 10 voi sanoa lauseeksi. Lauseella ei välttämättä ole merkityksellistä arvoa; esimerkiksi Scala-lause voi tuottaa vain Unit-arvon ja olla silti hyödyllinen. Lause voi sisältää lausekkeita, jotka evaluoidaan lauseen suorittamisen aikana: esimerkiksi lause println(1 + 1) sisältää lausekkeen 1 + 1. Yksi lausekekin voi muodostaa lauseen. Lauseita voi kirjoittaa ohjelmakoodiin peräkkäin, ja näin voidaan määrätä toimenpiteitä suoritettaviksi peräkkäisessä järjestyksessä. Scala-kielessä funktioiden ja luokkien määrittelyt sekä import-käskyt luetaan virallisesti eräänlaisiksi lauseiksi nekin; ne eivät toisaalta ole lausekkeita, koska niille ei voida määrittää arvoa. (Vrt. tulostuslause on Scala-ohjelmassa paitsi lause myös lauseke, koska sillä on Unit-arvo.) Lauseen käsite liittyy lähinnä imperatiiviseen ohjelmointiin; puhtaasti funktionaalisessa ohjelmoinnissa lausekkeen käsite yleensä riittää. Ohjelmointi 1 -kurssilla emme juurikaan käytä tätä termiä.

lauseke

expression ohjelmointikielen ilmaisu, jolle voidaan määrittää arvo ¶ Ks. esim. luku 1.3. Lausekkeita ovat esimerkiksi literaalit, aritmeettiset lausekkeet kuten 1 + 1, muuttujien nimet ja ohjelmakoodiin kirjoitetut funktiokutsut. Arvon määrittämistä sanotaan lausekkeen evaluoimiseksi. Vrt. lause.

legacy-koodi

legacy code ohjelmakoodi, jonka on aikanaan tehnyt joku muu ja jonka kanssa nykyiset ohjelmoijat joutuvat elämään — ehkä vastentahtoisesti — kehittäessään ohjelmistoa edelleen ¶ Tämä on termin yleisin nykymerkitys ohjelmoijien jargonissa. Alun perin se tarkoitti koodia, joka on aikanaan laadittu vanhentuneeseen järjestelmään ja joka ei ole yhteensopiva nykyisten järjestelmien kanssa.

LIFO

LIFO pinojen noudattama periaate, jonka mukaan alkiota poistettaessa poistetaan aina viimeksi lisätty alkio ¶ Sanoista last in, first out. Ks. luku 10.3.

liittää (piirre)

mix in (a trait) määritellä luokka (tai yksittäisolio) piirreluokan alakäsitteeksi ¶ Ks. luku 7.3. Kun luokkaan on liitetty tietty piirre, sen ilmentymät ovat paitsi luokan itsensä tyyppisiä, myös liitetyn piirreluokan tyyppisiä. Piirteen liittävä luokka kuvaa piirreluokan kuvaaman käsitteen alakäsitettä. Luokkaan voi liittää useita piirreluokkia.

lippu

flag muuttuja tai vastaava tietorakenne, jota käytetään ilmoittamaan jostakin kaksijakoisesta asiaintilasta ¶ Ks. luku 5.6 ja yksisuuntainen lippu. Lippu voidaan toteuttaa esimerkiksi totuusarvoisena muuttujana.

Liskovin periaate

Liskov substitution principle tietotyyppien määrittelyyn liittyvä suunnitteluperiaate, jonka mukaan alatyypin (esim. aliluokan) arvoja täytyy voida mielekkäästi käyttää missä tahansa yhteydessä, jossa ylätyypinkin (esim. yliluokan) arvoja voi ¶ Ks. luku 7.5.

lista

list 1) luettelo; 2) (Scalassa ja useassa muussa kielessä:) eräänlainen muuttumaton alkiokokoelma, jonka toteutus perustuu alkioiden ketjuun ja joka sopii käytäväksi läpi järjestyksessä ¶ Scalassa listoja kuvaa luokka List; ks. luku 7.2 ja jatkokurssit. Laiskalistat ovat nimensä mukaisesti laiskoja listoja. Eri ohjelmointikielet käyttävät sanaa "lista" erilaisista kokoelmatyypeistä.

literaali

literal yksinkertainen lauseke, jonka arvo on kirjoitettu suoraan ohjelmakoodiin ¶ Esimerkiksi 10 on kokonaislukuliteraali ja "laama" merkkijonoliteraali. Ks. myös funktioliteraali.

liukuluku

floating-point number tietokoneissa yleisesti käytetty bittitason esitystapa desimaaliluvuille ¶ Liukuluvun määrittävät etumerkkibitti, kerroin eli mantissa, kantaluku ja eksponentti. Kantalukuna käytetään yleensä (esim. Scalassa) lukua kaksi ja muut osat tallennetaan lukukohtaisesti. Aihetta sivutaan luvussa 5.4.

logiikkaoperaattori

logical operator operaattori, jonka operandit ovat totuusarvoja ja joka tuottaa totuusarvotyyppisen tuloksen ¶ Esimerkiksi && (and) ja || (or) ovat logiikkaoperaattoreita; ks. luku 5.1.

lohko

block (Scalassa:) yhden tai useamman peräkkäisen käskyn yhdistelmä, jolla on oma sisennystasonsa ja jonka arvo on käskyistä viimeisen arvo ¶ Esimerkiksi funktion rungon voi määritellä lohkoksi. Samoin valintakäskyjen then- ja else-osat voi kirjata lohkoiksi. Lohkot vaikuttavat käyttöalueisiin. Erityisesti: paikallisen muuttujan käyttöalue rajautuu lohkoon, jossa muuttuja on määritelty; ks. luku 5.6.

looginen operaattori

logical operator sama kuin logiikkaoperaattori

looginen virhe

logical error virhe, joka ilmenee ohjelman ei-toivottuna toimintana eikä teknisenä virhetilanteena ¶ Esimerkiksi jos ohjelma laskee vääriä tuloksia, tervehtii käyttäjää vääränlaisella viestillä tai jättää toivottuja toimintoja suorittamatta, on kyseessä looginen virhe. Vrt. käännösaikainen virhe ja ajonaikainen virhe.

loppumerkki

end marker merkintä, joka kirjoitetaan koodiosion loppuun merkitsemään tuon osion päättymistä ¶ Scalan loppumerkeissä käytetään sanaa end, esim. end if tai end munMetodi. Loppumerkit eivät ole Scalassa pakollisia, mutta niitä on tapana käyttää tietyissä tilanteissa, jotta ihmisen olisi helpompi lukea koodia; ks. esim. luvut 1.7, 2.2 ja tyyliopas.

luetelma(tyyppi)

enumeration, enumerated type luokka, jolla on vain tietyt, luokan yhteyteen kirjatut ilmentymät ¶ Esimerkiksi neljää pääilmansuuntaa voi kuvata luetelma CompassDir, jolla on täsmälleen neljä ilmentymää: North, East, South ja West — mitään muita ilmentymiä kuin nämä etukäteen määrätyt ei ole eikä voi luoda. Monet ohjelmointikielet tarjoavat erityisen tavan luetelmien kirjaamiseen, mistä Scalan enum-määrittelyt on esimerkki; ks. luku 7.4. Myös suljetulla luokalla voi tuottaa saman lopputuloksen, mutta enum on näppärämpi silloin, kun jokikinen mahdollinen ilmentymä on täsmälleen tiedossa etukäteen ja voidaan kirjata koodiin.

lukea

read 1) vastaanottaa tietoa ohjelmaan sen ulkopuolelta (osa I/O:ta); 2) selvittää muuttujaan tallennettu arvo (kun muuttujaa käytetään lausekkeessa) ¶ Ks. luku 11.3; ks. myös syöte.

luokan runko

class body luokan määrittelyn varsinainen sisältö ¶ Luokan rungossa mm. määritellään luokkaan kuuluvat ilmentymämuuttujat ja metodit. Suoraan Scala-luokan runkoon, metodien ulkopuolelle, kirjoitetut käskyt suoritetaan, kun luokasta luodaan ilmentymä; runko siis toimii konstruktorina.

luokka

class 1) olioita kuvaava tietotyyppi; 2) tällaisen tietotyypin määrittely ohjelmakoodissa ¶ Ks. luvut 2.1, 2.3 ja 2.4. Luokka määrittelee millaisia tietyntyyppiset oliot ovat; vrt. yksittäisolio, joka on määritelty kaikista muista olioista erikseen. Siinä missä olio kuvaa yksittäista asiaa, luokka kuvaa yleisempää käsitettä, josta oliot ovat yksittäistapauksia. Luokan voi instantioida, jolloin syntyy uusi kyseisen tyyppinen olio eli luokan ilmentymä. Ks. myös piirreluokka, abstrakti luokka. (Tarkennus: kurssilla sanomme Scala-luokkia tietotyypeiksi tai tietotyyppien määrittelyiksi, mikä on pieni yksinkertaistus. Huolellisemmin sanoen Scalan luokat ovat määrittelyjä, jotka voivat kuvata yhden tai useamman tietotyypin. Esimerkiksi luokka Int kuvaa yhden tietotyypin, ja luokka Buffer kuvaa useita tietotyyppejä, jotka saadaan käyttämällä eri tyyppiparametreja: Buffer[Int], Buffer[String] jne.)

luokkahierarkia

class hierarchy ks. tyyppihierarkia

luokkakirjasto

class library kirjasto, joka sisältää luokkia

luokkapolku

classpath ohjelmointityökalujen (mm. JVM:n) asetus, joka kertoo, mistä kansioista ja/tai pakkauksista ohjelman osat löytyvät ¶ IntelliJ’ssä luokkapolkua voi muokata moduulikohtaisesti valitsemalla File → Project Structure... → Modules ja kyseisen moduulin kohdalta Dependencies. Näin voi esimerkiksi määritellä yhden moduulin hyödyntämään toista; ks. luku 11.1.

luokkatiedosto

class file eräänlainen Java-virtuaalikoneelle tarkoitettu tiedosto, joka sisältää virtuaalikoneelle sopivaa välikieltä ¶ Scala-ohjelmat yleensä käännetään luokkatiedostoiksi Java-virtuaalikoneessa suorittamista varten. Luokkatiedostot nimetään .class-päätteisiksi.

lähdekoodi

source code tekstimuotoinen kääntämätön ohjelmakoodi, joka on tarkoitettu ihmisen käsiteltäväksi ¶ Ks. luku 5.4. Kurssilla käsittelemme Scala-kielellä kirjoitettua lähdekoodia.

maaginen luku t. arvo

magic number, magic constant literaali, jonka tarkoitus ohjelmassa ei ole ohjelmakoodista ilmeinen ¶ Maagiset luvut voivat hankaloittaa ohjelman lukemista, ja maagisen luvun toistuessa voi syntyä piileviä riippuvuuksia. Maagisia lukuja voi välttää esimerkiksi määrittelemällä vakioita niiden sijaan; ks. esim. luku 2.6.

malli

model 1) kuvaus jostakin asiasta tai kokonaisuudesta; erityisesti: kuvaus siitä aihealueesta, jota ohjelma käsittelee; 2) se sovellusohjelman osa, joka kuvaa aihealueen käsitteet (käyttöliittymästä riippumattomasti) ¶ Ohjelmoijat muodostavat malleja ohjelmointikielen rakenteita, esimerkiksi luokkia, käyttäen. Tätä sanaa käytetään usein silloin, kun korostetaan eroa aihealuetta kuvaavan mallin ja tuon mallin käsittelemiseen tarkoitetun käyttöliittymän (eli näkymän) välillä; ks. luvut 1.2, 2.7, 3.1 ja 9.3.

massamuisti

external memory, secondary storage, mass storage muisti, joka säilyttää sisältönsä silloinkin, kun laitteisto on poissa päältä (ja jota on käytettävissä suhteellisen runsaasti) ¶ Massamuisti voi olla esimerkiksi kiintolevy tai puolijohdelevy (solid state drive; SSD). Tietoa tallennetaan massamuistiin tyypillisesti tiedostoiksi. Massamuisti on suhteellisen halpaa, ja tietokoneissa on yleensä paljon enemmän massamuistia kuin keskusmuistia. Jotta ohjelma voi käsitellä massamuistin sisältöä, on kyseinen sisältö tuotava ensin keskusmuistiin, mikä on suhteellisen hidasta.

matalan tason kieli

low-level language ohjelmointikieli, jonka abstraktiotaso on matala ja joka on riippuvainen ohjelmaa suorittavan tietokoneen erityispiirteistä ¶ Matalan tason kieliksi sanotaan yleensä lähinnä konekieliä. Matalan tason kielillä voi myös ohjelmoida, ja näin voidaan saavuttaa parempi suoritustehokkuus, mutta korkean tason kielet ovat moneen tarkoitukseen paljon käytännöllisempiä.

match

match (Scalassa:) valintakäsky, joka määrää tietokoneen valitsemaan vaihtoehdoista tutkimalla, mikä koodiin kirjatuista tapauksista vastaa tietyn lausekkeen arvoa ¶ Kukin match-käskyn tapauksista kuvaa ns. hahmon, johon tutkittavan lausekkeen arvo sovitetaan mikäli mahdollista. Tämä hahmonsovitus perustuu arvon dynaamiseen tyyppiin. Ks. luvut 4.3 ja 4.4 ja vrt. if. Ks. myös case.

merkkijono

string peräkkäisten merkkien jono, jossa kullakin merkillä on oma sijaintinsa ¶ Esimerkiksi merkkijonossa laama on viisi merkkiä tietyssä järjestyksessä. Merkkijonot ovat eräs yleisimmistä tietokoneohjelmissa käytetyistä tietotyypeistä. Scalassa merkkijonoja kuvaa ennen muuta String-tietotyyppi (luku 1.3), mutta myös vaihtoehtoisia esitystapoja merkkijonoille on olemassa (ks. esim. luku 11.2). Monien ohjelmointikielten peruskirjastoissa on paljon merkkijonojen käsittelemiseen sopivia aliohjelmia (ks. esim. luku 5.2 ja Scalaa kootusti). Merkkijonot voidaan lukea indeksoiduksi kokoelmatyypiksi, jossa kokoelman alkiot ovat yksittäisiä merkkejä (luku 5.6).

merkkijonoupotus

string interpolation lausekkeiden kirjoittaminen merkkijonoliteraalin sisään siten, että syntyvän merkkijonon osiksi tulevat upotettujen lausekkeiden arvoja kuvaavat merkit ¶ Esitellään luvussa 1.4; lisäesimerkkejä mm. luvuissa 1.6, 2.4 ja 2.5.

metodi

method olioon liitetty funktio ¶ Olion metodit määrittävät, millaisiin viesteihin olio osaa reagoida ja miten se niihin reagoi; ks. luku 2.1. Scala-ohjelmakoodissa kukin metodin määrittely kirjoitetaan osaksi joko yksittäisolion tai luokan määrittelyä. Scalassa myös operaattorit ovat metodeita; ks. luku 5.2. Keskustelufoorumeita lukiessa on hyvä tietää, että kaikki Scala-ohjelmoijat eivät käytä sanaa aivan samalla tavalla kuin me ja virallinen Scala-sanasto.

metodikutsu

method call funktiokutsu, jossa kutsuttu funktio on metodi ¶ Ks. luku 2.1. Scalassa metodikutsulausekkeen voi kirjoittaa joko pistenotaatiolla tai operaattorinotaatiolla.

metodin runko

method body ks. funktion runko ¶ Metoditkin ovat funktioita.

MIDI

MIDI Musical Instrument Digital Interface, eräs sähköisten musiikkilaitteiden ohjelmoimiseen ja niiden väliseen viestintään määritelty standardi ¶ Ks. luku 1.4.

modulo-operaattori

modulo operator operaattori jakojäännöksen laskemiseen ¶ Scalassa ja monessa muussa ohjelmointikielessä modulo-operaattori on %. Ks. luku 1.7.

moduuli

module (IntelliJ’ssä:) kokonaisuus, johon ohjelmointihankkeeseen liittyviä tiedostoja voi ryhmitellä, jotta niitä olisi helpompi hallita ¶ Moduuli (tässä mielessä) on IntelliJ-työkaluun liittyvä käsite, kun taas pakkaus on ohjelmointikielen käsite. Ks. luku 1.2. Joissakin muissa ohjelmointiympäristöissä samantapaisesta asiasta käytetään muuta termiä. "Moduuli"-termillä on muissa ohjelmointiyhteyksissä muitakin merkityksiä.

monikko

tuple usean, keskenään mahdollisesti erityyppisen jäsenen yhdistelmä, jossa jäseniä on vakiomäärä ja jossa ne ovat määrätyssä järjestyksessä ¶ Kaksialkioista monikkoa sanotaan pariksi. Monikon voi ajatella olevan kokoelma, joskin erikoinen sellainen: monikon kullakin jäsenellä on staattinen tyyppinsä erikseen, toisin kuin muilla kokoelmilla, joiden alkioilla on yhteinen tyyppi. Tämän vuoksi monikon sisältöä ei voi käydä läpi samalla tavoin kuin kokoelman ilman erillisiä muuntotoimenpiteitä, ja metodien valikoima on monikoilla muutenkin muita kokoelmia pienempi. Scalassa→ monikot ovat muuttumattomia. Ks. luku 9.2.

moniperintä

multiple inheritance periytyminen useasta välittömästä yliluokasta ¶ Scalassa ei ole varsinaista moniperintää useasta yliluokasta, mutta piirreluokkien avulla voi käytännössä täyttää samat tarpeet.

muisti

memory tietokoneen osa tai oheislaite, johon voidaan varastoida tietoa hetkellisesti tai pysyvämmin muistityypistä riippuen ¶ Ohjelmien käsittelemää tietoa pidetään tallessa muistissa, yleensä bitteinä. Kullakin muistin kohdalla on oma osoitteensa, eräänlainen järjestysnumero, joka identifioi kyseisen muistipaikan. Ohjelmien ajonaikaista muistinkäyttöä kuvataan tällä kurssilla abstrakteilla, animoiduilla diagrammeilla luvusta 1.3 alkaen. Usein "muistilla" tarkoitetaan nimenomaan keskusmuistia; vrt. myös massamuisti.

muistivuoto

memory leak haitallinen ohjelman toiminta, jonka vuoksi ohjelma ei vapauta kaikkea varaamaansa muistia muuhun käyttöön sittenkään, kun se ei tuota muistitilaa enää tarvitse ¶ Muistia vuotava ohjelma varaa käyttöönsä (kenties vähitellen) yhä enemmän muistia, mikä voi mm. johtaa ohjelman kaatumiseen, kun tarjolla olevat muistiresurssit ehtyvät. Muistivuotoja syntyy esimerkiksi silloin, jos roskan viemää muistitilaa ei vapauteta.

muodollinen parametri

formal parameter sama kuin parametrimuuttuja

muuttuja

variable nimetty varastointipaikka yhdelle arvolle tietokoneen muistissa ¶ Ks. luvut 1.4 ja 2.6.

muuttujan rooli

role of a variable tyypillinen muuttujan käyttötapa; kuvaus tavasta, jolla muuttujaa käytetään ohjelmassa ¶ Ks. esim. luvut 2.6 ja 5.5. Rooleja ovat mm. kiintoarvo, tilapäissäilö, kokooja, tuoreimman säilyttäjä, säiliö, sopivimman säilyttäjä ja yksisuuntainen lippu. Rooleilla ei ole teknistä merkitystä, vaan ne ovat ihmisille tarkoitettuja kuvauksia muuttujien käytöstä ohjelmissa.

muuttumaton

immutable (kokoelmasta tai muusta oliosta tai tietorakenteesta:) sellainen, jonka tila ei missään tapauksessa vaihdu toiseksi ohjelma-ajon aikana ¶ Esimerkiksi vektorit ovat muuttumattomia kokoelmia, koska kerran luodussa vektorissa on pysyvästi samat alkiot; puskuri taas on muuttuvatilainen. Ks. luvut 4.2 ja 11.2.

muuttuvatilainen

mutable (kokoelmasta tai muusta oliosta tai tietorakenteesta:) sellainen, jonka tila voi vaihtua toiseksi ohjelma-ajon aikana ¶ Esimerkiksi puskurit ovat muuttuvatilaisia kokoelmia, koska samassa puskurissa voi olla eri hetkinä eri sisältö; vektori taas on muuttumaton. Ks. luvut 4.2 ja 11.2.

myöhäinen sidonta

late binding käytetään (mm.) dynaamisen sidonnan synonyyminä

nimetön funktio

anonymous function funktioliteraalin määrittelemä ja siis nimeämätön funktio ¶ Ks. luku 6.2. Tunnetaan myös nimellä lambdafunktio.

nimetön parametri

anonymous parameter alaviivalla merkitty nimeämätön parametrimuuttuja Scalan lyhennetyissä funktioliteraaleissa ¶ Ks. luku 6.2.

nimiö

label yksinkertainen GUI-komponentti, jonka tehtävänä on näyttää käyttäjälle jokin teksti ja/tai kuva ¶ Myös esim. "labeli", "lappu". Ks. luku 12.4.

None

None Option-tyyppinen yksittäisolio, joka ei sisällä yhtään tietoalkiota ¶ Ks. luku 4.3 ja vrt. Some. Viittausta None-olioon ei voi sijoittaa mielivaltaisen tyyppiseen muuttujaan, mutta Option-tyyppiseen muuttujaan voi; None eroaa näin ratkaisevasti null-viittauksesta, jollainen on mahdollista sijoittaa (lähes) mihin tahansa.

notaatio

notation merkintätapa ¶ Ks. pistenotaatio ja operaattorinotaatio.

null-viittaus

null reference olemattoman tiedon merkkinä käytetty arvo; viittaus, joka ei osoita mihinkään kohtaan tietokoneen muistissa ¶ Esimerkiksi Scalassa null-arvo on tyyppiyhteensopiva lähes minkä tahansa tietotyypin kanssa (vrt. Option, joka ei ole). Null-viittausten käyttö on omiaan aiheuttamaan bugeja. Niiden käyttöä usein vältetään Scala-ohjelmoinnissa. Ks. luvut 4.2, 4.3 ja 12.2.

NullPointerException

NullPointerException sellaisten ajonaikaisten virheiden tyyppi, jotka syntyvät yritettäessä käyttää null-viittauksen osoittamaa tietoa (jota ei ole) ¶ NullPointerException syntyy esimerkiksi silloin, jos Scala-ohjelmassa yritetään kutsua metodia muuttujalle, johon on tallennettu null-viittaus eikä viittausta olemassa olevaan olioon; ks. luvut 4.2 ja 4.3. Tämä virhetyyppi esiintyy samalla nimellä myös mm. Java-ohjelmointikielessä. Monissa muissa kielissä on vastaavia virhetyyppejä eri nimillä.

näennäissatunnaisluku

pseudorandom number luku, jonka on tuottanut aitoa satunnaisuutta jäljittelevä algoritmi ¶ Ks. luku 3.6 ja satunnaislukujen siemen.

näkymä

view 1) sovelluksen osa, joka näkyy käyttäjälle; käyttöliittymä; 2) (erityisesti:) käyttöliittymän se osa, joka esittää aihealueen mallin käyttäjälle ¶ Jälkimmäisessä, suppeammassa merkityksessä näkymä erotetaan sekä aihealueen mallista että niistä käyttöliittymän osista, jotka reagoivat käyttäjän toimiin ja päivittävät mallia; ks. Model–View–Controller Wikipediassa. Ks. myös View.

näkyvyys

visibility ohjelman osan ominaisuus, joka kuvaa tuon osan käyttöaluetta ¶ Voidaan esimerkiksi sanoa, että private on "näkyvyysmääre" ja että luokkaan yksityiseksi määritelty muuttuja "näkyy" vain kyseisen luokan sisällä.

O1Library

O1Library tämän kurssin tarpeisiin laadittu ohjelmakirjasto ¶ Monet kurssin esimerkkiohjelmat hyödyntävät tätä kirjastoa. Se sisältää työkaluja, joilla voi mm. laatia yksinkertaisia kuviin perustuvia graafisia käyttöliittymiä sekä tuottaa MIDI-ääntä kätevästi. Valittuja osia O1Librarystä esitellään tämän oppimateriaalin luvuissa. Kirjastosta on myös dokumentaatio, ja Scalaa kootusti -sivulla on lyhyt johdanto sen graafisiin työkaluihin.

Object

Object (Scala-näkökulmasta:) toinen nimi luokalle AnyRef sellaisissa yhteyksissä, joissa Scala-ohjelmaa ajetaan JVM-alustalla

ohjelma

program 1) tietokoneen suoritettavaksi tarkoitettu toimintaohje; 2) tällaisen ohjeistuksen suorittamisesta syntyvä dynaaminen prosessi ¶ Ohjelmia ovat mm. sovellukset, käyttöjärjestelmät ja ajurit; ks. luku 1.2. Kun ohjelma on kokonaisuus, johon kuuluu oheistiedostoja tai erillisiä pienempiä ohjelmia, voi sitä sanoa ohjelmistoksi.

ohjelmakirjasto

software library ks. kirjasto

ohjelmakoodi

program code 1) ohjelmateksti, lähdekoodi; 2) ohjelma konekielisessä muodossa ¶ Kurssillamme ohjelmakoodi käytännössä tarkoittaa Scala-kielistä lähdekoodia; konekielisistä ohjelmista ei puhuta kuin hitunen luvussa 5.4.

ohjelmisto

software ohjelma tai ohjelmien yhdistelmä, johon voi lisäksi liittyä oheistiedostoja varsinaisen suoritettavan ohjelman lisäksi ¶ Käytetään erityisen usein laajemmista kokonaisuuksista.

ohjelmointi

programming tietokoneohjelmien laatiminen: niiden suunnitteleminen ja toteuttaminen ¶ Ks. luku 1.2.

ohjelmointikieli

programming language keinotekoinen ohjelmien kirjoittamiseen tai muulla tavoin ilmaisemiseen tarkoitettu kieli ¶ Ohjelmointikieliä usein kirjoitetaan tekstimuotoon, mutta esim. ns. visuaalisessa ohjelmoinnissa ohjelma esitetään ainakin osin diagrammeina tai kuvina.

ohjelmointiparadigma

programming paradigm ohjelmoinnin suuntaus; tapa lähestyä ja ratkaista ohjelmointiongelmia ¶ Ks. luvut 2.1 ja 11.2. Tällä kurssilla puhetta on olio-ohjelmoinnista, imperatiivisesta ohjelmoinnista, funktionaalisesta ohjelmoinnista ja hieman myös proseduraalisesta ohjelmoinnista.

ohjelmointirajapinta

application programming interface, API 1) rajapinta, jota voi käyttää apuna erilaisten sovellusohjelmien laatimisessa; 2) kirjasto, joka tarjoaa työkaluston sovellusohjelmien laatijoille ¶ Lyhennettä API käytetään hyvin laajasti suomeksikin. Verkkopalvelu (esim. Google Maps) voi tarjota ohjelmointirajapinnan, jonka kautta ohjelmat voivat hyödyntää tuota palvelua. Monien ohjelmointikielten yhteyteen on määritelty kieleen enemmän tai vähemmän kiinteästi liittyvä kirjasto, jota voi hyödyntää laajasti erilaisissa kyseisellä ohjelmointikielillä laadituissa ohjelmissa ja johon viitataan sanalla API; Scala API on yksi esimerkki.

ohjelmointityyli

programming style ohjelmien laatimiseen liittyvät (kenties kirjoittamattomat) säännöt, toimintatavat tai periaatteet; erityisesti: säännöt, toimintatavat tai periaatteet, jotka liittyvät lähdekoodin muotoilemiseen ¶ Hyvällä ohjelmointityylillä pyritään auttamaa ohjelmaa lukevia ja sitä muokkaavia ihmisiä; ks. kurssin tyyliopas. Ohjeita ohjelmointityylistä kirjataan tyylikäytännöiksi.

olio

object eräänlainen yksittäistä asiaa mallintava abstraktio; ohjelman osa, joka osaa vastaanottaa viestejä ja reagoida niihin ohjelmoijan määrittelemällä tavalla ¶ Oliot ovat olio-ohjelmoinnin perusta; ks. luku 2.1. Olioiden toiminnallisuus toteutetaan määrittelemällä niille funktioita, joita kutsutaan metodeiksi. Oliolla voi olla muuttuva tila. Ks. myös yksittäisolio ja luokka.

olio-ohjelmointi

object-oriented programming yleinen ohjelmointiparadigma, jossa ohjelmat rakennetaan kuvaamalla ongelmakenttä olioina ja niiden välisenä viestintänä ¶ Ks. esim. luvut 2.1 ja 11.2. Scala on puhdas olio-ohjelmointikieli: kaikki tieto esitetään olioina (ks. luvut 5.2 ja 5.3). Olio-ohjelmointiin liitetään usein myös esimerkiksi luokan ja periytymisen käsitteet, mutta ne eivät oikeastaan ole olio-ohjelmoinnin kannalta välttämättömiä.

olion muuttuja

ilmentymämuuttuja tai yksittäisolion jäsenmuuttuja ¶ Kurssilla käytetty "epävirallinen" ilmaisu. Olioiden tiedot varastoidaan olioiden muuttujiin.

OOP

OOP object-oriented programming eli olio-ohjelmointi

open

open sana, jolla Scalassa määritellään avoin luokka

operaattori

operator kirjoitusmerkki tai merkkien yhdistelmä, joka lähdekoodiin kirjoitettuna määrää tietyn toimenpiteen suoritettavaksi ohjelmointikielen sääntöjen mukaisesti ¶ Esimerkiksi + on monessa ohjelmointikielessä yhteenlaskuoperaattori ja <= eräs vertailuoperaattori. Kuten operaattoritkin, myös funktiokutsut määräävät toimenpiteitä suoritettaviksi, ja ero operaattorien ja funktiokutsujen välillä voi olla häilyvä. Operaattoreiksi sanotaan yleensä sellaisia merkkejä tai merkkiyhdistelmiä, joita käytetään hyvin yksinkertaisella ja tyypillisistä funktiokutsuista poikkeavalla syntaksilla. Scalassa ei ole kokonaan erillistä operaattorin käsitettä ollenkaan, vaan metodeita voi käyttää joko operaattorinotaatiolla tai pistenotaatiolla (luku 5.2). Metodeita kuten +, joita käytetään yleensä operaattorinotaatiolla, voi Scalassakin nimittää operaattoreiksi.

operaattorinotaatio

(infix) operator notation metodien kutsumiseen käytetty merkintätapa, jolle on ominaista välimerkkien puuttuminen metodikutsulausekkeesta ¶ Esim. olio metodi parametri tai 1 + 1. Scalassa operaattorinotaatiota voi käyttää tietyissä yhteyksissä pistenotaation sijaan; ks. luku 5.2 ja kurssin tyyliopas. Ks. myös operaattori.

operandi

operand 1) lauseke, johon operaattori kohdistetaan; 2) tällaisen lausekkeen arvo ¶ Esimerkiksi laskutoimituksessa 2 * (1 + 10) ovat kertolaskuoperaattorin operandeina literaali 2 ja aritmeettinen lauseke (1 + 10).

Option

Option luokka, jonka avulla voidaan kuvata tietoa, joka saattaa puuttua ¶ Kukin Option-tyyppinen arvo on olio, joka joko sisältää yhden tietoalkion (Some) tai on tyhjä (None); ks. luku 4.3. Option-luokan käyttö tekee arvojen mahdollisesta puuttumisesta eksplisiittisen osan ohjelmakoodia ja mahdollistaa käännösaikaiset virheilmoitukset sellaisissa tilanteissa, joissa null-viittauksia käyttämällä syntyisi ajonaikaisia virheitä. Option on yksinkertainen alkiokokoelmatyyppi; ks. luku 8.4.

paikallinen funktio

local function funktio, joka on määritelty toisen funktion rungossa ja jota voi käyttää vain tuon ulomman funktion sisältä ¶ Ks. esim. luvut 7.1 ja 12.2 ja vrt. paikallinen muuttuja. Ks. myös sulkeuma.

paikallinen muuttuja

local variable funktion sisään vain tuon funktion omaa käyttöä varten määritelty muuttuja ¶ Ohjelmoija voi määritellä funktion rungossa paikallisia muuttujia (ks. esim. luvut 1.7 ja 5.5), minkä lisäksi parametrimuuttujia voidaan sanoa paikallisiksi muuttujiksi. Paikalliset muuttujat pidetään tallessa kutsupinon kehyksissä, joten ne ovat olemassa vain väliaikaisesti funktiokutsun aikana; ks. kuitenkin sulkeuma. Ks. myös käyttöalue.

pakkaus

package nimetty kokonaisuus, joka sisältää joukon ohjelman osia ¶ Esimerkiksi Scala-ohjelman osat ryhmitellään yhteen tai useampaan pakkaukseen; ks. luvut 1.2 ja 1.7. Yhdessä IntelliJ-moduulissa voi olla yhteen tai useampaan pakkaukseen kuuluvia osia. Saman pakkauksen jäseninä ei voi olla keskenään samannimisiä luokkia tai yksittäisolioita, mutta eri pakkauksissa voi. Useimpien pakkausten sisältö tulee erikseen ottaa käyttöön ennen kuin sitä voi hyödyntää tuon pakkauksen ulkopuolelta käyttämättä täydellisiä nimiä; ks. luku 1.6. Ks. myös Scala API.

palauttaa

return välittää palautusarvo ¶ Palauttaminen päättää funktiokutsun.

palautusarvo

return value arvo, joka välitetään funktiokutsun päättyessä funktion kutsujalle ja josta tulee funktiokutsulausekkeen arvo ¶ Funktio voi välittää palautusarvollaan esimerkiksi laskutoimituksen lopputuloksen tai tietoa toiminnon onnistumisesta tai epäonnistumisesta. Joillakin funktioilla ei ole merkityksellistä palautusarvoa lainkaan; Scala-ohjelmissa tällaiset funktiot palauttavat Unit-arvon merkkinä siitä, ettei merkityksellistä palautusarvoa ole. Scala-funktion palautusarvo on sen lausekkeen arvo, joka funktiokutsun aikana evaluoidaan viimeiseksi (ellei funktion suoritus keskeytynyt ajonaikaiseen virheeseen, jolloin palautusarvoa ei synny). Ks. myös return.

paluuarvo

return value sama kuin palautusarvo

paneeli

panel GUI-komponentti, joka voi sisältää useita muita komponentteja ja jota käytetään muiden komponenttien ryhmittelemiseen ja asemointiin ¶ Ks. luku 12.4.

parametri

parameter, argument ohjelman osalle välitettävä tieto; erityisesti: funktiolle välitettävä lisätieto, joka tarkentaa sitä, mitä funktiokutsun tulisi tehdä ¶ Ks. luvut 1.3, 1.6, 1.7 ja 2.1. Funktion vastaanottamien parametrien määrä (nolla tai useampia) kirjataan funktion määrittelyyn. Parametreihin liittyvä termistö vaihtelee eri yhteyksissä. Tällä kurssilla sanomme, että funktiokutsuun kirjataan parametrilausekkeita. Kun funktiokutsu suoritetaan, parametrilausekkeet evaluoidaan ja saadaan parametriarvoja, jotka välitetään funktiokutsua varten luotuun kehykseen, jossa ne tallentuvat parametrimuuttujiin. (Äskeinen pätee tavallisesti, kun evaluointi on tiukkaa, mutta väljässä evaluoinnissa parametrilausekkeiden evaluointia lykätään.) Ks. myös parametriluettelo, tyyppiparametri ja argumentti.

parametriarvo

argument arvo, joka saadaan evaluoimalla parametrilauseke ¶ Parametriarvoja välitetään funktiokutsua vastaavaan kehykseen parametrimuuttujiin; ks. luvut 1.3, 1.6 ja 1.7. Myös termiä "argumentti" käytetään samasta asiasta.

parametrilauseke

argument lauseke, joka kirjoitetaan funktiokutsulausekkeeseen ja joka evaluoimalla tuotetaan parametriarvo ¶ Ks. luvut 1.3, 1.6, 1.7 ja 7.2. Myös termiä "argumentti" käytetään samasta asiasta.

parametriluettelo

parameter list 1) parametrimuuttujia sisältävä luettelo funktion määrittelyssä; 2) parametrilausekkeita sisältävä luettelo funktiokutsulausekkeessa ¶ Parametriluettelot kirjoitetaan Scalassa kaarisulkeisiin. Luetteloja voi olla yksi (ks. luvut 1.6 ja 1.7), nolla (ks. luvut 1.8 ja 2.6) tai useampia (ks. luku 6.1).

parametrimuuttuja

parameter (variable) paikallinen muuttuja, joka on määritelty puumerkissä ¶ Ks. luku 1.7. Parametrimuuttujan arvoksi tallentuu parametriarvo funktiokutsun alkaessa (ainakin tavallisesti; ks. kuitenkin by name-parametri). Scalassa parametrimuuttujat ovat aina val-muuttujia. (Scala-kielen virallisessa termistössä parametrimuuttujat on itse asiassa erotettu paikallisista muuttujista rinnakkaiseksi käsitteeksi, mutta kurssilla käytämme näitä termejä tässä kuvattuun tapaan.)

pari

pair monikko, jossa on tasan kaksi jäsentä ¶ Pareja voi käyttää esimerkiksi hakurakenteissa avain–arvo pareina. Eräs toinen yleinen käyttötarkoitus pareille on kahden arvon palauttaminen funktiosta: vaikka (Scala-)funktio voikin palauttaa yhden arvon, voi tämä arvo olla esimerkiksi pari. Ks. luku 1.8 ja etenkin luku 9.2.

perintä

inheritance sama kuin periytyminen

periytyminen

inheritance olio-ohjelmointiin liittyvä tekniikka, jossa suhdetta ylä- ja alakäsitteen välillä kuvataan määrittelemällä luokalle (tai yksittäisoliolle) yliluokka ¶ Ks. luku 7.5. Määritelmästä riippuen piirreluokat mielletään joko periytymiselle rinnakkaiseksi tavaksi kuvata ylä- ja alakäsitesuhteita ohjelmissa tai yhdeksi periytymisen muodoksi.

perustapaus

base case rekursiivisen algoritmin tai ohjelman osa, jossa (osa)ongelman ratkaisu selviää ilman rekursiivista kutsua ¶ Ks. luku 12.2.

Pic

Pic O1Library-kirjastossa kuvien esittämiseen määritelty luokka ¶ Ks. esim. luvut 1.3, 2.3 ja 2.5 sekä luokan dokumentaatio.

piilevä riippuvuus

implicit coupling implisiittinen riippuvuussuhde ohjelman osien välillä; tilanne, jossa yhden ohjelmakoodin osan muuttaminen edellyttää muutoksia myös toisaalle ohjelmassa, mutta tuo tarve ei ole ilmeinen ¶ Esimerkiksi maagiset luvut aiheuttavat piileviä riippuvuuksia. Ohjelmakoodia, jossa on piileviä riippuvuuksia, on työläämpää muokata ja siihen syntyy helpommin bugeja.

pikseli

pixel kuvapiste ¶ Tietokoneen näytölle piirtyvä näkymä koostuu pikseleistä. Erivärisiä pikseleitä käyttämällä saadaan näkyviin kuvia ja kirjoitusmerkkejä eri kirjasinlajeilla. Sana on lyhennys englannin sanoista picture element.

piirre

trait 1) sama kuin piirreluokka; 2) (kuten yleiskielessä:) ominaisuus, seikka ¶ Kurssilla käytämme yleensä pidempää sanaa "piirreluokka", kun halutaan viitata nimenomaan piirreluokkiin.

piirreluokka

trait (Scalassa:) luokka, jolle pätee: 1) siinä voi olla (myös) abstrakteja metodeja ja muuttujia; 2) siitä ei voi luoda ilmentymiä kuin alakäsitteittensä kautta; 3) se ja muita piirreluokkia voidaan liittää alakäsitettä kuvaavaan luokkaan (tai yksittäisolioon); 4) se ei voi välittää konstruktoriparametreja yläkäsitteelleen ¶ Piirreluokat määritellään Scalassa käyttäen sanaa trait sanan class sijaan. Piirreluokat muistuttavat käsitteenä yliluokkia (erityisesti abstrakteja sellaisia) mutta eroavat niistä eräissä teknisissä seikoissa. Keskeisin ero on, että luokkaan voi liittää useita piirreluokkia mutta se voi periä vain yhden välittömän yliluokan. Ks. luvut 7.3, 7.4 ja 7.5. Tämän kurssin materiaalissa piirreluokatkin luetaan eräänlaisiksi luokiksi, toisin kuin englanninkielisessä Scala-kirjallisuudessa, jossa trait ja class ovat usein toisilleen rinnakkaiset termit.

pino

stack 1) LIFO-periaatetta noudattava alkiokokoelma; 2) kutsupino ¶ Ks. myös solution stack.

pinokehys

stack frame ks. kehys

pistenotaatio

dot notation merkintätapa metodien kutsumiseen, jolle on ominaista kutsun vastaanottavan olion ja metodin nimen väliin kirjoitettava pistemerkki ¶ Esim. olio.metodi(parametri). Pistenotaatiota käytetään monissa ohjelmointikielissä, mm. Scalassa. Ks. luvut 2.1 ja 5.2 sekä kurssin tyyliopas. Vrt. operaattorinotaatio.

poikkeus

exception eräistä ajonaikaisista virheistä käytetty nimitys

poikkeustenkäsittely

exception handling ajonaikaisten virheiden havaitseminen ja niihin reagoiminen ¶ Ks. luku 11.3 sekä try, catch ja finally.

Pos

Pos O1Library-kirjastossa kaksiulotteisten koordinaattien kuvaamiseen määritelty luokka ¶ Ks. esim. luvut 2.5 ja 3.1 sekä luokan dokumentaatio.

private

private näkyvyysmääre, jolla luokan tai olion osasta tehdään yksityinen ¶ Ks. myös protected.

proseduraalinen ohjelmointi

procedural programming yleinen ohjelmointiparadigma, jossa ohjelmat rakennetaan kuvaamalla ongelmakenttä aliohjelmina, jotka kutsuvat edelleen toisia aliohjelmia suorittaakseen osatehtäviä ¶ Ks. luku 11.2 ja vrt. olio-ohjelmointi, jossa ongelma jäsennetään olioina ja aliohjelmat (metodit) liitetään niihin. Proseduraalinen ohjelmointi on keskeinen imperatiivisen ohjelmoinnin muoto.

proseduuri

procedure 1) vaikutuksellinen funktio; 2) (joskus nimenomaan:) sellainen vaikutuksellinen funktio, joka ei palauta arvoa tai palauttaa vain sisällöttömän yksikkötyyppisen arvon

prosessori

processor, CPU (central processing unit) tietokoneen osa, joka suorittaa toimintoja muistiin tallennetulle datalle tms. syötteelle ¶ Prosessori suorittaa yksinkertaisia konekielisiä käskyjä ja saa näin aikaan ohjelmien toiminnan. Pääprosessorin (CPU) lisäksi monissa tietokoneissa on myös grafiikkaprosessori (GPU), ja muunkinlaisia prosessoreita on. Suomeksi käytetään myös termiä suoritin.

protected

protected näkyvyysmääre, jolla luokan osasta tehdään "suojattu" ¶ "Suojattu" on yksityisen ja julkisen väliltä: suojattuun osaan pääsee käsiksi luokasta itsestään sekä sen alakäsitteistä (aliluokista ja piirreluokan liittävistä luokista), muttei muualta.

pseudokoodi

pseudocode ihmislukijalle tarkoitettu ainakin jossain määrin ohjelmointikieltä muistuttava tekstimuotoinen kuvaus algoritmista tai ohjelmasta ¶ Ks. esim. luku 2.5. Pseudokoodi on yleensä epätäsmällisempää kuin konkreettinen ohjelmakoodi. Se ei yleisesti ottaen kelpaa tietokoneen käsiteltäväksi. Pseudokoodia käytetään esimerkiksi ohjelmia suunnitellessa ja dokumentoidessa.

pseudosatunnaisluku

pseudorandom number sama kuin näennäissatunnaisluku

puhdas funktio

pure function funktio, joka on paitsi vaikutukseton myös riippumaton ohjelman tilasta ja palauttaa jokaisella kutsukerralla saman arvon, kunhan parametriarvot ovat samat ¶ Esimerkiksi muuttuvatilaisen olion metodi voi olla vaikutukseton (jos se ei muuta olion tilaa) muttei silti puhdas (jos sen palautusarvo riippuu olion muuttuvasta tilasta). Puhdasta funktiota kutsuva lauseke on arvoltaan läpinäkyvä.

puskuri

buffer (Scalassa:) eräänlainen muuttuvatilainen kokoelma, jonka alkiot ovat indeksien mukaisessa järjestyksessä ja joita voi lisätä ja poistaa ¶ Ks. luku 1.5. Vrt. esim. taulukko ja vektori. Termillä on muitakin merkityksiä tietotekniikassa yleisemmin.

puumerkki

signature 1) funktion määrittelyn se osa, joka määrittelee, miten funktiota kutsutaan; 2) vastaava määrittely jostakin muusta ohjelman osasta kuin funktiosta ¶ Scala-funktion puumerkin muodostavat sen nimi, parametrimuuttujat tyyppeineen sekä palautusarvon tyyppi (paitsi nimettömien funktioiden tapauksessa, jolloin nimeä ei ole). Funktion runko ei kuulu sen puumerkkiin. Englanninkielisellä sanalla "signature" ei ole vakiintunutta suomennosta, ja puumerkkien lisäksi puhutaan myös "signatuureista", "kutsumuodoista", ym. Muissa ohjelmointikielissä on Scalasta osin poikkeavia määrittelyjä puumerkille, mutta perusajatus on sama. Puumerkin tunteminen riittää funktion kutsumiseen teknisessä mielessä; lisäksi on tietysti syytä tuntea funktion tarkoitus. Ks. myös kuormittaminen.

pöytätestaus

desk checking ohjelman tai algoritmin toimivuuden tarkastaminen manuaalisesti, ohjelmaa ajamatta ¶ Pöytätestaava ihminen voi esimerkiksi lukea ohjelmakoodia näytöltä tai paperilta ja käydä mielessään läpi sen suorituksen vaiheita.

rajapinta

interface 1) "julkisivu", jonka kautta tiettyä ohjelman osaa tai muuta palvelua käytetään; 2) (eräissä ohjelmointikielissä:) rajapintaluokka ¶ Scala-kielisen kurssimme kannalta vain 1. merkitys on tärkeä. Esimerkiksi luokalla on rajapinta, johon sisältyvät sen julkiset osat. Rajapinnan tunteminen on välttämätöntä luokan käyttämiseksi, kun taas toteutuksen tunteminen ei ole. Ks. luku 3.2 ja vrt. käyttöliittymä.

rajapintaluokka

interface eräs abstrakteja luokkia ja etenkin piirreluokkia muistuttava rakenne ¶ Ei esiinny Scalassa vaan eräissä muissa ohjelmointikielissä, joista tunnetuimpana Javassa.

rakentaja

constructor sama kuin konstruktori

rakenteellinen rekursio

structural recursion rekursion muoto, jossa tietorakenteen (kuten luokan) määrittelystä viitataan tuohon määrittelyyn itseensä ¶ Ks. luvut 2.6 ja 12.2. Esimerkiksi henkilöluokan määrittelyyn voidaan kirjata henkilön vanhemmat, jotka myös ovat henkilöitä. Rekursiivisen rakenteen käsittelyyn sopivat usein sellaiset rekursiiviset kutsut, jotka kohdistetaan vähitellen pienenevään osaan olemassa olevasta rakenteesta.

refaktoroida

refactor muokata ohjelmaa tai ohjelman osaa muuttamatta sen toiminnallisuutta ¶ Ks. esim. luvut 3.1, 7.3 ja 9.3. Refaktoroinnilla pyritään ohjelman laadun parantamiseen, esimerkiksi ohjelman jatkokehityksen helpottamiseen.

referentin läpinäkyvyys

referential transparency ks. arvon läpinäkyvyys

rekursiivinen kutsu

recursive call funktiokutsu, jossa tietystä funktiosta käsin kutsutaan tuota samaa funktiota ¶ Ks. rekursio ja luku 12.2.

rekursio

recursion 1) asian itsensä käyttäminen sen omassa määrittelyssä, kuvauksessa tai toteutuksessa; erityisesti: funktion määritteleminen siten, että se kutsuu itseään; 2) sellaisiin funktioihin perustuva ohjelmien toteutustapa ¶ Rekursiivinen ohjelma palauttaa ratkaistavan ongelman kohti perustapausta ratkaisemalla siitä osan rekursiivisella kutsulla. Ks. erityisesti luku 12.2; myös luvussa 7.2 on pieni esimerkki. Ks. myös rakenteellinen rekursio ja vrt. iteraatio.

REPL

REPL ohjelmointiympäristö, jossa käyttäjän kirjoittamat ohjelmointikieliset käskyt suoritetaan välittömästi niiden kirjoittamisen jälkeen, yksitellen, ja syötettyjen lausekkeiden arvot tulostuvat samoin välittömästi näytölle ¶ REPL on lyhenne ilmaisusta read–eval–print loop. REPLiä käytetään esimerkiksi Scala-ohjelmoinnin yhteydessä runsaasti; ks. luku 1.3. REPListä voidaan puhua myös "tulkkina" tai "interaktiivisena tulkkina", ja Scala-REPL tunnetaan myös nimellä Scala Interpreter.

return

return käsky, joka katkaisee funktiokutsun ja palauttaa arvon välittömästi, kun se suoritetaan ¶ Scalassa return-käskyä ei käytetä usein; ks. luku 9.1. Joissakin muissa ohjelmointikielissä vastaavaa käskyä tulee käyttää kaikissa sellaisissa funktioissa, jotka palauttavat arvon.

RGB

RGB värien esitysmuoto, jossa kukin väri kuvataan punaisen (R), vihreän (G) ja sinisen (B) valon yhdistelmänä ¶ Kukin kolmesta komponentista on luku, joka kertoo, paljonko yhdistelmässä on tuota väriä. Ks. luku 5.4.

rooli

role ks. muuttujan rooli

roska

garbage tietokoneen muistiin varastoitu tieto, johon sen varastoinut ohjelma ei pääse käsiksi ¶ Roskaa on esimerkiksi olio, johon ei ole yhtään viittausta. Hyvin laaditussa ohjelmassa roskaksi saisi jäädä vain sellaisia tietoja, joita ohjelma ei (enää) tarvitse, jotta varattu muisti voidaan vapauttaa roskankeruulla.

roskankeruu

garbage collection toimenpide, jolla roskan viemä muistitila vapautetaan muuhun käyttöön ¶ Roskankeruu voidaan tehdä automaattisesti, ja näin esimerkiksi Java-virtuaalikoneessa tehdäänkin. Tämä osaltaan ehkäisee muistivuotoja.

runko

body ks. funktion runko, luokan runko

rutiini

(sub)routine aliohjelma; Scalan ja tämän kurssin termistöllä siis funktio

sanakirja

map, dictionary sama kuin hakurakenne

satunnaislukujen siemen

random seed näennäissatunnaislukuja tuottavalle algoritmille välitetty parametri, joka alustaa algoritmin tilan ¶ Tietty näennäissatunnaisalgoritmi tuottaa samalla siemenellä aina saman satunnaislukujen sarjan. Ks. luku 3.6.

Scala

Scala eräs ohjelmointikieli ¶ Scala on suunniteltu kieleksi, jolla voi ohjelmoida usean eri ohjelmointiparadigman puitteissa ja paradigmoja yhdistellen. Kieli painottaa olio-ohjelmointiparadigmaa, johon ohjelmoija voi yhdistää imperatiivista ja funktionaalista ohjelmointia. Näistä jälkimmäiseen usein kannustetaan Scala-kielen yhteydessä. Scalan valintaa tälle kurssille on selostettu kurssin Usein kysyttyjä kysymyksiä -sivulla. Scala-kielisiä ohjelmia ajetaan usein JVM-virtuaalikoneessa, mutta Scala.js:n avulla niitä voi myös kääntää JavaScriptiksi ja ajaa selaimessa.

Scala API

Scala API Scala-ohjelmoinnissa käytetty laaja, yleishyödyllinen kirjasto ¶ Jakautuu pakkauksiin, joilla on scala-alkuiset nimet. Nämä pakkaukset sisältöineen on kuvattu Scaladoc-dokumentein; ks. luku 3.2. Osa Scala APIsta — pakkaus nimeltä vain scala — liittyy lähtemättömästi Scala-kieleen; ks. luku 1.6. Scala API on esimerkki ohjelmointirajapinnasta.

Scala.js

Scala.js Scalan toteutus, joka kääntää Scala-koodia JavaScriptiksi (JVM-virtuaalikoneen käyttämän tavukoodin sijaan) ¶ Scala.js:n avulla voi ajaa Scala-ohjelmia selaimessa. Luku 5.4 kertoo hieman lisää Scala-toteutuksista.

Scaladoc

Scaladoc 1) apuohjelma, jolla voi tuottaa Scala-lähdekoodista ja siihen upotetuista dokumentaatiokommenteista dokumentaatiota; 2) tällä työkalulla tuotettu dokumentaatio ¶ Ks. luvut 3.2 ja 3.5. Scaladoc-dokumenteissa kuvataan eritoten ohjelman osien julkiset rajapinnat. Scala API on kuvattu Scaladoc-dokumentein. Monille muillekin ohjelmointikielille on vastaava työkalu kuten Javadoc (Java) ja Pydoc (Python).

sealed

sealed sana, jolla Scalassa määritellään suljettu luokka

semantiikka

semantics ilmaisujen merkitys ¶ Erotetaan usein syntaksista. Esimerkiksi Scala-kielen käskyt x = x + 1 ja x += 1 ovat syntaktisesti erilaiset, mutta niillä on sama semantiikka: kasvatetaan muuttujan x arvoa yhdellä.

siemen

seed ks. satunnaislukujen siemen

signatuuri

signature sama kuin puumerkki

sijoittaa

assign asettaa muuttujalle (uusi) arvo ¶ Esimerkiksi Scala-kielistä käskyä muuttujanNimi = 10 sanotaan sijoituskäskyksi. Se sijoittaa (var-)muuttujan uudeksi arvoksi luvun kymmenen, korvaten muuttujan vanhan arvon. Ks. luku 1.4.

silmukka

loop 1) ohjelman osa, jonka suorittamista toistetaan useita kertoja; 2) toistokäsky, jolla tällainen ohjelman osa voidaan määritellä ohjelmakoodiin ¶ Ks. luvut 5.5, 5.6 ja 9.1. Scala-kielessä silmukoita voi määritellä for- ja while-käskyillä. Yleisesti ottaen silmukan luomiseen ei välttämättä tarvita nimenomaista toistokäskyä, vaan kielestä riippuen voi olla mahdollista käyttää hyppykäskyä kuten goto (ks. luku 10.3). Silmukoiden avulla voi toteuttaa iteratiivisia algoritmeja.

sisentää

indent aloittaa tekstirivi reunaa sisemmältä ¶ Johdonmukainen sisentäminen on keskeinen osa hyvää ohjelmointityyliä; ks. luvut 1.7 ja 3.4 ja kurssin tyyliopas. Osassa ohjelmointikielistä sisennykset ovat puhtaasti tyyliseikka. Toisissa kielissä niillä taas on vaikutusta myös ohjelman toimintaan: ohjelmoijan määrittää ohjelman rakenteen sisentämällä sisäkkäiset rakenteet tietyllä tavalla. Jälkimmäistä ryhmää edustavat esimerkiksi Python-kieli ja vuonna 2021 julkaistusta kolmosversiostaan alkaen myös Scala.

sivuvaikutus

side effect tilaa muuttava toimenpide; O1:n terminologiassa: vaikutus ohjelman tilaan ¶ Ilmaisua käytetään funktionaalisen ohjelmoinnin yhteydessä, kun vaikutuksellisia funktioita vältetään.

skooppi

scope sama kuin käyttöalue

skripti

script korkean tason kielellä laadittu ohjelma, jolle pätee yksi tai useampia seuraavista: 1) se on koodiltaan lyhyehkö; 2) sen koodi muodostuu peräkkäisten komentojen sarjasta; 3) se tulkataan eikä käännetä; 4) sen päätehtävä on muodostaa annetun syötteen perusteella jokin tulos; 5) se käsittelee jotakin olemassa olevaa ohjelmaa tai muuta järjestelmää "ulkoapäin"; 6) sitä käytetään manuaalisestikin suoritettavissa olevien työvaiheiden automatisointiin; 7) se on kirjoitettu skriptikielellä ¶ Termillä on useita osin toisiinsa liittyviä merkityksiä, jotka ovat eläneet aikojen saatossa. Se on nykyään niin moniselitteinen, että sen käyttöä on parempi välttää, ellei yhteydestä tule selväksi, mitä sanalla tarkoitetaan.

skriptikieli

scripting language korkean tason ohjelmointikieli, joka sopii skriptien laatimiseen ¶ Esimerkiksi PHP:ta, Pythonia ja Luaa sanotaan melko usein skriptikieliksi. Myös Scalaa voi käyttää skriptikielenä.

solution stack

solution stack valittu ohjelmistojen ja ohjelmointityökalujen yhdistelmä, jonka varaan tietty yritys, yhteisö tai yksittäinen ohjelmoija rakentaa sovelluksia ¶ Ohjelmistoalan jargonia; usein lyhyemmin vain stack. Yrityksen "stäkkiin" voi sisältyä esimerkiksi käyttöjärjestelmä, ohjelmointikieliä, tietokantoja, web-palvelinohjelma jne. Muoti-ilmaisu full stack viittaa ohjelmointiin, jossa työskennellään "pinon eri tasoilla" monia työkaluja käyttäen; usein viitataan erityisesti siihen, että web-sovelluksen ohjelmoija työskentelee sekä selaimessa toimivan käyttöliittymän että palvelinkoneella toimivan sisäisen toteutuksen parissa. Sanalla "stack" on eri merkityksiä, joista tämä on vain yksi.

Some

Some luokka, joka kuvaa sellaisia Option-tyyppisiä olioita, jotka sisältävät yhden tietoalkion ¶ Ks. luku 4.3 ja vrt. None. Some on Optionin aliluokka; ks. luku 7.5.

sopivimman säilyttäjä

most-wanted holder muuttuja, jota käytetään pitämään kirjaa sellaisesta arvosta, jolle tietty kriteeri parhaiten toteutuu ¶ Yksi muuttujien rooleista. Ks. luvut 4.2 ja 5.5.

sovellus(ohjelma)

application (program) tietokoneohjelma, joka on tarkoitettu loppukäyttäjän käytettäväksi ja sopii tiettyyn tarkoitukseen ¶ Ks. luvut 1.1 ja 1.2.

sovelluskehitin

integrated development environment ohjelmointiympäristö, IDE ¶ Jotkut viittaavat sanalla nimenomaan sovellusten ohjelmointiin tarkoitettuihin ympäristöihin, toiset IDE:ihin yleisesti. IDE-termi on suomeksikin tätä yleisempi.

spagettikoodi

spaghetti code huonolaatuinen, sotkuinen ohjelmakoodi, jossa osat riippuvat toisistaan monimutkaisesti ¶ Spagettikoodin toiminnasta on vaivalloista tehdä päätelmiä. Sitä voi olla vaikeaa jatkokehittää, koska muutokset yhdessä ohjelman osassa vaikuttavat moniaalle. Tällainen koodi on erityisen ongelmallista, kun ohjelma on suuri.

staattinen

static 1) ohjelmakoodiin kiinteästi liittyvä, ohjelmakoodista sitä ajamatta määrittyvä, ohjelman ajamiseen liittymätön; ei-dynaaminen, muuttumaton, kiinteä; 2) luokkaan itseensä eikä sen ilmentymiin liittyvä ¶ Tietokoneohjelmalla voi sanoa olevan kaksi "olomuotoa", staattinen ja dynaaminen; ks. esim. luvut 1.2 ja 2.1. Ohjelman staattisiin piirteisiin ei voi vaikuttaa esimerkiksi ohjelman käyttäjän antama syöte. Ks. myös staattinen tyyppi.

staattinen tyyppi

(static) type ohjelmakoodin osan tietotyyppi, joka voidaan määrittää ja tarkastaa staattisesti eli ohjelmaa ajamatta ¶ Staattisesti tyypitetyissä kielissä kuten Scala lausekkeilla ja muuttujilla on staattiset tyypit. Esimerkiksi Scala-muuttujan staattinen tyyppi rajaa sitä, millaisia sijoituksia muuttujaan voi tehdä, ja staattiselta tyypiltään yhteensopimattoman lausekkeen käyttö sijoituksessa tuottaa käännösaikaisen virheilmoituksen. Ks. luku 7.3 ja vrt. dynaaminen tyyppi.

staattisesti tyypitetty

statically typed (ohjelmointikielestä:) tyyppijärjestelmältään sellainen, että kullakin lähdekoodin osalla (eli ohjelman staattisen "olomuodon" osalla, etenkin lausekkeilla ja muuttujilla) on tietotyyppi, joka voidaan tarkastaa staattisesti ¶ Scala on (normaalikäytössä) staattisesti tyypitetty: esimerkiksi muuttujilla ja lausekkeilla on staattiset tietotyypit (sen lisäksi, että niiden arvoilla on dynaamiset tyypit). Scala on myös tyyppiturvallinen, ja niinpä yritys sijoittaa vaikkapa Int-tyyppiseen muuttujaan String-tyyppinen arvo tuottaa käännösaikaisen virheilmoituksen. Muita staattisesti tyypitettyjä kieliä ovat esimerkiksi Java, C# ja Haskell. Vrt. dynaamisesti tyypitetty.

stack

stack 1) pino; 2) (ohjelmistoalalla:) solution stack ¶ Sanalla on tietotekniikan eri osa-alueilla vielä muitakin merkityksiä.

stack trace

stack trace (or traceback) ajonaikaisen virheen kuvaamiseksi muodostettu raportti siitä, mitä kutsuja oli käynnissä virhetilanteen syntyessä ¶ Käytetään debuggauksessa apuna. Ks. luku 4.2.

sulautettu järjestelmä

embedded system tietotekninen järjestelmä, jolla on rajattu, suhteellisen suppea-alainen tarkoitus ¶ Esimerkiksi pankkiautomaatit ja monet robotit ovat sulautettuja järjestelmiä, samoin modernit autot. Vrt. yleiskäyttöinen tietokone ja ks. luku 1.1.

suljettu luokka

sealed class (or trait) luokka, jolle ei voi määritellä välittömiä alatyyppejä muualla kuin sen kanssa samassa kooditiedostossa ¶ Scalassa luokat ovat suljettuja ellei niitä erikseen avoimiksi määrittele. Piirreluokat ja abstraktit luokat ovat lähtökohtaisesti avoimia, mutta nekin voi sulkea sealed-määreellä. Ks. luku 7.4. Vrt. avoin luokka ja ks. myös final ja luetelma.

sulkeuma

(lexical) closure rakenne, johon sisältyy funktion määrittely sekä pääsy tiettyihin tuota funktiota ympäröivässä kontekstissa määriteltyihin muuttujiin ¶ Ks. luku 7.1.

suodin

filter (kuvankäsittelyssä:) toiminto, joka suorittaa tietyn muunnoksen kuvalle tai kuvan osalle ¶ Esimerkiksi harmaasävysuodin tuottaa annetusta värikuvasta version, jossa kaikki pikselien värit ovat enemmän tai vähemmän kirkkaita harmaan sävyjä. Sanoilla "suodin" ja "filter" on tietotekniikassa muitakin merkityksiä; esimerkiksi Scalassa on kokoelmia käsittelevä korkeamman asteen metodi nimeltä filter.

suoritin

processor, CPU (central processing unit) sama kuin prosessori

suorittaa

execute toimia ohjelman määräämällä tavalla; ajaa

suppea tekoäly

narrow AI tekoäly, joka toimii kapeaksi rajatulla erikoisalueella ¶ Suppea tekoäly voi olla erikoistunut esimerkiksi kielen kääntämiseen, hakutulosten parantamiseen, auton ajamiseen tai kasvojen tunnistamiseen kuvista. Vastakohta: yleinen tekoäly. Heikko tekoäly tarkoittaa suunnilleen samaa.

Swing

Swing eräänlainen graafisten käyttöliittymien ohjelmoimiseen tarkoitettu kirjasto ¶ Swingejä on useita: tämänniminen kirjasto kehitettiin alun perin Java-kielen yhteyteen, mutta myös Scalassa on samanniminen kirjasto (joka rakentuu Java-version varaan). Ks. luku 12.4. Ks. myös O1Library.

symbolinen konekieli

symbolic machine code/language, assembly (language) ohjelmointikieli, jossa konekielisiä käskyjä suoraan vastaavat käskyt on esitetty symbolisessa muodossa, yleensä tekstinä

syntaksi

syntax ohjelmointikielen ilmaisujen muodostamissäännöstö ¶ Syntaksi määrää, mitä ilmaisuja ohjelmointikielessä voi käyttää ja miten niitä voi yhdistellä. Syntaksi erotetaan usein semantiikasta eli siitä, mitä ilmaisut merkitsevät.

syntaksivirhe

syntax error virhe, joka johtuu siitä, että lähdekoodi on ohjelmointikielen syntaksin vastainen ¶ Ks. luvut 1.8 ja 3.5. Syntaksivirheet ovat usein käännösaikaisia.

syntaktinen sokeri

syntactic sugar sellainen osa syntaksia, joka ei kasvata ohjelmointikielen ilmaisuvoimaa eikä ole sikäli välttämätön, vaan jonka tarkoitus on kätevöittää ohjelmakoodin kirjoittamista tai lukemista ¶ Ks. luku 4.1. Esimerkkejä syntaktisesta sokerista Scalassa ovat ilmentymämuuttujien määritteleminen konstruktoriparametrien yhteyteen (luku 2.4), laskutoimituksia ja sijoituksia yhdistelevät operaattorit kuten += (luku 4.1), erilaiset funktioliteraalit (luku 6.2) ja for-silmukat (luvut 5.5 ja 6.3).

syöte

input ohjelman käsiteltäväksi jostakin lähteestä välitetty tieto ¶ Ks. luvut 2.7 ja 11.3 ja ks. myös input/output. Syötettä on esimerkiksi sovelluksen käyttäjän näppäimistöllään ohjelmalle välittämä tieto. Jotkin ohjelmat vastaanottavat syötettä tiedostoina. Myös käyttäjän toimista seuraavat käyttöliittymätapahtumat voidaan lukea eräänlaiseksi syötteeksi.

säiliö

container muuttuja, jota käytetään kokoelman muokkaamiseen ¶ Yksi muuttujien rooleista. Ks. luku 4.2.

tapahtuma

event toiminto tai sattumus, johon ohjelma voi reagoida ¶ Ohjelmia voi laatia tapahtumavetoisiksi. Tällaisessa ohjelmassa havaituista tapahtumista välitetään tieto kyseisenlaisiin tapahtumiin erikoistuneille tapahtumankuuntelijoille. Näin tehdään usein esimerkiksi graafisissa käyttöliittymissä. Ks. myös käyttöliittymätapahtuma.

tapahtumankuuntelija

event listener ohjelman osa, joka on määritelty vastaanottamaan tieto tietynlaisista tapahtumista ¶ Tällä kurssilla tarkoitamme tapahtumankuuntelijalla oliota, jolle ilmoitetaan tapahtumista ja määrittelee, millainen tapahtumankäsittelijä tällöin suoritetaan; ks. luvut 3.1 ja 12.4. Joissain muissa yhteyksissä termit "tapahtumankuuntelija" ja "tapahtumankäsittelijä" merkitsevät keskenään samaa.

tapahtumankäsittelijä

event handler ohjelman osa, esimerkiksi funktio, joka määrittelee, mitä tietynlaisen tapahtuman sattuessa tulee kyseisessä ohjelmassa tapahtua ¶ Tapahtumankäsittelijä voi esimerkiksi sisältää sen ohjelmakoodin, joka suoritetaan, kun käyttäjä painaa tiettyä nappulaa ohjelman käyttöliittymässä. Tapahtumankäsittelijä kytketään yleensä tapahtumankuuntelijaan; ks. luvut 3.1 ja 12.4.

tapausluokka

case class Scala-ohjelmaan case-sanaa käyttäen määritelty luokka, jolle tulee implisiittisesti määritellyksi eräitä ominaisuuksia ¶ Tapausluokissa ei sinänsä ole mitään sellaista, mitä ei voisi luokalle muutoinkin määritellä, mutta case-sana on helppo tapa lisätä luokkaan tietyt ominaisuudet. Näihin ominaisuuksiin kuuluvat esimerkiksi seuraavat: 1) tapausluokan ilmentymän voi "purkaa osiinsa" kätevästi match-käskyyn kirjatulla hahmolla; luvut 4.4 ja 7.4); 2) tapausluokkien toString-metodi on muiden olioiden oletusarvoista toString-toteutusta havainnollisempi; ja 3) tapausluokan olioihin sovellettuna ==-operaattori vertailee ilmentymämuuttujien arvojen samuutta (eikä sitä, onko kyse viittauksista samaan olioon, kuten tuo operaattori oletusarvoisesti tekee; luku 3.3). Tapausluokat eivät ole näkyvästi esillä O1-kurssilla mutta niitä kyllä käytetään Scalassa laajasti.

taulukko

array eräänlainen muuttuvatilainen mutta kooltaan muuttumaton kokoelma, jonka alkiot ovat indeksien mukaisessa järjestyksessä ¶ Ks. luku 12.1 ja vrt. esim. vektori ja puskuri. Taulukko on monissa ohjelmointikielissä, mm. Scalassa, eräänlainen "peruskokoelmatyyppi", jonka avulla on toteutettu monia muita kokoelmatyyppejä.

tavu

byte kahdeksan bitin muodostama kokonaisuus ¶ Ks. luku 5.4.

tavukoodi

bytecode eräistä välikieliksi sopivista kielistä käytetty nimitys ¶ Ks. luku 5.4. Mm. sitä välikieltä, jolle Scala-ohjelmia yleensä käännetään ja jota Java-virtuaalikone suorittaa, sanotaan tavukoodiksi.

tehokkuus

efficiency ohjelman resurssienkäytön määrää kuvaava suure ¶ Tehokkuudella tarkoitetaan erityisesti ohjelman vaatimaa suoritusaikaa ja myös sen vaatimaa muistitilaa. Tehokkuutta käsitellään lähinnä muilla ohjelmointikursseilla; ks. kuitenkin esim. luvut 5.5, 12.1, 12.2 ja 7.2.

tekoäly

artificial intelligence (AI) 1) (perinteisesti:) mm. tietojenkäsittelytiedettä ja psykologiaa yhdistelevä tutkimusalue, joka pyrkii mallintamaan ihmismieltä ja keinotekoisesti jäljittelemään sitä esimerkiksi tietokoneohjelmissa; 2) (nykyään arkikielessä ja muutenkin:) lähes mikä tahansa sovellus, jonka toiminta luo (nyky)ihmiselle vaikutelman älykkyydestä tai sälyttää koneelle tehtäviä, jotka perinteisesti on hoitanut ihminen ¶ Jälkimmäisessä merkityksessä tekoälykäs ohjelma ei monesti lainkaan pyri ihmismäiseen ajatteluun. Monet nykyään tekoälyksi kutsutut ohjelmat perustuvat koneoppimiseen. Tekoäly jaotellaan monesti suppeaan ja yleiseen tai heikkoon ja vahvaan. Ks. luku 7.2.

tekstialue

text area tekstin syöttämisen ja muokkaamisen mahdollistava GUI-komponentti; erityisesti: tällainen komponentti, jossa on useita rivejä ¶ Vrt. tekstikenttä.

tekstikenttä

text field tekstin syöttämisen ja muokkaamisen mahdollistava GUI-komponentti; erityisesti: tällainen komponentti, jossa on vain yksi rivi ¶ Vrt. tekstialue.

tekstikonsoli

text console ympäristö, johon ohjelman tuloste ilmestyy näkyviin tekstimuodossa ja josta jotkin ohjelmat myös lukevat näppäimistösyötettä ¶ Moneen ohjelmointiympäristöön sisältyy tekstikonsoli; esimerkiksi IntelliJ’ssä on sellainen. Scala-ohjelman println-käskyt tyypillisesti tulostavat tekstikonsoliin. Joidenkin ohjelmien käyttöliittymä toimii kokonaan tekstikonsolissa eikä ole graafinen; ks. esim. luku 2.7. Usein sanotaan "tekstikonsolin" sijaan vain "konsoli".

tekstitiedosto

(plain) text file tiedosto, jonka sisältämä data on tarkoitettu tulkittavaksi (vain) kirjoitusmerkeiksi ¶ Ks. luvut 5.4 ja 11.3.

testaus

testing ohjelman tutkiminen virheiden ja muiden ongelmien havaitsemiseksi; erityisesti: ohjelman tai sen osien suorittaminen ajonaikaisten ja loogisten virheiden havaitsemiseksi ¶ Yksinkertaisimmillaan ohjelmaa, funktiota tai luokkaa voi testata koekäyttämällä sitä valituilla parametriarvoilla tai syötteillä. Määrätietoisemmassa ohjelmistokehityksessä laaditaan usein ns. yksikkötestejä, joilla ohjelman eri osia voi testata järjestelmällisesti, toistuvasti ja ainakin osin automaattisesti; tähän on olemassa aputyökaluja, joita käsitellään jatkokursseilla.

this

this (mm. Scalassa:) erityinen parametrimuuttuja, joka on kaikilla metodeilla ilman erillistä määrittelyä ja joka viittaa siihen olioon, jonka metodia on kutsuttu ¶ Ks. luku 2.2.

tiedon piilottaminen

information hiding ohjelmien suunnitteluun liittyvä periaate, jonka mukaan rajapinnat tulee erottaa toteutuksista ¶ "Piilottamisella" tarkoitetaan sitä, ettei ohjelman osan (esim. luokan) käyttäjän tarvitse olla riippuvainen kuin siitä rajapinnasta, jonka hän "näkee". Käyttäjä voi "unohtaa" toteutuksen tai olla siitä kokonaan tietämätön. Kun toteutustekniset seikat on piilotettu rajapinnan taakse, niin niitä voi vapaasti muokata ohjelman kehittyessä (esimerkiksi tehokkuuden parantamiseksi): kunhan rajapinta pysyy samana, niin muutoksia ei tarvita muualle ohjelmaan, josta tätä osaa käytetään. Ks. luku 3.2.

tiedosto

file tietokoneen varastoima tietoresurssi; erityisesti: kiintolevylle tai muuhun massamuistiin tallennettu tietoresurssi ¶ Ks. myös tekstitiedosto.

tietokone

computer laite, joka käsittelee tietoa suorittamalla ohjelmia ¶ Tietotekniset järjestelmät perustuvat tietokoneisiin. Tietokone ei välttämättä ole elektroninen mutta yleensä on.

tietorakenne

data structure jollakin tietyllä tavalla jäsennetty kokonaisuus, johon tietokone varastoi tietoa ¶ Sanaa käytetään erityisen usein (ja joskus ainoastaan) kokonaisuuksista, jotka on suunniteltu suurienkin tietomäärien tehokkaaseen käsittelyyn, kuten alkiokokoelmien toteutuksista. Myös tiedostoilla on oma sisäinen tietorakenteensa. Tällä kurssilla käytämme sanaa hyvin laajassa mielessä ja viittaamme sillä suhteellisen yksinkertaisiinkin rakenteisiin: joissakin yhteyksissä sanomme esimerkiksi oliota muuttujineen eräänlaiseksi tietorakenteeksi.

tietotekninen järjestelmä

computer system tietokonelaitteiston ja ohjelmien yhdistelmä ¶ Tietoteknisiä järjestelmiä ovat eritoten yleiskäyttöiset tietokonejärjestelmät ja sulautetut järjestelmät.

tietotyyppi

data type määritelmä tietynlaisesta tiedosta ja siitä, mitä tuollaisella tiedolla voi tehdä ¶ Ks. esim. luvut 1.3 ja 2.3. Usein puhutaan "tietotyyppien" sijaan vain "tyypeistä". Ohjelmointikieliin on yleensä määritelty valmiita tietotyyppejä yleisiin tarpeisiin; esimerkiksi Scalan tietotyyppi Int kuvaa kokonaislukuja ja määrittelee mm. sen, että kokonaislukuja voi laskea yhteen. On myös yleistä, että ohjelmoija voi itse määritellä uusia tietotyyppejä. Ks. myös tyyppiparametri, staattinen tyyppi, dynaaminen tyyppi ja luokka.

tila

state tietyllä ajanhetkellä varastoituna olevan tiedon muodostama kokonaisuus ¶ Ohjelmoinnissa "tila" viittaa eritoten tietokoneen muistiin tallennettuun tietoon, jota ohjelma käsittelee. Ohjelma-ajolla kokonaisuutena on tila; esimerkiksi sijoitukset var-muuttujiin muuttavat tilaa, jolloin ohjelman tila voi vaihdella ajanhetkestä toiseen ohjelman suorittamisen aikana. Funktiot voidaan luokitella vaikutuksellisiin ja vaikutuksettomiin sen perusteella, voivatko ne vaikuttaa ohjelman tilaan. Olio-ohjelmassa olioilla on kullakin oma tila (ks. esim. luku 2.1), ja olio voi olla joko muuttuvatilainen tai tilaltaan muuttumaton; olioiden tilat ovat osa koko ohjelma tilaa. Jotkin ohjelmointiparadigmat eroavat toisistaan ratkaisevasti siinä suhteessa, miten tilaa ja tilanmuutoksia mallinnetaan.

tilapäissäilö

temporary muuttuja, jota käytetään väliaikaisesti apuna tietyn algoritmin toteutuksessa ¶ Yksi muuttujien rooleista; ks. luku 2.6.

tiukka

strict lausekkeet vähintään kerran evaluoiva ¶ Ks. luku 7.2. Tämä adjektiivi kuvaa erästä tapaa, jolla lausekkeita voidaan evaluoida. Tiukasti evaluoitu parametri on parametri, jonka arvon määräävä lauseke evaluoidaan vähintään kerran riippumatta siitä, käytetäänkö tuota arvoa funktion suorituksen aikana todella. Tiukasti evaluoitu kokoelma on kokoelma, jonka kaikki alkiot kerätään talteen muistiin riippumatta siitä, tullaanko jokaista niistä käyttämään. Useimmissa ohjelmointikielissä evaluointi on tiukkaa. Näin on tavallisesti myös Scalassa: parametrit ovat tiukasti evaluoituja by value -parametreja sikäli kun ei toisin määritellä, ja yleisimmät kokoelmat (vektorit, listat, hakurakenteet ym.) ovat tiukkoja. (Nämä työkalut ovat lisäksi hanakoita, koska evaluointi tehdään aikaisessa vaiheessa eikä vasta tarvittaessa.) Vastakohta: väljä.

toString

toString (Scala-kielessä:) metodi, jonka tehtävänä on palauttaa merkkijonomuotoinen kuvaus oliosta ¶ Ks. luku 2.5. Jonkinlainen toString-metodi on määritelty kaikille Scala-olioille, ja esimerkiksi "oliontulostamiskäsky" println(olio) tulostaa merkkijonokuvauksen oliosta eli kutsuu oliolle toString-metodia ja tulostaa sen palauttaman merkkijonon (kuten println(olio.toString)). toString-metodit ovat avuksi mm. REPLissä ja ohjelmaa debugatessa, ja niiden palauttamia merkkijonoja voi muutenkin käyttää ohjelman toteutuksessa apuna.

toteutus

implementation 1) tapa, jolla jokin abstraktimpi malli, suunnitelma tai algoritmi käytännössä toimii; 2) se osa jostakin kokonaisuudesta, jonka tunteminen ei ole välttämätöntä tuon kokonaisuuden käyttämiseksi ¶ Sanaa käytetään ohjelmoinnin yhteydessä usealla erillisellä mutta toisiinsa liittyvällä tavalla. Esimerkkejä: 1) ohjelma tai aliohjelma voi olla jonkin yleisemmän algoritmin toteutus; 2) ohjelman osalla kuten luokalla voi olla julkinen rajapinta, joka määrää, miten tuota osaa käytetään, sekä piilotettu toteutus, joka määrää, miten tietokone osaa käytettäessä toimii; 3) funktiolla on puumerkki, joka kuvaa sen käyttötapaa, ja runko, joka toimii funktion toteutuksena ja jota funktion kutsujan ei tarvitse tuntea. Tällä yleisellä sanalla on tietenkin myös muita merkityksiä, jotka sopivat ohjelmointiinkin (esim. "suunnitella ohjelma ja sitten toteuttaa suunnitelma").

totuusarvo

truth value arvo, joka kertoo jonkin väittämän paikkansapitävyydestä; erityisesti: arvo, joka kertoo, onko väittämä tosi vai epätosi ¶ Ohjelmoinnissa usein käytetään Boolen logiikkaa, jossa väittämät ovat yksiselitteisesti joko tosia tai epätosia; ks. luku 3.3 ja Boolean.

try

try (Scala-kielessä:) poikkeustenkäsittelyssä käytetty varattu sana, jolla aloitetaan lohko, jonka suorittaminen voi epäonnistua ajonaikaisen virheen vuoksi

tulkki

interpreter apuohjelma, joka suorittaa annettua ohjelmaa muuntaen sen tarvittaessa konekieleksi ¶ Esimerkiksi Java-virtuaalikoneen keskeinen osa on tavukooditulkki. Ks. luku 5.4 ja vrt. kääntäjä.

tulostaa

print (tietokoneesta:) kirjoittaa kirjoitusmerkkejä ¶ Ohjelmoinnin yhteydessä tulostamisella ei useinkaan tarkoiteta tulostimen eli printterin käyttöä. Esimerkiksi tietokoneen näytölle tai tekstitiedostoon voi tulostaa.

tunnus

identifier ohjelman osalle annettu nimi ¶ Esimerkiksi muuttujien, funktioiden ja luokkien nimiä sanotaan joskus tunnuksiksi.

tuoreimman säilyttäjä

most-recent holder muuttuja, jota käytetään pitämään kirjaa viimeisimmästä arvosta jossakin arvojen sarjassa ¶ Yksi muuttujien rooleista. Tuoreimman säilyttäjässä voidaan esimerkiksi pitää kirjaa viimeisimmästä arvosta, joka on asetettu olion ominaisuudelle (luku 2.6), tai viimeisimmästä kokoelman alkiosta, joka on käyty läpi (luku 5.5).

tyhje

whitespace character whitespace-merkki

tyhjä merkkijono

empty string merkkijono, jossa ei ole yhtään merkkiä eli jonka pituus on nolla ¶ Tyhjä merkkijonokin on kuitenkin olemassa oleva merkkijono (Scalassa String-tyyppinen olio) toisin kuin null-viittaus. Ks. luvut 1.4 ja 4.1.

tyylikäytäntö

coding conventions ohjeisto siitä, millaista ohjelmointityyliä suositaan ¶ Tyylikäytännöillä parannetaan ohjelmien luettavuutta. Eri ohjelmointikielille on yleensä omat tyylikäytäntönsä, ja samallekin kielelle on yleensä useita vaihtoehtoisia; esimerkiksi eri yrityksillä voi olla omat suosituksensa tai -määräyksensä. Ohjelmointi 1:n tyyliopas kuvaa erään tyylikäytännön.

tyyppi

type (ohjelmoinnin yhteydessä yleensä:) sama kuin tietotyyppi

tyyppiannotaatio

type annotation sama kuin tyyppimäärittely

tyyppihierarkia

type hierarchy tietotyyppien välisten ylä- ja alakäsitesuhteiden kokonaisuus, tyyppien "sukupuu" ¶ Käytämme sanaa kuvaamaan niin piirreluokkiin kuin periytymiseenkin perustuvia tyyppien suhteita; ks. luvut 7.3 ja 7.5.

tyyppijärjestelmä

type system säännöstö, joka määrää miten tietotyyppejä käytetään jossakin ohjelmointikielessä ¶ Ks. staattinen ja dynaaminen tyypitys sekä tyyppiturvallisuus.

tyyppimäärittely

type annotation lähdekoodiin kirjoitettu merkintä ohjelman osan staattisesta tietotyypistä ¶ Tyyppimäärittelyt voivat selkeyttää ohjelmaa ja välillisesti parantaa ohjelman suoritustehokkuutta; toisaalta tyyppimäärittelyt voivat myös tarpeettomasti hankaloittaa ohjelmoijan työtä. Monissa staattisesti tyypitetyissä ohjelmointikielissä (kuten vaikkapa Java) esimerkiksi muuttujien ja palautusarvojen tyypit on aina kirjoitettava ohjelmakoodiin tyyppimäärittelyin. Dynaamisesti tyypitetyissä kielissä (kuten vaikkapa Python) tyyppimäärittelyjä ei tavallisesti kirjoiteta lainkaan. Scalassa tyyppimäärittelyjä on aina luvallista kirjata koodiin eksplisiittisesti, mutta tyyppipäättelyn vuoksi se ei usein ole tarpeen; ks. luku 1.8. Kuitenkin esimerkiksi tyhjää alkiokokoelmaa luodessa (luku 1.5), funktion parametrimuuttujia määritellessä sekä kuormitettujen ja rekursiivisten funktioiden yhteydessä tyyppimäärittelyjen käyttö voi Scalassakin olla välttämätöntä. Tapauksesta riippuen tyyppimäärittelyjen vapaaehtoinen kirjaaminen Scala-koodiin auttaa kääntäjää tuottamaan selkeämpiä virheilmoituksia tai parantaa koodin luettavuutta. Voi olla hyvä ajatus merkitä tyypit ainakin Scala-luokkien julkisille jäsenille.

tyyppiparametri

type parameter eräiden luokkien ja metodien vaatima lisämääre, jolla täsmennetään, millaisesta tietotyypistä on kyse ¶ Esimerkiksi Scala-ohjelmassa monia alkiokokoelmia luodessa on välitettävä tyyppiparametri, joka kertoo kokoelman alkioiden staattisen tietotyypin; ks. esim. luvut 1.5, 4.3 ja 8.1. Scalassa tyyppiparametrit ovat muiden tyyppitietojen tapaan usein pääteltävissä automaattisesti.

tyyppipäättely

type inference automaattinen lausekkeiden ja muuttujien tietotyyppien määrittäminen staattisesti ¶ Esimerkiksi Scala-kieleen tyyppipäättely liittyy kiinteästi. Ks. luku 1.8. Aihetta sivutaan myös mm. luvuissa 3.5 ja 7.3.

tyyppiturvallisuus

type safety ohjelmointikieltä kuvaileva ominaisuus, joka kertoo siitä, kuinka voimakkaasti kieli valvoo tietotyyppeihin liittyvien rajoitusten noudattamista ¶ Ks. luku 1.8. Tyyppiturvallisessa kielessä tietyntyyppisellä arvolla ei voi tehdä kuin sellaisia asioita, joita arvon tietotyyppi nimenomaisesti sallii. Scala on huomattavan tyyppiturvallinen kieli, ja Scala-työkalut varoittavat ns. tyyppivirheistä yleensä käännösaikaisilla virheilmoituksilla. Ks. myös staattinen tyypitys.

tyyppiyhteensopiva

conformant, type compatible (tietotyypeistä:) yhteensopiva siten, että yhden tyyppisiä arvoja voi käyttää toisentyyppisten arvojen paikalla ¶ Esimerkki: Jos Scala-ohjelman Opiskelija-luokka on Ihminen-luokan aliluokka, niin sen määrittelemä Opiskelija-tyyppi on tyyppiyhteensopiva Ihminen-tyypin kanssa ja Ihminen-tyyppiseen muuttujaan on laillista sijoittaa viittaus mihin tahansa Opiskelija-luokan ilmentymään. Kaikki Scala-tyypit ovat tyyppiyhteensopivia Any-tyypin kanssa. Ks. myös Liskovin periaate.

täsmäkieli

domain-specific language ohjelmointikieli, joka ei ole yleiskäyttöinen vaan sopii käytettäväksi nimenomaisen aihealueen yhteydessä ¶ Ks. luku 10.3.

täydellinen nimi

fully qualified name ohjelman osan koko nimi, joka sisältää myös pakkauksen nimen ¶ Esimerkiksi Scalassa Int-tietotyypin täydellinen nimi on scala.Int ja funktion sqrt täydellinen nimi on scala.math.sqrt.

Unicode

Unicode eräs merkistöstandardi ¶ Ks. luvut 5.4 ja 5.6. Unicode-standardi määrittelee tavan, jolla kutakin laajaan merkistöön kuuluvaa merkkiä vastaa yksiselitteisesti tietty luku. Sitä käytetään mm. Scalassa ja laajasti muutenkin.

Unit

Unit 1) yksikkötyypin nimi mm. Scalassa; 2) yksikkötyypin ainoaa arvoa merkitsevä Scala-kielinen literaali ¶ Ks. luvut 1.6 ja 4.3. Unit-arvoa käytetään mm. merkkinä siitä, ettei funktiolla ole merkityksellistä palautusarvoa. Scalan Unit-literaali kirjoitetaan tyhjinä kaarisulkeina: ().

vahva tekoäly

strong AI tekoäly, joka käsittelee ja yhdistelee laajoja kokonaisuuksia eikä ole sidottu tiettyyn sovellusalueeseen kuten heikko tekoäly ¶ Tarkoittaa melkein samaa kuin yleinen tekoäly, minkä lisäksi vahvaan tekoälyyn saatetaan liittää ajatus ihmismäisestä tietoisuudesta ja ehkä tunteistakin. Vahva tekoäly on satumaisen kunnianhimoinen tavoite; ne nykyiset käytännön sovellukset, joita tekoälyksi kutsutaan, edustavat heikkoa tekoälyä.

vaikutuksellinen funktio

effectful function funktio, joka kutsuttaessa muuttaa ohjelman tilaa ainakin joissakin tapauksissa ¶ Ks. luvut 1.6, 1.7 ja 11.2, ja vrt. vaikutukseton funktio. Luemme vaikutuksellisiksi esimerkiksi sellaiset funktiot, jotka muuttavat puskurin sisältöä, jonkin olion ilmentymämuuttujan arvoa tai tulostavat merkkejä tietokoneen ruudulle. Toisaalta esimerkiksi pelkkää lausekkeiden evaluoimista, ajan kulumista laskentaan, tai kutsupinon käyttöä ei tavallisesti lueta vaikutukseksi. Yleisemmin sanoen vaikutuksellisiksi luetaan sellaiset funktiot, joiden suorittaminen on ohjelman oikean toiminnan kannalta merkityksellistä, vaikka palautusarvo jo tiedettäisiinkin (luku 11.2). Vaikutukselliset funktiot voivat olla hyödyllisiä, vaikka eivät palauttaisikaan merkityksellistä arvoa; toisaalta ne eivät ole arvoltaan läpinäkyviä. (O1:n ulkopuolella termistö vaihtelee. Vaikutuksellisia funktioita sanotaan usein myös "sivuvaikutuksellisiksi", ja jotkut ohjelmoijat käyttävät effect-sanaa muussa merkityksessä esim. puhtaasti funktionaalisessa ohjelmoinnissa; ks. esim. What do “effect” and “effectful” mean in functional programming?.)

vaikutukseton funktio

effect-free function funktio, joka ei koskaan vaikuta ohjelman tilaan ¶ Ks. luvut 1.6, 1.7 ja 11.2 ja vrt. vaikutuksellinen funktio. Tällaisia funktioita sanotaan myös "sivuvaikutuksettomiksi". Vaikutuksettomia funktioita kutsutaan niiden palautusarvon määrittämiseksi. Ne muistuttavat koulumatematiikasta tuttuja funktioita. Osa vaikutuksettomista funktioista on puhtaita. Ks. myös arvon läpinäkyvyys.

vakio

constant muuttuja, jonka arvo on tiedossa jo ennen ohjelma-ajoa ja joka edustaa ohjelmassa pysyvästi tätä arvoa ¶ Ks. luku 2.6 ja kurssin tyyliopas. Vakiot ovat aina myös kiintoarvoja. Scalassa ne ovat käytännössä aina val-muuttujia.

val-muuttuja

val(ue variable) (Scala-kielessä:) muuttuja, jonka arvoa ei voi vaihtaa toiseksi ¶ Ks. luku 1.4 ja vrt. var-muuttuja. val-muuttujat määritellään yleensä val-sanaa käyttäen, mutta myös eräät erikoismuuttujat kuten parametrimuuttujat ja for-silmukassa käytetyt tuoreimman säilyttäjät ovat Scalassa val-muuttujia. Kaikki val-muuttujat eivät ole vakioita, mutta vakiot ovat kyllä yksi val-muuttujien käyttötarkoitus.

var-muuttuja

var(iable) (Scala-kielessä:) muuttuja, joka määritellään var-sanalla ja jonka arvon voi vaihtaa sijoittamalla vanhan arvon tilalle uuden ¶ Ks. luku 1.4 ja vrt. val-muuttuja.

varattu sana

reserved word ohjelmointikieleen kuuluva sana, jolla on kielessä erityismerkitys tai jota ei muusta syystä voi käyttää tunnuksena ¶ Scala-kielessä on noin 50 varattua sanaa, joista esimerkkejä ovat val, def, import, true, this, object, class, new, private, if, match, case ja for; koko luettelo löytyy Scala-koosteemme lopusta. Perustietotyyppien nimet kuten Int ja String eivät varsinaisesti ole varattuja sanoja, mutta niitäkin on sekaannusten välttämiseksi parempi olla käyttämättä tunnuksina.

varoitus

warning ohjelmointityökalun antama ilmoitus, joka kertoo epäillystä ongelmasta ohjelmassa muttei kuitenkaan välttämättä virheestä ¶ Ks. luku 3.5.

vektori

vector eräänlainen muuttumaton kokoelma, jonka alkioilla on kullakin oma indeksinsä, jonka perusteella tuohon alkioon pääsee käsiksi ¶ Ks. luku 4.2. Vrt. esim. taulukko ja puskuri.

vertailuoperaattori

relational (or comparison) operator operaattori, jolla voidaan verrata kahta arvoa ja muodostaa vertailun tulosta kuvaava totuusarvo ¶ Esimerkiksi vertailuoperaattorilla < voidaan muodostaa lauseke 10 < 100, jonka arvo on true. Ks. luku 3.3 ja ks. myös logiikkaoperaattori.

viesti

message olion komentamiseen käytetty käsky, olion metodin kutsu ¶ Olio-ohjelmointi perustuu ajatukseen, että olioille voi lähettää niiden vastuualueeseen liittyviä viestejä, joihin ne reagoivat; oliot voivat myös lähettää viestejä toisilleen reagoidessaan itse vastaanottamiinsa viesteihin. Ks. luku 2.1.

View

View O1Library-kirjaston tarjoama luokka graafisten käyttöliittymien kuvaamiseen ¶ View-olio tarjoaa näkymän johonkin aihealueen mallina toimivaan olioon. Sille voi määritellä tapahtumankäsittelijöitä. Ks. luvut 2.7, 3.1 ja 3.6 sekä luokan dokumentaatio; Scalaa kootusti -sivulla on myös esimerkki. (O1:n View-luokan lisäksi Scala API:ssa on myös ihan toinen tyyppi, joka on sattumoisin myös nimeltään View ja jonka avulla kokoelmaa voi käsitellä väljästi. Tätä toista View’ta et O1:llä tarvitse mihinkään.)

viittaus

reference arvo, joka ilmaisee, mistä tietokoneen muistissa jokin tieto löytyy ¶ Ks. esim. luvut 1.5, 2.3 ja 5.4. Scala-ohjelmissa viittaukset osoittavat muistiin tallennettuihin olioihin.

virhe

error, defect 1) ohjelmointikielen sääntöjen vastainen tai ohjelmoijan tarkoituksesta poikkeava piirre ohjelmassa, bugi; 2) sama kuin ajonaikainen virhe ¶ Virheitä voidaan luokitella esimerkiksi käännösaikaisiin, ajonaikaisiin ja loogisiin. Joissain teknisissä yhteyksissä sanalla "virhe" tarkoitetaan vain ajonaikaisia virheitä.

virta

stream (Scalassa:) laiskalistaa erittäin paljon muistuttava kokoelma, jota käytettiin kielen vanhemmissa versioissa ¶ Scalan versiosta 2.13 alkaen Stream-luokan on korvannut LazyList, mutta vanhaa nimeä käytetään edelleen joissakin lähteissä. Sanalla "virta" on tietotekniikassa myös useita muita enemmän tai vähemmän samansuuntaisia merkityksiä.

virtuaalikone

virtual machine tietokone, joka on virtuaalinen eikä fyysinen ¶ Termiä käytetään tietotekniikassa eri yhteyksissä. O1:n ja Scala-ohjelmoinnin kannalta oleellisimmat virtuaalikoneet ovat tietokoneen kaltaisesti toimivia ohjelmia, joiden avulla voi ajaa toisia ohjelmia; ks. luvut 5.4 ja 10.3. Tällainen virtuaalikone osaa vastaanottaa tietyn kielisiä ohjelmia; voi sanoa, että sen vastaanottama kieli on virtuaalikoneen simuloiman tietokoneen konekieltä. Virtuaalikone sisältää tulkin (tai on tulkki, näkökulmasta riippuen), jonka avulla se muuntaa annetun ohjelman todelliseksi konekieleksi.

virtuaalinen

virtual keinotekoinen, matkittu, simuloitu, todellista muistuttava tai jokin näiden yhdistelmä; ikään kuin — vaikkei varsinaisesti tai virallisesti — tietynlainen ¶ Ks. myös virtuaalikone.

välikieli

intermediate language kieli, jolle lähdekoodia käännetään mutta joka ei ole konekieltä; erityisesti: virtuaalikoneen "konekielenä" toimiva kieli ¶ Ks. luku 5.4.

välitön aliluokka

immediate subclass, direct subclass suoraan toiselta perivä luokka; tyyppihierarkiassa heti yhtä alemmassa "polvessa" oleva aliluokka ¶ Vrt. välillinen aliluokka eli jokin välittömän aliluokan omista aliluokista.

välitön yliluokka

immediate superclass, direct superclass suoraan peritty luokka; tyyppihierarkiassa yhtä ylemmässä "polvessa" oleva yliluokka ¶ Vrt. välillinen yliluokka eli jokin välittömän yliluokan omista yliluokista.

väljä

non-strict lausekkeita valikoivasti evaluoiva ¶ Ks. luku 7.2. Tämä adjektiivi kuvaa erästä tapaa, jolla lausekkeita voidaan evaluoida. Väljästi evaluoitu parametri on parametri, jonka arvon määräävä lauseke evaluoidaan ainoastaan, jos tuota arvoa todella tarvitaan ohjelma-ajon aikana; by name -parametrit voivat olla väljiä. Väljästi evaluoitu kokoelma puolestaan on kokoelma, jonka alkioista ei muodosteta kuin ne, joita käytetään; tällaisia kokoelmia ovat Scalassa esimerkiksi laiskalistat. Vastakohta: tiukka. Ks. myös laiska evaluointi.

while-silmukka

while loop silmukka, joka on muodostettu while-avainsanaa silmukan alussa käyttäen ja joka toistaa toimenpidettä nolla tai useampia kertoja ¶ Ks. luku 9.1.

WETWET

WETWET DRY-periaatteen rikkominen ¶ Sanoista write everything twice write everything twice.

whitespace

whitespace tyhjää vaaka- tai pystytilaa kuvaavat, "näkymättömät" kirjoitusmerkit ¶ Esimerkiksi välilyöntejä ja rivinvaihtomerkkejä sanotaan whitespaceksi. Mm. suomennosta "tyhje" on ehdotettu, mutta vakiintunutta suomenkielistä termiä ei ole.

yhtenäinen osoitusperiaate

uniform access principle ks. käyttötavan yhtenevyys

yksikkötyyppi

unit type tietotyyppi, jolla on vain yksi arvo ja jolla ei siksi voi ilmaista informaatiota ¶ Ks. luku 1.6. Yksikkötyyppisiä arvoja on vain yksi. Mm. Scalassa tämä arvo on nimeltään Unit.

yksisuuntainen lippu

one-way flag muuttuja, jolla on yksi kahdesta arvosta ja jonka arvoa ei vaihdeta, kun se on kerran vaihdettu alkuarvosta toiseksi ¶ Yksi muuttujien rooleista, eräänlainen lippu. Ks. luku 5.6.

yksittäisolio

singleton object 1) olio, joka on määritelty ohjelmakoodissa yksittäistapauksena eikä luokan kautta; 2) tällaisen olion määrittely ohjelmakoodissa ¶ Ks. luvut 2.1, 2.2 ja 5.3 ja vrt. ilmentymä. Scalassa yksittäisoliot voivat olla luokan kumppaniolioita tai itsenäisiä.

yksityinen

private ulospäin näkymätön; rajapintaan kuulumaton; vain sisäiseen käyttöön tarkoitettu; toteutukseen kuuluva ¶ Ks. luku 3.2 ja vrt. julkinen.

yleinen tekoäly

general(-purpose) AI tekoäly, joka käsittelee ja yhdistelee laajoja kokonaisuuksia eikä ole sidottu tiettyyn sovellusalueeseen kuten suppea tekoäly ¶ Vahva tekoäly tarkoittaa melkein samaa. Yleinen tekoäly on satumaisen kunnianhimoinen tavoite; ne nykyiset käytännön sovellutukset, joita tekoälyksi kutsutaan, edustavat suppeaa tekoälyä.

yleiskäyttöinen tietokone

general-purpose computer tietokone, jolla ei ole tiettyä sovelluskohdetta vaan joka on suunniteltu käytettäväksi moniin erilaisiin tarkoituksiin ¶ Esimerkiksi tyypilliset pöytätietokoneet ja kannettavat tietokoneet ovat yleiskäyttöisiä. Tällaista tietokonetta voidaan hyödyntää eri tavoin ajamalla siinä erilaisia sovellusohjelmia. Vrt. sulautetut järjestelmät ja ks. luku 1.1.

ylikuormittaa

overload sama kuin kuormittaa

yliluokka

superclass, base class luokka, jolta toinen luokka perii ominaisuuksia ja joka edustaa aliluokkiensa kuvaamien käsitteiden yläkäsitettä ¶ Yliluokan ominaisuudet periytyvät sen aliluokille; ks. luku 7.5. Luokalla voi olla lukuisia välittömiä aliluokkia mutta (Scalassa) vain yksi välitön yliluokka. Vrt. piirreluokka.

Palaute

Tekijät

Tämän oppimateriaalin kehitystyössä on käytetty apuna tuhansilta opiskelijoilta kerättyä palautetta. Kiitos!

Materiaalin luvut tehtävineen ja viikkokoosteineen on laatinut Juha Sorva.

Liitesivut (sanasto, Scala-kooste, usein kysytyt kysymykset jne.) on kirjoittanut Juha Sorva sikäli kuin sivulla ei ole toisin mainittu.

Tehtävien automaattisen arvioinnin ovat toteuttaneet: (aakkosjärjestyksessä) Riku Autio, Nikolas Drosdek, Joonatan Honkamaa, Antti Immonen, Jaakko Kantojärvi, Niklas Kröger, Kalle Laitinen, Teemu Lehtinen, Jaakko Nakaza, Strasdosky Otewa, Timi Seppälä, Teemu Sirkiä, Anna Valldeoriola Cardó ja Aleksi Vartiainen.

Lukujen alkuja koristavat kuvat ja muut vastaavat kuvituskuvat on piirtänyt Christina Lassheikki.

Yksityiskohtaiset animaatiot Scala-ohjelmien suorituksen vaiheista suunnittelivat Juha Sorva ja Teemu Sirkiä. Teemu Sirkiä ja Riku Autio toteuttivat ne apunaan Teemun aiemmin rakentamat työkalut Jsvee ja Kelmu.

Muut diagrammit ja materiaaliin upotetut vuorovaikutteiset esitykset laati Juha Sorva.

O1Library-ohjelmakirjaston ovat kehittäneet Aleksi Lukkarinen ja Juha Sorva. Useat sen keskeisistä osista tukeutuvat Aleksin SMCL-kirjastoon.

Tapa, jolla käytämme O1Libraryn työkaluja (kuten Pic) yksinkertaiseen graafiseen ohjelmointiin, on saanut vaikutteita tekijöiden Flatt, Felleisen, Findler ja Krishnamurthi oppikirjasta How to Design Programs sekä Stephen Blochin oppikirjasta Picturing Programs.

Oppimisalusta A+ luotiin alun perin Aallon LeTech-tutkimusryhmässä pitkälti opiskelijavoimin. Nykyään tätä avoimen lähdekoodin projektia kehittää Tietotekniikan laitoksen opetusteknologiatiimi ja tarjoaa palveluna laitoksen IT-tuki. Pääkehittäjänä on nyt Markku Riekkinen, jonka lisäksi A+:aa ovat kehittäneet kymmenet Aallon opiskelijat ja muut.

A+ Courses -lisäosa, joka tukee A+:aa ja O1-kurssia IntelliJ-ohjelmointiympäristössä, on toinen avoin projekti. Sen suunnitteluun ja toteutukseen on osallistunut useita opiskelijoita yhteistyössä O1-kurssin opettajien kanssa.

Kurssin tämänhetkinen henkilökunta löytyy luvusta 1.1.

Joidenkin lukujen lopuissa on lukukohtaisia lisäyksiä tähän tekijäluetteloon.

a drop of ink
Palautusta lähetetään...