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.

Post on 28-Sep-2020

0 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

Transcript

Milleks Scala?Programmeerimiskeeled 2017

Vesal Vojdani

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!

Alustame ScalagaNew Project

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.

See nüüd võtab aega!

Erinevad lähenemised ScalaleSiin jätkame FP paradigma propagandat: ideed on tähtsamad kui keel ise!

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

Image attribution: Jeremykemp at English Wikipedia

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

Mõtiskleme(moodle quiz!)

Kuidas harjutada süsteemi disain?

Kuidas harjutada süsteemi disain?

Kuidas harjutada süsteemi disain?

Interface Segregation: Exp on plussiga eraldatud Termide list.

Ta ei tea midagi madala taseme detailidest.

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”

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?

Ja nüüd päris klass!(tegelikult objekt…)

Hello World!

object Hello { println("Hello, World!")

def main(args: Array[String]): Unit = { println("Good bye!") } }

Hello World!

object Hello { println("Hello, World!")

def main(args: Array[String]): Unit = { println("Good bye!") } }

Ühe ainsa isendiga klass (static meetodite asemel)

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)

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

Saab ka nii:

object Hello extends App { println("Hello, World!")

}

Nüüd Harjutused!

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)

}

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.

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?

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 }) }

Kogu Scala osa point: Muutmatute andmestruktuuridega

töötamine on puhas rõõm

top related