Scala ülevaade 1 Meetodid, muutujad ja väärtused. Süntaks 2 Lihtsad tüübid ja väärtused. 3 OOP, case-klassid ja mustrisobitus. 4 Puhta Scala väärtusta

Seotud dokumendid
Infix Operaatorid I Infix operaatorid (näiteks +) ja tüübid (näiteks ->) kirjutatakse argumentide vahele, mitte argumentide ette. Näiteks: 5 + 2, 2*pi

I Generaatori mõiste (Java) 1. Variantide läbivaatamine Generaator (ehk generaator-klass) on klass, milles leidub (vähemalt) isendimeetod next(). Kons

PHP

Word Pro - diskmatTUND.lwp

loeng2

Funktsionaalne Programmeerimine

Word Pro - digiTUNDkaug.lwp

Pealkiri

Ruutvormid Denitsioon 1. P n Ütleme, et avaldis i;j=1 a ijx i x j ; kus a ij = a ji ; a ij 2 K ja K on korpus, on ruutvorm üle korpuse K muutujate x 1

vv05lah.dvi

Funktsionaalne Programmeerimine

Excel Valemite koostamine (HARJUTUS 3) Selles peatükis vaatame millistest osadest koosnevad valemid ning kuidas panna need Excelis kirja nii, et

(loeng3-ohtlikud_koodiloigud)

Programmeerimiskeel APL Raivo Laanemets 17. mai a.

HAJUSSÜSTEEMID HAJUSSÜSTEEMID Kaugprotseduurid IDL kompileerimine ONCIDLnäide CORBAIDLnäide MIDLnäide DCERPCmuidomadusi XML-RPC JSON-RPC REST document

Andmeturve

SQL

Failiotsing: find paljude võimalustega otsingukäsk find kataloog tingimused kataloog - otsitakse sellest kataloogist ja tema alamkataloogidest tingimu

1. AKE Ajalise keerukuse empiiriline hindamine

Sügis 2018 Kõrgema matemaatika 2. kontrolltöö tagasiside Üle 20 punkti kogus tervelt viis üliõpilast: Robert Johannes Sarap, Enely Ernits, August Luur

AWK Aho Weinberger Kernighan struktuurse teksti töötlemise keel rikkalikult tekstitöötlusvahendeid omal alal suhteliselt lihtne ja kiiresti realiseeri

Microsoft Word - ref - Romet Piho - Tutorial D.doc

Andmed arvuti mälus Bitid ja baidid

Microsoft Word - essee_CVE ___KASVANDIK_MARKKO.docx

Matemaatilised meetodid loodusteadustes. I Kontrolltöö I järeltöö I variant 1. On antud neli vektorit: a = (2; 1; 0), b = ( 2; 1; 2), c = (1; 0; 2), d

Diskreetne matemaatika I Kevad 2019 Loengukonspekt Lektor: Valdis Laan 20. juuni a.

Matemaatiline analüüs IV 1 3. Mitme muutuja funktsioonide diferentseerimine 1. Mitme muutuja funktsiooni osatuletised Üleminekul ühe muutuja funktsioo

PowerPointi esitlus

TARTU ÜLIKOOL MATEMAATIKA-INFORMAATIKATEADUSKOND Arvutiteaduse instituut Infotehnoloogia eriala Roman Jagomägis Programmeerimiskeel privaatsust säilit

loeng7.key

ITI Loogika arvutiteaduses

Algoritmid ja andmestruktuurid

Matemaatiline analüüs III 1 4. Diferentseeruvad funktsioonid 1. Diferentseeruvus antud punktis. Olgu funktsiooni f : D R määramispiirkond D R selles p

Pealkiri

12. Marek Kolk, Kõrgem matemaatika, Tartu Ülikool, Algfunktsioon ja määramata integraal Sisukord 12 Algfunktsioon ja määramata integraal 1

DIGITAALTEHNIKA DIGITAALTEHNIKA Arvusüsteemid Kümnendsüsteem Kahendsüsteem Kaheksandsüsteem Kuueteistkü

X Window System tuntud kui: X11 X X-Windows akendussüsteem/akendesüsteem rastergraafikat toetavatele ekraanidele UNIX-maailmas väga levinud mitmesugus

Pangalingi spetsifikatsioon Pocopay pangalingilt makse algatamiseks tuleb kasutada teenust Kaupmees teeb päringu Pocopayle aadressile

3D mänguarenduse kursus (MTAT ) Loeng 3 Jaanus Uri 2013

Relatsiooniline andmebaaside teooria II. 6. Loeng

IFI6083_Algoritmid_ja_andmestruktuurid_IF_3

Neurovõrgud. Praktikum aprill a. 1 Stohhastilised võrgud Selles praktikumis vaatleme põhilisi stohhastilisi võrke ning nende rakendust k

Andmebaasid, MTAT Andmebaasikeeled 11.loeng

IMO 2000 Eesti võistkonna valikvõistlus Tartus, aprillil a. Ülesannete lahendused Esimene päev 1. Olgu vaadeldavad arvud a 1, a 2, a 3,

TARTU ÜLIKOOL Arvutiteaduse instituut Informaatika õppekava Mirjam Iher Nõrgima eeltingimuse staatiline analüüs pinukeeltele Bakalaureusetöö (9 EAP) J

1 / loeng Tekstitöötlus Sisend/väljund Teksti lugemine Sõnad

Skriptid ja käsud

8.klass 4 tundi nädalas, kokku 140 tundi Hulkliikmed ( 45 tundi) Õppesisu Hulkliige. Hulkliikmete liitmine ja lahutamine ning korrutamine ja jagamine

Microsoft Word - polkaudio 2010 hinnakiri

untitled

ArcGIS Online Konto loomine Veebikaardi loomine Rakenduste tegemine - esitlus

lvk04lah.dvi

MTAT Operatsioonisüsteemid - Turvalisus

MOOCi „Programmeerimise alused“ ülesannete lahenduste analüüs

Microsoft Word - Errata_Andmebaaside_projekteerimine_2013_06

Võrguinverterite valik ja kasutusala päikeseelektrijaamades Robert Mägi insener

PowerPointi esitlus

Polünoomi juured Juure definitsioon ja Bézout teoreem Vaadelgem polünoomi kus K on mingi korpus. f = a 0 x n + a 1 x n a n 1 x

MTAT Operatsioonisüsteemid - Turvalisus

Norrison Ametikudumid, Professional knitwear.cdr

PÄRNU TÄISKASVANUTE GÜMNAASIUM ESITLUSE KOOSTAMISE JUHEND Pärnu 2019

E-õppe ajalugu

Peafail3_2.dvi

Pythoni Turtle moodul ja Scratchi värvilisem pool Plaan Isikukoodi kontrollnumbri leidmine vaatame üle lahenduse kontrollnumbri leimiseks. Pythoni joo

Microsoft Word - 56ylesanded1415_lõppvoor

ma1p1.dvi

prakt8.dvi

Süsteemide modelleerimine: praktikum Klassiskeemid Oleg Mürk

Matemaatika ainekava 8.klass 4 tundi nädalas, kokku 140 tundi Kuu Õpitulemus Õppesisu Algebra (65 t.) Geomeetria (60 t.) Ajavaru kordamiseks (15 õppet

Microsoft Word - installation-guide.doc

Tartu Ülikool Matemaatika-informaatikateaduskond Puhta Matemaatika Instituut Algebra õppetool Riivo Must Mõned katsed üldistada inversseid poolrühmi M

Praks 1

HAJUSSÜSTEEMID HAJUSSÜSTEEMID SOAP ja veebiteenused Web Services Web Services SOAP WSDL Ühilduvus UDDI Kihiline arhitektuur masinsuhtluse jaoks erinev

Andmeturve

Tallinna Ülikool Digitehnoloogiate instituut JavaFX rakenduste kujundamine CSS abil Seminaritöö Autor: Hendrik Spiegelberg Juhendaja: Jaagup Kippar Au

Image segmentation

SQL

(Microsoft PowerPoint - seminar_6_n\365uded-ainemudel tagasiside.ppt [Compatibility Mode])

GRUPI-SMS Veebirakenduse kasutamise juhend Rakendus Elisa grupi-smsi rakendus Väljaandja Elisa Eesti AS Juhendi koostamise kuupäev Versioon

raamat5_2013.pdf

Andmebaasid, MTAT loeng Normaalkujud

lcs05-l3.dvi

Võistlusporgrammeerimise õpik on loodud Tartu Ülikooli teaduskooli ja arvutiteaduse instituudi koostöös.. Õpiku loomine sai alguse soovist pakkuda kõi

Rakenduste loomise ja programmeerimise alused

PALMIKRÜHMAD Peeter Puusempa ettekanded algebra ja geomeetria õppetooli seminaril 11., 18. ja 25. jaanuaril a. 1. Palmikud ja palmikrühmad Ajalo

+/- 7(chomsky???) Deduktiivne jama 1.Hulkade spetsifitseerimine. Hulk on samalaadsete objektide järjestamata kogum, mida käsitlet

ET TOIMIVUSDEKLARATSIOON vastavalt järgneva määruse (EL) Nr. 305/2011 lisale III: lisale III Elektritööriistadega kasutatavad Hilti kinnitid X-P 20 B3

Juhend nutiterminali seadistamiseks ja kaardimaksete vastuvõtmiseks Ingenico Link/2500 ja icmp

Linux süsteemi administreerimine

G aiasoft Programmi VERP ja Omniva Arvekeskuse liidese häälestamine ja arvete saatmine-lugemine VERP 6.3 ja VERP 6.3E Versioon ja hilisemad K

Tallinn

OPERATSIOONISÜSTEEMIDE EHITUS Ülevaade Protsessi mõiste Protsesside planeerimine Operatsioonid protsessidega Protsessihaldus Protsesside koostöö Prots

Microsoft Word - Referaat.docx

Versioon Autor Kuupäev Märkused 1.0 Riivo Talviste Algdokument 1.1 Riivo Talviste Arhitektuurimuutused, terminoloogia 1.2 Riivo

KINNITATUD Tallinna Ehituskooli direktori käskkirjaga nr 1-1/18 KOOSKÕLASTATUD Tallinna Ehituskooli nõukogu protokoll nr 10 Õppe

Väljavõte:

Scala ülevaade 1 Meetodid, muutujad ja väärtused. Süntaks 2 Lihtsad tüübid ja väärtused. 3 OOP, case-klassid ja mustrisobitus. 4 Puhta Scala väärtustamine. 5 Keerulisemad tüübid. 6 Nähtavus, implitsiitsus. Kalmer Apinis Programmeerimiskeeled Sügis 2018

2 Meetodid deklaratsioon, näiteks: def +(x:int): Unit = { println(x); x+1

2 Meetodid deklaratsioon, näiteks: def +(x:int): Unit = { println(x); x+1 meetodi kutse: näiteks: o.+(5) nimi objekt.nimi meetod(avaldis 1,..., avaldis n)

2 Meetodid deklaratsioon, näiteks: def +(x:int): Unit = { println(x); x+1 meetodi kutse: näiteks: o.+(5) nimi objekt.nimi meetod(avaldis 1,..., avaldis n) infixne kutse (kui on üks argument): näiteks: o + 5 nimi objekt nimi meetod avaldis

2 Meetodid deklaratsioon, näiteks: def +(x:int): Unit = { println(x); x+1 meetodi kutse: näiteks: o.+(5) nimi objekt.nimi meetod(avaldis 1,..., avaldis n) infixne kutse (kui on üks argument): näiteks: o + 5 nimi objekt nimi meetod avaldis

3 Väärtused ja muutujad Objektide (ja meetodide) sisse saab defineerida väärtuseid, muutujaid ja meetode. object ScalaProgramm { var muutuja: Int =10 val v22rtus: Int =100 def main(args: Array[String]): Unit ={ muutuja = 20 val summa = muutuja + v22rtus println(summa) // prindib 120

4 Sulud ja meetodite kutsed Kui meetodil puuduvad argumendid, jätame enamasti sulud ära. Sulge on soovitatav kasutada, kui meetod muudab objekti. object Sulud { def x(): Int = 5 def y : Int = 5 val z : Int = 5 def main(args: Array[String]): Unit ={ val summa = x + x() + y + z // summa += y() + z() <- ei tööta

5 Süntaks Tingimusavaldised: if(e) s1 else s2 tsükklid (lihtsustatult): for (muutuja <- algus to l6pp) {... for (muutuja <- algus until l6pp) {... for (muutuja <- kollektsioon) {... funktsiooni tüüp: tyyp => tyyp2 lambdad: (muutuja: tyyp, muutja2: tyyp2) => keha blokid (eraldi ridadel võib semikoolonid ära jätta): {e 1 ; e 2 ;... e n;

6 Alamtüüpimine Any AnyVal AnyRef (java.lang.object) Double Float Long Int Short Byte Unit Boolean Char Option List Null Nothing

7 Avaldised Väärtused (AnyVal): () : Unit true : Boolean, false : Boolean a : Char, b : Char,... 1 : Byte, 2 : Short, 3 : Int, 3 : Long 1f : Float, 2 : Double Väärtustel saab samuti meetodeid välja kutsuda. N: 1.+(2) Aritmeetikafunktsioonid. N: math.max(math.pi, x*4)

8 Klassid ja Objektid class MinuKlass { val viis: Int = 5 def lisaviis(x: Int): Int =x+viis Klassid on objektide tüübid. var o : MinuKlass =null Objekte saab luua võtmesõnaga new. o = new MinuKlass

9 Konstruktorid Peamine konstruktor argumendid klassi nime järel ja keha meetodite ja väljadega segamini. class K(nimi: String, synniaasta: Int) { println("loodi klass K("+ nimi +"," + synniaasta + ")") def umbkaudnevanus(): Int =LocalDate.now.getYear - synniaasta Abikonstruktor. class K(nimi: String, synniaasta: Int) { def this() = this("nipitiri",localdate.now.getyear) println("loodi klass K("+ nimi +"," + synniaasta + ")") def umbkaudnevanus(): Int =LocalDate.now.getYear - synniaasta Konstruktori väljakutse: val x = new K("Donald", 1934) val y = new K // = new K("nipitiri", 2018)

10 Case klassid ja objektid trait List[+A] // Scala listide lihtsustus case object Nil extends List[Nothing] case class Cons[A](x:A, xs: List[A]) extends List[A] val list = Cons(1, Cons(2, Cons(3, Nil))) Nagu algebralised andmestruktuurid Haskellis. Ei kasutata võtmesõna new. Defineerib võrduse, mis sõltub konstruktorite argumentidest: Cons(3, Nil) == Cons(3, Nil) Cons(3, Nil)!= Nil Defineerib tostring meetodi: list.tostring = "Cons(1, Cons(2, Cons(3, Nil)))"

11 Traitid ja pärimine Liideste asemel on Scalas trait-id: trait T { var q: Char def f(x: Int): Double def g(x: Int): Double =f(10) / 2 Abstraktsed klassid: abstract class Q { def h(x: Int): Boolean Klass laiendab kuni ühte klassi ja suvaline arv trait-e. class W extends Q with T { override var q: Char = a override def f(x: Int): Double =x.todouble % 10 override def g(x: Int): Double =f(10) / 3 override def h(x: Int): Boolean =f(x) > 100

12 Traitide lineariseerimine Traitid väldivad mitmese pärimise probleeme kasutades lineariseerimist. Objekti meetodi kutsel tehakse valik vastavalt eelistusjärjekorrale Näide class A trait B extends A trait C extends A trait D extends C class E extends A with B with D Järjekord: E -> D -> C -> B -> A -> AnyRef -> Any

13 Apply meetod Kirjutades mõistab Scala seda nii: o(e) o.apply(e) Kasutatakse näiteks massiivide (Array) ja kujundite (Map) juures. Kasutatakse andmestruktuuride koostamisel. val a = Array(11,22,33) // Array.apply(11,22,33) val b = a(1) // a.apply(1) == 22

14 Mustrisobitus def length[a](xs: List[A]): Int = xs match { case Nil = > 0 case Cons(_, xs) => 1 + length(xs)

15 Omistamisega meetodid Kirjutades mõistab Scala seda nii: l + = e või l.+ = (e) l = l + e Töötab suvalise sümbolitest koosneva operaatoriga. Avaldis l väärtustakse üks kord. class Q(val y:int) { def +(x: Int): Q =new Q(x+y) var x = new Q(10) x + = 10 println(x.y) // trükitakse 20

16 Puhta Scala Väärtustamine Aritmeetika väärtustatakse samamoodi nagu Haskellis. Blokid: { e e { val x = v; es { es[x v] (kui v on normaalkujul) { val x = e 1 ; es { val x = e 2 ; es { def f...; es { es (kui f ei sisaldu es-s) { def f...; es 1 { def f...; es 2 { class k...; es { es (kui f ei sisaldu es-s) { class k...; es 1 { class k...; es 2 Sarnaselt klassidele käitume case-klasside ja objektide puhul. Argumendid väärtustatakse enne rakendust. Funktsioon def fn(x 1,...,x n) = e: fn(v 1,..., v n) e[x 1 v 1 ]... [x n v n]

17 Näited e = { def mul(x: Int, y: Int) = def add(a: Int, b: Int) = add(5, mul(3,8)) x * y a + b add(5, mul(3,8))

17 Näited e = { def mul(x: Int, y: Int) = def add(a: Int, b: Int) = add(5, mul(3,8)) x * y a + b add(5, mul(3,8)) (x*y)[x->3][y->8]

17 Näited e = { def mul(x: Int, y: Int) = def add(a: Int, b: Int) = add(5, mul(3,8)) x * y a + b add(5, mul(3,8)) (x*y)[x->3][y->8] add(5, 3*8)

17 Näited e = { def mul(x: Int, y: Int) = def add(a: Int, b: Int) = add(5, mul(3,8)) x * y a + b add(5, mul(3,8)) (x*y)[x->3][y->8] add(5, 3*8) add(5, 24)

17 Näited e = { def mul(x: Int, y: Int) = def add(a: Int, b: Int) = add(5, mul(3,8)) x * y a + b add(5, mul(3,8)) (x*y)[x->3][y->8] add(5, 3*8) add(5, 24) (a+b)[a->5][b->24]

17 Näited e = { def mul(x: Int, y: Int) = def add(a: Int, b: Int) = add(5, mul(3,8)) x * y a + b add(5, mul(3,8)) (x*y)[x->3][y->8] add(5, 3*8) add(5, 24) (a+b)[a->5][b->24] 5+24

17 Näited e = { def mul(x: Int, y: Int) = def add(a: Int, b: Int) = add(5, mul(3,8)) x * y a + b add(5, mul(3,8)) (x*y)[x->3][y->8] add(5, 3*8) add(5, 24) (a+b)[a->5][b->24] 5+24 29

18 Puhta Scala Väärtustamine Meetodid class K(p 1,...,p m) { def fn(x 1,...,x n) = e;... : new K(w 1,..., w m).fn(v 1,..., v n) e[x 1 v 1 ]... [x n v n][p 1 w 1 ]... [p m w m][this new K(w 1,..., w m)] Väljad class K(p 1,...,p m) { val n = e;... : new K(w 1,..., w m).n e[p 1 w 1 ]... [p m w m][this new K(w 1,..., w m)] Sarnaselt käitume case-klasside ja objektide puhul.

19 Näited e = { class Kala(nimi: String) { def tee(mida: String) = nimi+" "+mida+"b." val nemo = new Kala("Neemo") nemo.tee("uju") nemo.tee("uju")

19 Näited e = { class Kala(nimi: String) { def tee(mida: String) = nimi+" "+mida+"b." val nemo = new Kala("Neemo") nemo.tee("uju") nemo.tee("uju") new Kala("Neemo").tee("uju")

19 Näited e = { class Kala(nimi: String) { def tee(mida: String) = nimi+" "+mida+"b." val nemo = new Kala("Neemo") nemo.tee("uju") nemo.tee("uju") new Kala("Neemo").tee("uju") (nimi+" "+ mida+"b.")[nimi->"neemo"][mida->"ujub"]

19 Näited e = { class Kala(nimi: String) { def tee(mida: String) = nimi+" "+mida+"b." val nemo = new Kala("Neemo") nemo.tee("uju") nemo.tee("uju") new Kala("Neemo").tee("uju") (nimi+" "+ mida+"b.")[nimi->"neemo"][mida->"ujub"] ("Neemo"+" "+ "uju"+"b.")

19 Näited e = { class Kala(nimi: String) { def tee(mida: String) = nimi+" "+mida+"b." val nemo = new Kala("Neemo") nemo.tee("uju") nemo.tee("uju") new Kala("Neemo").tee("uju") (nimi+" "+ mida+"b.")[nimi->"neemo"][mida->"ujub"] ("Neemo"+" "+ "uju"+"b.") "Neemo ujub."

20 Näited e = { class Kala(nimi: String) { def tee(mida: String) =nimi+" "+mida+"b." def lenda = this.tee("lenda") new Kala("Doris").lenda new Kala("Doris").lenda

20 Näited e = { class Kala(nimi: String) { def tee(mida: String) =nimi+" "+mida+"b." def lenda = this.tee("lenda") new Kala("Doris").lenda new Kala("Doris").lenda this.tee("lenda")[this->new Kala("Doris")]

20 Näited e = { class Kala(nimi: String) { def tee(mida: String) =nimi+" "+mida+"b." def lenda = this.tee("lenda") new Kala("Doris").lenda new Kala("Doris").lenda this.tee("lenda")[this->new Kala("Doris")] new Kala("Doris").tee("lenda")

20 Näited e = { class Kala(nimi: String) { def tee(mida: String) =nimi+" "+mida+"b." def lenda = this.tee("lenda") new Kala("Doris").lenda new Kala("Doris").lenda this.tee("lenda")[this->new Kala("Doris")] new Kala("Doris").tee("lenda") (nimi+" "+mida+"b.")[mida->"lenda"][nimi->"doris"]

20 Näited e = { class Kala(nimi: String) { def tee(mida: String) =nimi+" "+mida+"b." def lenda = this.tee("lenda") new Kala("Doris").lenda new Kala("Doris").lenda this.tee("lenda")[this->new Kala("Doris")] new Kala("Doris").tee("lenda") (nimi+" "+mida+"b.")[mida->"lenda"][nimi->"doris"] ("Doris"+" "+"lenda"+"b.")

20 Näited e = { class Kala(nimi: String) { def tee(mida: String) =nimi+" "+mida+"b." def lenda = this.tee("lenda") new Kala("Doris").lenda new Kala("Doris").lenda this.tee("lenda")[this->new Kala("Doris")] new Kala("Doris").tee("lenda") (nimi+" "+mida+"b.")[mida->"lenda"][nimi->"doris"] ("Doris"+" "+"lenda"+"b.") "Doris lendab."

21 Tüübiparameetrid (lihtne vorm) Kandilistes sulgudes, komadega eraldatult. Meetodi või klassi nime järel. class A[T](val x:t) { def g[u](f: T => U): U = f(x) val a = new A[Int](5) println(a.g[string](x => x.tostring+"#")) // trükib 5# Püütakse tuletada val a = new A(5) println(a.g(x => x.tostring+"#")) // trükib 5#

22 Tüübiparameetrid (lihtne vorm) Kandilistes sulgudes, komadega eraldatult. Kasutatakse sõnu: geneeriline ja polümorfism. Meetodi või klassi nime järel. class A[T](val x:t) { def g[u](f: T => U): U = f(x) val a = new A[Int](5) println(a.g[string](x => x.tostring+"#")) // trükib 5# Püütakse tuletada val a = new A(5) println(a.g(x => x.tostring+"#")) // trükib 5#

23 Parameetrite kitsendamine ülevalt: T <: U trait Koduloom trait Kass extends Koduloom trait Koer extends Koduloom class LoomaWrapper[L <: Koduloom](p: L) { def loom: L = p alt: T >: U trait Järjend[B] { def lisaalgusesse[u >: B](e: U): Järjend[U] val kassid : Järjend[Kass] =??? val loomad : Järjend[Koduloom] =kassid.lisaalgusesse[koduloom](???) implitsiitselt teisendatav tüüp: T <% U T : M leidub implitsiitne väärtus M[T]