Scala KOVÁCS VINCENT. Gyűjtemények – Collections  Scala több féle gyűjteménnyel rendelkezik:  Listák (Lists)  Halmazok (Sets)  Maps  Tuple  A gyűjtemények.

Slides:



Advertisements
Hasonló előadás
C# nyelvi áttekintő A „Programozás C# nyelven (Illés Zoltán)”
Advertisements

Programozás III STRING-XML.
C++ programozási nyelv Gyakorlat hét
Programozás III OOP ALAPOK.
Tömbök C#-ban.
Programozás III KOLLEKCIÓK 2..
Funkcionális programozás F#-ban
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Adatbányászati technikák (VISZM185)
Öröklődés 2..
JavaScript.
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
Bevezetés a Java programozásba
Öröklődés Polimorfizmus Csomagok Absztrakt osztályok, interfészek
Kollekciók IO stream-ek Generikus kollekciók.  objektumokat tartalmaznak  nincsen előre meghatározott méretük, bármennyi objektumot pakolhatok beléjük.
Abstract osztályok és interface-ek Beolvasás és kiíratás 7. gyakorlat.
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Tömbök ismétlés Osztályok Java-ban Garbage collection
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 3. rész – Osztályok I.
Java programozási nyelv 5. rész – Osztályok III.
JSP és JavaBean JavaServer Pages és Java Beans Fabók Zsolt Általános Informatikai Tanszék Miskolci Egyetem.
Web-grafika (VRML) 10. gyakorlat Kereszty Gábor. Script típusok Elemi típusok: szám: egész vagy lebegőpontos – int / float – 1 / 1.1 string: ‘Hello World!’
6. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
Annotációk a Java 5 nyelvben Kozsik Tamás. Annotációk Módosítószavak bővítése A programszöveg elemeihez rendelhetők –Csomagokhoz, típusokhoz, metódusokhoz,
Alphabet is a type specification = sorts: alphabet oprs: a:  alphabet,...,z:  alphabet end alphabet; nat is a type specification = sorts:nat oprs:zerus:
Ficsor Lajos Template-ek CPP8/ 1 Template-ek. Ficsor Lajos Template-ek CPP8/ 2 A template fogalma Kiindulási probléma: tetszőleges típusokon kellene ugyanolyan.
Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék
1 Bevezetés a funkcionális programozásba 2009.
Programozás Az adatokról C# -ban.
Access XP Kifejezés-szerkesztő Összehasonlító operátorok:
Összetett adattípusok
Grafikus tervezőrendszerek programozása 8. előadás.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Karakterláncok Páll Boglárka.
A REKORD TIPUS Páll Boglárka. Ismétlés: Feladat Készítsünk kimutatást a XI.B osztály tanulóiról. Minden tanuló esetén a következő adatokat tartjuk nyilván:
Rendezések és szövegkezelő függvények
Objektum orientált programozás a gyakorlatban
V. Adatszerkezetek, kollekciók
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 8. gyakorlat.
Komoróczy Tamás 1 Java programozási nyelv Stringek.
Java programozási nyelv Metódusok
Java programozási nyelv Adatbekérés konzolról
Generics Krizsán Zoltán. Bemutató A.NET 2.0 verziótól. A.NET 2.0 verziótól. Típusparaméter Típusparaméter Más nyelvben ez a template (sablon). Más nyelvben.
Egyenesvonalú (lineáris) adatszerkezetek
5. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 6. gyakorlat.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
Alkalmazásfejlesztés F#-ban Dunaújvárosi Főiskola Kiss Gyula mérnökinformatikus hallgató Nemzeti Tehetség Program Tehetségútlevél Program „NTP-TÚP ”
Script nyelvek előadás
Informatikai gyakorlatok 11. évfolyam
Típusok Halmaz (a világ objektumai közül néhány) Neve van
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Függvénysablonok használata
Előadás másolata:

Scala KOVÁCS VINCENT

Gyűjtemények – Collections  Scala több féle gyűjteménnyel rendelkezik:  Listák (Lists)  Halmazok (Sets)  Maps  Tuple  A gyűjtemények lehetnek:  Strict vagy Lazy  Muttable vagy Inmuttable

Gyűjtemények – Listák 1  A tömbökhöz hasonlóak  Minden elemük azonos  Minden lista láncolt lista lesz  A lista elemei immutable -k így direkten nem módosíthatóak  Két fajta képen lehet deklarálni a listákat: val fruit: List[String] = List("apples", "oranges") val fruit = "apples" :: ("oranges" :: ("pears" :: Nil))

Gyűjtemények – Listák 2  A lista elemeit elvégezhető alap műveletek:  Head  Tail  isEmpty  Két listát többféle képen lehet összefűzni:  list1 ::: list2  list1.:::(list2)  list1.concat(list2)

Gyűjtemények – Listák 3  Lista feltöltését ugyan azzal az elemmel a List.fill() metódussal lehetséges: val fruit = List.fill(3)("apples")  Lista feltöltését egy függvénnyel is definiálhatunk a List.tabulete() metódus segítségével: val squares = List.tabulate(6)(n => n * n)  Lehetőség van a lista elemeinek megfordítására a reverse() metódussal val fruit = "apples" :: ("oranges" :: ("pears" :: Nil)) println("Reversed order : " + fruit.reverse)

Gyűjtemények – Halmazok 1  Nem tartalmaz duplikátumokat  Lehet immutable és mutable  Alapértelmezetten immutable halmazokat érjük el  Ha mutable halmazokat szeretnénk használni akkor a scala.collection.mutable.Set kell importálni  Két féle képen lehet deklarálni: var s : Set[Int] = Set(1,3,5,7) var s = Set(1,3,5,7)

Gyűjtemények – Halmazok 2  A halmazok elemeit elvégezhető alap műveletek (hasonlók a listákhoz):  Head  Tail  isEmpty  Két listát többféle képen lehet összefűzni:  set1 ++ set2  set1.++(set2)

Gyűjtemények – Halmazok 3  Lehetőség van a minimális és a maximális elem megkeresésére a halmazban a min() és a max() metódusokkal val num = Set(5,6,9,20,30,45) println( "Min: " + num.min ) println( "Max: " + num.max )  Két halmaz metszetét a következő módszerekkel lehet elérni:  set1.intersect(set2)  set1.&(set2)

Gyűjtemények – Map 1  Kulcs érték párokat tartalmazó gyűjtemény  A kulcsok egyediek  Lehet immutable és mutable  Alapértelmezetten immutable mapot érjük el  Ha mutable mapot szeretnénk használni akkor a scala.collection.mutable.Map kell importálni  Két féle képen lehet példányosítani: var A:Map[Char,Int] = Map() A += ('I' -> 1) val colors = Map("red" -> "#FF0000", "azure" -> "#F0FFFF")

Gyűjtemények – Map 2  A map elemeit elvégezhető alap műveletek (hasonlók a listákhoz):  Keys  Values  isEmpty  contains  Két map összefűzését a következő módszerekkel lehet elérni:  set1 ++ set2  set1.++(set2)

Gyűjtemények – Tuple 1  Gyűjtemények, amik különböző típusú elemeket tartalmazhatnak  Nem lehet őket megváltoztatni val t = (1, "helo" Console)  A fenti kódrészlet rövidítése a következőnek: val t = new Tuple3(1, "helo" Console)  A paraméterszámától függően kell a megadni a TupleN osztály „számát”  Ez a szám 1 < N < 22 között lehet  Az egyes elemeket a t._N sémával lehet elérni

Gyűjtemények – Tuple 2  Végig lehet iterálni a productIterator metódussal val t = (4,3,2,1) t.productIterator.foreach{ i => println("Value = " + i) }  A toString metódussal összefűzi a Tuple -ben található elemeket println("Concatenated string “ + t.toString())  A Tuple2 esetében létezik egy swap metódus amivel, a benne található elemek megcserélhetőek println("Swapped Tuple: " + t.swap)

Ko- és Kontravariancia  A generikus paraméterek megszoríthatjuk két féle képen:  Kovarianciával  Kontravarianciával  Kovariancia  Generikus paraméternél A[+T] –vel tudjuk jelölni  Jelentése, ha B típus C típus altípusa, akkor A[B] az A[C] altípusa lesz  Kontravariancia  Generikus paraméternél A[-T] –vel tudjuk jelölni  Jelentése, ha B típus C típus altípusa, akkor A[C] az A[B] altípusa lesz

Reguláris kifejezések 1  A Regex osztállyal érhetőek el, ami a scala.util.matching csomagban található  A findFirstIn metódussal az első találat kapható vissza  A findAllIn metódussal az összes találat visszakapható egy gyűjtemény formájában val pattern = new Regex("(S|s)cala") val str = "Scala is scalable and cool" println((pattern findAllIn str).mkString(","))

Reguláris kifejezések 2  Lehetőség van reguláris kifejezések alapján cserélni is  A replaceFirstIn kicseréli az első találatot a megadott szövegre  A replaceAllIn kicseréli az összes találatot a megadott szövegre val pattern = "(S|s)cala".r val str = "Scala is scalable and cool" println (pattern replaceFirstIn(str, "Java"))

Case osztályok  Egyik leggyakoribb adatábrázolási forma a fa struktúra  A Scala a fa struktúra megvalósításhoz két nyelv tulajdonságait ötvözi:  JAVA – absztrakt szuper osztály, melyből származnak a specifikus levelek  Funkcionális programozási nyelv – algebrai adattípus  Egy egyszerű matematikai műveletek reprezentáló program abstract class Tree case class Sum(l: Tree, r: Tree) extends Tree case class Var(n: String) extends Tree case class Const(v: Int) extends Tree + 12

Case osztályok – Előnyök  A new kulcsó nem szükséges ezeknek az osztályoknak a példányosításához A new Const(5) helyett írhatjuk, hogy Const(5)  A getter metódusok automatikusan létrehozásra kerülnek a konstruktorban definiált változókhoz Ha c a Const egy példánya, akkor írhatjuk, hogy c.v  A fordító automatikusan generál equals és a hashCode metódusokat, amelyek az adatstruktúra példányain működnek  A toString metódus is alapértelmezetten kitöltésre kerül és forrásban megadott formátumot használja Például a x + 1 kifejezés úgy íródik ki, hogy: Sum(Var(x), Const(1))

Case osztályok – Mintaillesztés 1  Végezzünk kiértékelést az előbb említett adatstruktúrán type Environment = String => Int def eval(t: Tree, env: Environment): Int = t match { case Sum(l, r) => eval(l, env) + eval(r, env) case Var(n) => env(n) case Const(v) => v } eval(Sum(Sum(Var("x"),Var("x")),{case "x" => 5})

Case osztályok – Mintaillesztés 2  Végezzünk kiértékelést az előbb említett adatstruktúrán def derive(t: Tree, v: String): Tree = t match { case Sum(l, r) => Sum(derive(l, v), derive(r, v)) case Var(n) if (v == n) => Const(1) case _ => Const(0) } derive(Sum(Sum(Var("x"), Var("x")), "x")  Eredménye: Sum(Sum(Const(1), Const(1))

Köszönöm a figyelmet! Kovács Vincent