Kirjoittaja: map_ (17.12.2009)
Io on Steve Dekorten vuonna 2002 luoma kevyt ja joustava dynaamisesti tyypitetty olio-ohjelmointikieli. Kielen minimaalisuus ilmenee äärimmäisen puhtaana oliomallina: kielessä ei voi tehdä melkein mitään muuta kuin lähettää olioille viestejä (metodikutsuja). Jopa kontrollirakenteet, kuten if
, while
, for
, break
ja try
ovat vain viestejä.
Io:n pelkistetty oliomalli on samankaltainen kuin Smalltalkissa. Perintä on toteutettu prototyyppiperintänä, kuten mm. JavaScriptissä. Io-koodi on dataa, jota Io-koodi voi tutkia ja käsitellä, mikä on tuttu idea Lispistä. Lua:n tavoin Io on helposti sulautettavissa C/C++-ohjelmiin.
"Leppoisaa joulua!" println
Seuraava ohjelma tulostaa Fibonaccin luvut, jotka ovat alle 100:
a := 0 b := 1 while (a < 100, a println c := a + b a = b b = c )
Io:n perussyntaksi on: olio viesti(parametrit)
. Jos olioa ei anneta, viesti menee thisContext-muuttujan osoittamaan olioon, joka on päätasolla oletusolio nimeltä Lobby
. Lobby
:n prototyyppi on Object
, joka osaa vastata mm. kaikkiin kontrollirakenneviesteihin, kuten if
. Leikitäänpä...
# Kaikki metodikutsut kohdistuvat oletusarvoisesti Lobbyyn. # Voimme luoda uuden metodin Objectin viestillä "method" f := method(a, b, a + b) # Lobbylle kutstuaan muuttujan luontimetodia f(1, 2) println # Lobbylle kutsutaan metodia f parametreilla 1 ja 2. # Paluuarvolle kutsutaan metodia println # If-metodia käytetään seuraavasti: if(1 + 1 == 2) then( "hyvä" println ) else( "huono" println ) # Katsotaanpa, miten tämä on toteutettu. if(1 + 1 == 2) # Palauttaa true # Entä, kun true:lle kutsutaan then-metodia? true then("hoi" println) # Tulostaa "hoi" ja palauttaa nil # Ja kun nil:lle kutsutaan else-metodia? nil else("hoi" println) # Ei tulosta mitään. # Toisin päin: if(1 + 1 == 3) # Palauttaa false false then("hoi" println) # Ei tulosta mitään, palauttaa false false else("hoi" println) # Tulostaa "hoi" # if-viesti osaa hoitaa myös lyhennysmerkintätapauksen, jossa se saa kolme argumenttia: if(1 + 1 == 2, "hyvä" println, "huono" println) # Io:ssa on monia mielenkiintoisia viestejä, joilla voi toteuttaa mitä hienoimpia metaohjelmointikikkoja. Tässä pari esimerkkiä. lueA := method(call sender a) # Palauttaa kutsujan paikallinen muuttuja "a" method( a := 13 lueA println # Tulostaa 13 ) call vainKerran := method(toiminto, call message setName("nil") # Vaihdetaan kutsuvassa koodissa metodikutsun kohde ) heh := method( vainKerran("Hyvää " print) # Muuttuu ensimmäisen kutsun jälkeen muotoon nil("Hyvää " print) "joulua!" println ) heh # Hyvää joulua! heh # joulua! heh # joulua!
Ludwig Mies van der Rohe kirjoitti:
Less is more.
Mietelause Io:n syntaksikuvauksessa.