Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
A Scala programozási nyelv
2016. október Szováta A Scala programozási nyelv IV. Székelyföldi IT&C és Innovációs Konferencia
2
Ki vagyok? Kolcza Győző Senior Java és Scala fejlesztő a Mortoff Kft-nél kolczagy2
3
Miről lesz szó? Funkcionális nyelvek Scala mint funkcionális nyelv
Magasabb rendű függvények Névtelen függvények Mintaillesztés Osztályok és objektumok Case osztályok Traits
4
A programozási nyelvek osztályozása
Imperatív Eljárásorientált nyelvek (Neumann elvű nyelvek pl. C, Pascal) Objektumorientált nyelvek (C++, Java, Scala) Deklaratív Funkcionális nyelvek (Scala, SML) Logikai nyelvek (Prolog)
5
A programozási nyelvek osztályozása
Típusos (Java, Scala) Gyengén típusos (Php, Javascript) Imperatív
6
Deklaratív programozási stílus
Nem hogyan, hanem mit
7
Deklaratív programozási stílus
Imperativ int fact(int n){ int f=1; while(n>1) f*=n--; return f; }
8
Deklaratív programozási stílus
FP fact 0=1 fact n=n*fact n-1 Imperativ int fact(int n){ int f=1; while(n>1) f*=n--; return f; }
9
Funkcionális nyelv jellemzői
Minden entitás függvény érték Nincs változó Nincs állapot Nincs memóriacímzés A program egy függvény Függvények tiszták, nincsenek mellékhatásaik
10
Funkcionális nyelv jellemzői
Funkcionális nyelven írt programok rendkívül megbízhatóak (pl. a párizsi metró irányító rendszer)
11
Mi a Scala? Java nyelv jövője Teljesen objektum orientált
Funkcionális nyelv Típusos Tömör JVM-en fut Egyszerre használható Scala és Java ugyanabban a projektben
12
Mi a Scala? 2001 - be kezdték el fejleszteni
Az első releaset 2004-ben jelent meg Java és .NET platformon (Scala 1.0) A második releaset 2006-ba adták ki (Scala 2.0) be a .NET support teljesen megszűnt Jelenlegi verzió Scala
13
Scalaban írt rendszerek
Twitter LinkedIn Netflix Sony
14
Környezet telepítése JDK Scala IDE (Eclipse, IntelliJ, Netbeans)
SBT (Scala Build Tool)
15
Minden objektum Ellentétben a Java-val, Scalaba minden objektum
16
Minden objektum Példa: * 3 / x A fenti kifejezés függvényhívásokból áll, mely ekvivalens az alábbi kifejezéssel: (1).+(((2).*(3))./(x))
17
Operátorok definiálása
Scala nem definiál kifejezett operátorokat Az operátorok felülírhatók
18
Operátorok definiálása
Komplex számok összeadása class Complex(val re: Double, val im: Double) { def + (that: Complex) = new Complex(re + that.re, im + that.im) def - (that: Complex) = new Complex(re - that.re, im - that.im) override def toString = re + (if (im < 0) "-" + (-im) else "+" + im) + "*i„ } val x = new Complex(2, 1); var y = new Complex(1, 3) println(x + y); // *i
19
Magasabb rendű függvények
másik függvényt kapnak paraméterül egy függvényt adnak vissza
20
Magasabb rendű függvények
def sum(f: Int => Int, a: Int, b: Int) : Int = if (a > b) 0 else f(a) + sum(f, a + 1, b) def square(x: Int): Int = x * x sum(square, 2, 3)
21
Névtelen függvények Square függvényt csak egyvalamire használtuk, hogy paramétere legyen a sumnak Névtelen függvények, azaz a lambda kifejezések
22
Névtelen függvények def sumInts(a: Int, b: Int): Int = sum(x => x, a, b) def sumSquares(a: Int, b: Int): Int = sum(x => x * x, a, b)
23
Osztályok és objektumok
class Point(xc: Int, yc: Int) { var x: Int = xc var y: Int = yc def move(dx: Int, dy: Int) { x = x + dx y = y + dy } override def toString(): String = "(" + x + ", " + y + ")"; val pt = new Point(1,2)
24
Osztályok és objektumok
object Point extends App { var x: Int = 0; var y: Int = 0; def setXY(xp: Int, yp: Int) { x = xp; y = yp; } …...... Névtelen osztály Singleton Implicit jönnek létre
25
Osztályok és objektumok
26
Mintalillesztes Hasonló mint a switch-case
Bármilyen típusú adatra használható Első találat szabály él
27
Mintalillesztes def matchTest(x: Any): Any = x match { case 1 => "one" case "two" => 2 case y: Int => "scala Int" case List(0, _*) => "list" case _ => "no matching" } println(matchTest("two"))
28
Case osztályok Olyan mint Java-ba a POJO Explicit léteznek
Előnye, hogy minta illeszthetünk rajta
29
Case osztályok abstract class Tree case class Fork(left: Tree, right: Tree, weight: Int) extends Tree case class Leaf() extends Tree
30
Case osztályok def weight(tree: Tree): Int = { tree match { case Fork(_,_,w) => w case Leaf() => 0 } }
31
Traits //Hasonló a Java interfacehez trait Language { val name:String //De tartalmazhat implementációt is override def toString = name }
32
Traits trait A { override def toString = "A vagyok" } trait B { override def toString = "B vagyok" } trait C { override def toString = "C vagyok" }
33
Traits class Foo extends A with C with B{ } object Main extends App { val f = new Foo println(f.toString()) }
34
Példa def countChange(money: Int, coins: List[Int]):Int ={ if(money == 0) 1 else if(money > 0 && !coins.isEmpty) countChange(money - coins.head, coins) + countChange(money, coins.tail) else 0 }
35
Irodalomjegyzék http://www.scala-lang.org/
36
Q&A
37
Köszönöm a figyelmet!
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.