26
Milleks Scala? Programmeerimiskeeled 2017 Vesal Vojdani

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

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

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

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

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

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

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

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

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

Gartner Hype CycleJava 8-st alates ei ole ka Scala ja Java erinevus enam nii suur

Image attribution: Jeremykemp at English Wikipedia

Page 8: 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

What’s the Big Idea?Working Hard to Keep it Simple

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Kogu Scala osa point: Muutmatute andmestruktuuridega

töötamine on puhas rõõm