Az Io-ban nincsenek kulcsszavak vagy utasítások, csak kifejezések!
Egy kifejezés szintaxisa:
A true
, false
és nil
azonosítók szingletonok, megpróbálva őket klónozni önmagukat kapjuk
vissza. A true
a logikai igaz érték, a false
a logikai hamis érték, a nil
egy érték hiányát jelzi.
Az Io az objektumok közötti kommunikáció megvalósítására üzeneteket használ. Az üzenet szintaxisát a fenti kifejezés szintaxisnál találjuk.
Az Io-ban minden, ami nem szám, sztring vagy megjegyzés, egy üzenet a három lehetséges forma (normál, operátor vagy értékadás) valamelyikében megadva.
A zárójelek opcionálisak, ha nincsenek argumentumok. A
pontosvessző is opcionális. Az üzeneten belüli pontosvessző vagy
return
az adott üzenetlánc végét jelzi, különben a
részkifejezés a következőképp
értelmezendő: "Használd az eredményét a baloldalnak, mint
a jobboldali üzenet célpontját!" Például:
Minden állítás kifejezés az Io-ban, ezért minden állítás visszatér valamilyen értékkel.
Szintaktikai cukorkák
<operátor üzenet neve><argumentum><másik operátor, új sor vagy pontosvesszo>A nyelv operátorait az alábbi módon lehet kiíratni:
A bal oldalon szereplő számok az operátorok precedenciaszintjét jelzik. A precedenciasorrend zárójelezéssel felülbírálható.
Példák:
Példa: Operátor létrehozása a kizáró vagy műveletre
Üzenetekként vannak megvalósítva. Nevük alfanumerikus karaktert nem
tartalmazhat, kivéve: ";", "_",
""", ". ", vagy egyike a következő szavaknak:
or
, and
, return
::=
Létrehoz egy slotot, létrehoz egy settert, majd beállítja a slot értékét.:=
Létrehoz egy slotot és beállítja az értékét.=
Ha a slot létezik, beállítja az értékét, ha nem létezik, kivételt vált ki.A vezérlési szerkezetek szintaktikai cukorkák nélkül lettek megvalósítva.
Az if
-utasítás függvényként lett megvalósítva.
A feltétel hamisnak tekintendő, ha vagy false
-ra vagy
pedig nil
re értékelődik ki.
Mivel az if az utoljára kiértékelt kifejezés értékével tér vissza, az alábbi if-kifejezések ekvivalensek.
A Smalltalk stílusú ifTrue
, ifFalse
,
ifNil
, ifNonNil
metódusok is használhatók
feltételes elágaztatás megvalósítására.
A ciklus magjában kiadva a break
és a
continue
a ciklus szabályos befejeződését
eredményezik.
Visszatérési értéket explicit módon meghatározni a return
<kifejezés>
üzenettel lehet.
A message reflection segítségével metainformációkat szerezhetünk egy üzenet küldéséről.
Egy üzenet esetében beszélhetünk küldőről, fogadóról és az üzenet paramétereiről, ha vannak. A küldő által küldött üzenetet (kontextussal együtt) a fogadó értékeli ki és hajtja végre.
A call
üzenet segítségével az üzenetküldés folyamatába
pillanthatunk be. A call
értéke egy Call
objektum, melynek segítségével információk nyerhetők ki egy metódus,
illetve blokk hívásáról.
call sender
: az üzenet küldője, azaz metódust, illetve blokkot hívó lokális objektumacall message
: az üzenet, ami a metódust, illetve blokkot aktiváltacall activated
: az aktivált metódus, illetve blokkcall slotContext
: a megtalált slot kontextusacall target
: az üzenet címzettje (a fogadó objektum)