Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

A Scala programozási nyelv

Hasonló előadás


Az előadások a következő témára: "A Scala programozási nyelv"— Előadás másolata:

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!


Letölteni ppt "A Scala programozási nyelv"

Hasonló előadás


Google Hirdetések