# Tampio vs JavaScript Side-by-side comparisons. Every Tampio program compiles to JavaScript — these show what that translation looks like. ## Hello World **Tampio** ```tampio Kun nykyinen sivu avautuu, teksti "Hei maailma!" näytetään käyttäjälle. ``` **JavaScript** ```js document.avautua = function() { alert("Hei maailma!"); }; document.avautua(); ``` --- ## Function Definition **Tampio** ```tampio Pienen luvun kertoma on riippuen siitä, onko se pienempi tai yhtä suuri kuin yksi, joko yksi tai pieni luku kerrottuna pienen luvun edeltäjän kertomalla. Luvun edeltäjä on se vähennettynä yhdellä. ``` **JavaScript** ```js Number.prototype.f_kertoma = function() { var pieni_luku = this; return (this <= 1) ? 1 : pieni_luku * pieni_luku.f_edeltäjä().f_kertoma(); }; Number.prototype.f_edeltäjä = function() { return this - 1; }; ``` The parameter `pieni luku` ("small number") becomes the variable name in the compiled JS. `se` compiles to `this`. --- ## Variable Declaration **Tampio** ```tampio Olkoon pieni muuttuja uusi muuttuja, jonka arvo on nolla. ``` **JavaScript** ```js var pieni_muuttuja = new muuttuja({ arvo: 0 }); ``` --- ## Class Definition **Tampio** ```tampio Vektorilla on komponentit. ``` **JavaScript** ```js function vektori(vals) { if ("komponentit" in vals) this.komponentit = vals["komponentit"]; else this.komponentit = []; } ``` Fields are constructor parameters. Plural fields become arrays, singular fields become single values. ### Subclass **Tampio** ```tampio Työntekijä on henkilö, jolla on työnantaja. ``` **JavaScript** ```js function tyontekija(vals) { henkilö.call(this, vals); if ("työnantaja" in vals) this.työnantaja = vals["työnantaja"]; } tyontekija.prototype = Object.create(henkilö.prototype); ``` --- ## Method Definition **Tampio** ```tampio Kun nykyinen sivu avautuu, pieneen muuttujaan luetaan luku ja nykyinen sivu näyttää pienen muuttujan arvon kertoman. ``` **JavaScript** ```js HTMLDocument.prototype.avautua = function() { pieni_muuttuja.lukea_luku(); this.write(pieni_muuttuja.f_arvo().f_kertoma()); }; ``` `Kun` = method definition. The self object (`nykyinen sivu`) becomes `this`. Multiple statements separated by commas compile to sequential calls; `ja` marks the last one. --- ## If Statement **Tampio** ```tampio jos lyhyen vektorin dimensio ei ole nolla, niin nykyinen sivu näyttää lyhyen vektorin ensimmäisen komponentin ja lyhyen vektorin häntä painetaan nykyiselle sivulle. ``` **JavaScript** ```js if (lyhyt_vektori.f_dimensio() !== 0) { nykyinen_sivu.näyttää(lyhyt_vektori.f_ensimmäinen_komponentti()); lyhyt_vektori.f_häntä().painetaan(nykyinen_sivu); } ``` --- ## Arithmetic **Tampio** ```tampio pieni luku kerrottuna pienen luvun edeltäjän kertomalla ``` **JavaScript** ```js pieni_luku * pieni_luku.f_edeltäjä().f_kertoma() ``` | Tampio | JS | Second arg case | |---|---|---| | `x lisättynä y:hin` | `x + y` | illative | | `x vähennettynä y:llä` | `x - y` | adessive | | `x kerrottuna y:llä` | `x * y` | adessive | | `x jaettuna y:llä` | `x / y` | adessive | | `x rajattuna y:hin` | `x % y` | illative | --- ## Field Access Field access looks identical to a function call — both use genitive. **Tampio** ```tampio pienen muuttujan arvo # field access pienen luvun kertoma # function call ``` **JavaScript** ```js pieni_muuttuja.arvo // field access pieni_luku.f_kertoma() // function call (note the f_ prefix) ``` The compiler adds an `f_` prefix to function calls to distinguish them from raw field accesses. --- ## Output **Tampio** ```tampio nykyinen sivu näyttää tekstin "Tulos: " nykyinen sivu näyttää pienen luvun kertoman teksti "Virhe!" näytetään käyttäjälle ``` **JavaScript** ```js document.write("Tulos: "); document.write(pieni_luku.f_kertoma()); alert("Virhe!"); ```