milleks scala? - ut€¦ · nüüd saab tegutseda! • defineeri funktsioon, mis kontrollib kas...
TRANSCRIPT
![Page 1: Milleks Scala? - ut€¦ · Nüüd saab tegutseda! • Defineeri funktsioon, mis kontrollib kas etteantud sõne on pangram: ehk keele kõik tähed esinevad vähemalt ühe korra](https://reader034.vdocuments.mx/reader034/viewer/2022052003/6016b0e32dc43e57e51d64c4/html5/thumbnails/1.jpg)
Milleks Scala?Programmeerimiskeeled 2017
Vesal Vojdani
![Page 2: Milleks Scala? - ut€¦ · Nüüd saab tegutseda! • Defineeri funktsioon, mis kontrollib kas etteantud sõne on pangram: ehk keele kõik tähed esinevad vähemalt ühe korra](https://reader034.vdocuments.mx/reader034/viewer/2022052003/6016b0e32dc43e57e51d64c4/html5/thumbnails/2.jpg)
Aktiivõppe
• Scala osa kohta on olemas suurepärased videoleongud.
• https://www.coursera.org/learn/progfun1/lecture/EQ7BX
• Ja sama materjali katab ka õpik.
• Siin loengus tuleb kaasa teha!
• Loengu fleepi link on nüüd abikeskuses!
![Page 3: Milleks Scala? - ut€¦ · Nüüd saab tegutseda! • Defineeri funktsioon, mis kontrollib kas etteantud sõne on pangram: ehk keele kõik tähed esinevad vähemalt ühe korra](https://reader034.vdocuments.mx/reader034/viewer/2022052003/6016b0e32dc43e57e51d64c4/html5/thumbnails/3.jpg)
Alustame ScalagaNew Project
![Page 4: Milleks Scala? - ut€¦ · Nüüd saab tegutseda! • Defineeri funktsioon, mis kontrollib kas etteantud sõne on pangram: ehk keele kõik tähed esinevad vähemalt ühe korra](https://reader034.vdocuments.mx/reader034/viewer/2022052003/6016b0e32dc43e57e51d64c4/html5/thumbnails/4.jpg)
Alustame ScalagaHetkel kasutage vana SBT versioon: 0.13.16
OLULINE! Probleem oli SBT 1.0.2
versiooniga, aga nüüd on ka olemas SBT 1.0.3, mis töötab
Java 9 puhul paremini.
![Page 5: Milleks Scala? - ut€¦ · Nüüd saab tegutseda! • Defineeri funktsioon, mis kontrollib kas etteantud sõne on pangram: ehk keele kõik tähed esinevad vähemalt ühe korra](https://reader034.vdocuments.mx/reader034/viewer/2022052003/6016b0e32dc43e57e51d64c4/html5/thumbnails/5.jpg)
See nüüd võtab aega!
![Page 6: Milleks Scala? - ut€¦ · Nüüd saab tegutseda! • Defineeri funktsioon, mis kontrollib kas etteantud sõne on pangram: ehk keele kõik tähed esinevad vähemalt ühe korra](https://reader034.vdocuments.mx/reader034/viewer/2022052003/6016b0e32dc43e57e51d64c4/html5/thumbnails/6.jpg)
Erinevad lähenemised ScalaleSiin jätkame FP paradigma propagandat: ideed on tähtsamad kui keel ise!
![Page 7: Milleks Scala? - ut€¦ · Nüüd saab tegutseda! • Defineeri funktsioon, mis kontrollib kas etteantud sõne on pangram: ehk keele kõik tähed esinevad vähemalt ühe korra](https://reader034.vdocuments.mx/reader034/viewer/2022052003/6016b0e32dc43e57e51d64c4/html5/thumbnails/7.jpg)
Gartner Hype CycleJava 8-st alates ei ole ka Scala ja Java erinevus enam nii suur
Image attribution: Jeremykemp at English Wikipedia
![Page 9: Milleks Scala? - ut€¦ · Nüüd saab tegutseda! • Defineeri funktsioon, mis kontrollib kas etteantud sõne on pangram: ehk keele kõik tähed esinevad vähemalt ühe korra](https://reader034.vdocuments.mx/reader034/viewer/2022052003/6016b0e32dc43e57e51d64c4/html5/thumbnails/9.jpg)
Mõtiskleme(moodle quiz!)
![Page 10: Milleks Scala? - ut€¦ · Nüüd saab tegutseda! • Defineeri funktsioon, mis kontrollib kas etteantud sõne on pangram: ehk keele kõik tähed esinevad vähemalt ühe korra](https://reader034.vdocuments.mx/reader034/viewer/2022052003/6016b0e32dc43e57e51d64c4/html5/thumbnails/10.jpg)
Kuidas harjutada süsteemi disain?
![Page 11: Milleks Scala? - ut€¦ · Nüüd saab tegutseda! • Defineeri funktsioon, mis kontrollib kas etteantud sõne on pangram: ehk keele kõik tähed esinevad vähemalt ühe korra](https://reader034.vdocuments.mx/reader034/viewer/2022052003/6016b0e32dc43e57e51d64c4/html5/thumbnails/11.jpg)
Kuidas harjutada süsteemi disain?
![Page 12: Milleks Scala? - ut€¦ · Nüüd saab tegutseda! • Defineeri funktsioon, mis kontrollib kas etteantud sõne on pangram: ehk keele kõik tähed esinevad vähemalt ühe korra](https://reader034.vdocuments.mx/reader034/viewer/2022052003/6016b0e32dc43e57e51d64c4/html5/thumbnails/12.jpg)
Kuidas harjutada süsteemi disain?
Interface Segregation: Exp on plussiga eraldatud Termide list.
Ta ei tea midagi madala taseme detailidest.
![Page 13: Milleks Scala? - ut€¦ · Nüüd saab tegutseda! • Defineeri funktsioon, mis kontrollib kas etteantud sõne on pangram: ehk keele kõik tähed esinevad vähemalt ühe korra](https://reader034.vdocuments.mx/reader034/viewer/2022052003/6016b0e32dc43e57e51d64c4/html5/thumbnails/13.jpg)
Kuidas harjutada süsteemi disain?
Interface Segregation: Exp on plussiga eraldatud Termide list.
Ta ei tea midagi madala taseme detailidest.
Single Responsibility Principle:Sulud käsitleme ühes kohas ja see funktsionaalsus on täiesti Factoris
“enkapsuleeritud”
![Page 14: Milleks Scala? - ut€¦ · Nüüd saab tegutseda! • Defineeri funktsioon, mis kontrollib kas etteantud sõne on pangram: ehk keele kõik tähed esinevad vähemalt ühe korra](https://reader034.vdocuments.mx/reader034/viewer/2022052003/6016b0e32dc43e57e51d64c4/html5/thumbnails/14.jpg)
Katsetage natuke Scala Sheetiga
• Proovige erinevat tüüpi avaldisidef x = …
• Ja siis funktsiooni definitsioonid:def square(x: Double): Double = x * x square(16)
• Proovige ka muuta definitsioonid üleval: kas väärtustub ümber?
![Page 15: Milleks Scala? - ut€¦ · Nüüd saab tegutseda! • Defineeri funktsioon, mis kontrollib kas etteantud sõne on pangram: ehk keele kõik tähed esinevad vähemalt ühe korra](https://reader034.vdocuments.mx/reader034/viewer/2022052003/6016b0e32dc43e57e51d64c4/html5/thumbnails/15.jpg)
Ja nüüd päris klass!(tegelikult objekt…)
![Page 16: Milleks Scala? - ut€¦ · Nüüd saab tegutseda! • Defineeri funktsioon, mis kontrollib kas etteantud sõne on pangram: ehk keele kõik tähed esinevad vähemalt ühe korra](https://reader034.vdocuments.mx/reader034/viewer/2022052003/6016b0e32dc43e57e51d64c4/html5/thumbnails/16.jpg)
Hello World!
object Hello { println("Hello, World!")
def main(args: Array[String]): Unit = { println("Good bye!") } }
![Page 17: Milleks Scala? - ut€¦ · Nüüd saab tegutseda! • Defineeri funktsioon, mis kontrollib kas etteantud sõne on pangram: ehk keele kõik tähed esinevad vähemalt ühe korra](https://reader034.vdocuments.mx/reader034/viewer/2022052003/6016b0e32dc43e57e51d64c4/html5/thumbnails/17.jpg)
Hello World!
object Hello { println("Hello, World!")
def main(args: Array[String]): Unit = { println("Good bye!") } }
Ühe ainsa isendiga klass (static meetodite asemel)
![Page 18: Milleks Scala? - ut€¦ · Nüüd saab tegutseda! • Defineeri funktsioon, mis kontrollib kas etteantud sõne on pangram: ehk keele kõik tähed esinevad vähemalt ühe korra](https://reader034.vdocuments.mx/reader034/viewer/2022052003/6016b0e32dc43e57e51d64c4/html5/thumbnails/18.jpg)
Hello World!
object Hello { println("Hello, World!")
def main(args: Array[String]): Unit = { println("Good bye!") } }
Ühe ainsa isendiga klass (static meetodite asemel)
Scala täidab objektide ja klasside kehasid
(konstruktorite asemel)
![Page 19: Milleks Scala? - ut€¦ · Nüüd saab tegutseda! • Defineeri funktsioon, mis kontrollib kas etteantud sõne on pangram: ehk keele kõik tähed esinevad vähemalt ühe korra](https://reader034.vdocuments.mx/reader034/viewer/2022052003/6016b0e32dc43e57e51d64c4/html5/thumbnails/19.jpg)
Hello World!
object Hello { println("Hello, World!")
def main(args: Array[String]): Unit = { println("Good bye!") } }
Ühe ainsa isendiga klass (static meetodite asemel)
Scala täidab objektide ja klasside kehasid
(konstruktorite asemel)
Seega ei olegi tingimata main meetodi sisse vaja midagi
kirjutada
![Page 20: Milleks Scala? - ut€¦ · Nüüd saab tegutseda! • Defineeri funktsioon, mis kontrollib kas etteantud sõne on pangram: ehk keele kõik tähed esinevad vähemalt ühe korra](https://reader034.vdocuments.mx/reader034/viewer/2022052003/6016b0e32dc43e57e51d64c4/html5/thumbnails/20.jpg)
Saab ka nii:
object Hello extends App { println("Hello, World!")
}
![Page 21: Milleks Scala? - ut€¦ · Nüüd saab tegutseda! • Defineeri funktsioon, mis kontrollib kas etteantud sõne on pangram: ehk keele kõik tähed esinevad vähemalt ühe korra](https://reader034.vdocuments.mx/reader034/viewer/2022052003/6016b0e32dc43e57e51d64c4/html5/thumbnails/21.jpg)
Nüüd Harjutused!
![Page 22: Milleks Scala? - ut€¦ · Nüüd saab tegutseda! • Defineeri funktsioon, mis kontrollib kas etteantud sõne on pangram: ehk keele kõik tähed esinevad vähemalt ühe korra](https://reader034.vdocuments.mx/reader034/viewer/2022052003/6016b0e32dc43e57e51d64c4/html5/thumbnails/22.jpg)
Definitsioonid
• Ennustage programmi käitumist!
• Kirjuta “def” asemel “val”.
• Kommenteeri välja println ja proovi mõlemad!
• Kui julged, proovi ka “lazy val”!
• Katseta kuni oled moodustanud hüpotees, kuidas nad käituvad.
object Hello extends App {
def x: Int = { println("Boo!") 21 }
println(x+x)
}
![Page 23: Milleks Scala? - ut€¦ · Nüüd saab tegutseda! • Defineeri funktsioon, mis kontrollib kas etteantud sõne on pangram: ehk keele kõik tähed esinevad vähemalt ühe korra](https://reader034.vdocuments.mx/reader034/viewer/2022052003/6016b0e32dc43e57e51d64c4/html5/thumbnails/23.jpg)
Nüüd saab tegutseda!
• Defineeri funktsioon, mis kontrollib kas etteantud sõne on pangram:ehk keele kõik tähed esinevad vähemalt ühe korra.
• Tuntud näide on “The quick brown fox jumps over the lazy dog”.
• Idee on nüüd siin ise katsetada: IDE autocomplete on suureks abiks!
• Kui oled oma lahenduse üle uhke, siis postita meie loengu fleep’i.
![Page 24: Milleks Scala? - ut€¦ · Nüüd saab tegutseda! • Defineeri funktsioon, mis kontrollib kas etteantud sõne on pangram: ehk keele kõik tähed esinevad vähemalt ühe korra](https://reader034.vdocuments.mx/reader034/viewer/2022052003/6016b0e32dc43e57e51d64c4/html5/thumbnails/24.jpg)
Väike modifikatsioon
• Muuda oma funktsioon, et see tuvastaks eestikeelsed pangramid.
• Microsoftis kasutatud näide on “See väike mölder jõuab rongile hüpata.”
• Vaatame siin põliseestlaste pangramid, kus ei ole c, ž, jne….(“Põdur Zagrebi tšellomängija-följetonist Ciqo külmetas kehvas garaažis”)
• Peamine küsimus on see: kui palju pidi eelmise versiooniga võrreldes muutma?
![Page 25: Milleks Scala? - ut€¦ · Nüüd saab tegutseda! • Defineeri funktsioon, mis kontrollib kas etteantud sõne on pangram: ehk keele kõik tähed esinevad vähemalt ühe korra](https://reader034.vdocuments.mx/reader034/viewer/2022052003/6016b0e32dc43e57e51d64c4/html5/thumbnails/25.jpg)
Täielik Hämming
• Kuna jäi natuke aega üle, võtsime ülesandeks arvutada Hammingi kaugus kahe (võrdse pikkusega) sõne vahel.
• Tuleb lihstalt loendada mitmes kohas sõned erinevad!(Wikipedias on näited…)
• Me (eriti Vesal) ei oska seda kahjuks veel lahendada :(
• Väikese fondiga on siin üks võimalik lahendus, aga sellest saame paremini aru, kui jõuame paaride ja case-avaldisteni.
def hamming(s1: String, s2: String) { (s1,s2).zipped.count({ case (x,y) => x != y }) }
![Page 26: Milleks Scala? - ut€¦ · Nüüd saab tegutseda! • Defineeri funktsioon, mis kontrollib kas etteantud sõne on pangram: ehk keele kõik tähed esinevad vähemalt ühe korra](https://reader034.vdocuments.mx/reader034/viewer/2022052003/6016b0e32dc43e57e51d64c4/html5/thumbnails/26.jpg)
Kogu Scala osa point: Muutmatute andmestruktuuridega
töötamine on puhas rõõm