Scala. Wprowadzenie do języka.

Podobne dokumenty
Programowanie obiektowe

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Platformy Programistyczne Podstawy języka Java

Programowanie obiektowe

Przygotował: Jacek Sroka. PO* - Scala (iteratory, leniwość, view bounds i konwersje)

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Kurs programowania. Wykład 9. Wojciech Macyna

Tworzenie aplikacji w języku Java

KOTLIN. Język programowania dla Androida

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Na przykładzie języków Java, C# i odrobiny C++ Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Scala. Obiektowo-funkcyjny język programowania. Zbyszek Skowron

Programowanie RAD Delphi

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Wstęp do ruby dla programistów javy

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Programowanie obiektowe

Programowanie obiektowe

Język programowania Scala / Grzegorz Balcerek. Wyd. 2. Poznań, cop Spis treści

Programowanie obiektowe

Scala - programowanie obiektowo-funkcyjne

WYKORZYSTANIE JĘZYKA GROOVY W TESTACH JEDNOSTKOWYCH, INTEGRACYJNYCH I AUTOMATYCZNYCH. Mirosław Gołda, Programista Java

Co jeszcze mogą nam dać adnotacje? Adam Warski

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Podstawowe części projektu w Javie

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

JavaScript funkcyjność

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Dawid Gierszewski Adam Hanasko

Akademia ETI. Wprowadzenie do programowania w Javie PG Java User Group Przemysław Kulesza

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Język programowania Scala + aktorzy Akka

Języki skryptowe w programie Plans

Programowanie obiektowe

Redis, skrypty w języku Lua

Programowanie, algorytmy i struktury danych

Aplikacje webowe z wykorzystaniem. Scala i Lift. Opracował: Mikołaj Sochacki

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Podstawy otwartych języków programowania Przechowywanie danych

java.util.* :Kolekcje Tomasz Borzyszkowski

Klasy abstrakcyjne, interfejsy i polimorfizm

Na przykładzie języków Java, C# i odrobiny C++ Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Programowanie w Ruby

Microsoft IT Academy kurs programowania

Wykorzystywanie parsera DOM w programach Java i PL/SQL

Wprowadzenie do języka Java

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Programowanie obiektowe

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

Wykład 4: Klasy i Metody

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

Scenariusz Web Design DHTML na 10 sesji. - Strony statyczne I dynamiczne. - Dodawanie kodu VBScript do strony HTML. Rysunek nie jest potrzebny

DYNAMICZNE PRZYDZIELANIE PAMIECI

Klasy i obiekty cz II

Kurs WWW. Paweł Rajba.

Współbieżność w środowisku Java

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Java: interfejsy i klasy wewnętrzne

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Języki i metody programowania Java Lab4 podejście obiektowe, zastosowanie pojemników

Automaty do zadań specjalnych. Olga Maciaszek-Sharma, Artur Kotow Wersja 1,

Programowanie obiektowe

Programowanie w Internecie. Java

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

Przygotował: Jacek Sroka. JNP 3 język Scala

Programowanie obiektowe

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

JAVA?? to proste!! Autor: wojtekb111111

Programowanie obiektowe

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Kiedy potrzebne. Struktura (rekord) Struktura w języku C# Tablice struktur. struktura, kolekcja

Enkapsulacja, dziedziczenie, polimorfizm

Scala + NetBeans AKA: Nowoczesne obiektowe języki programowania i środowiska programistyczne na przykładzie Scali i środowiska NetBeans

Programowanie obiektowe

Singleton. Cel: Przykład: Zastosowanie: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej.

Programowanie w Javie - wykład 3

Przygotował: Jacek Sroka. PO* - Scala (typy uogólnione, listy)

akademia androida Składowanie danych część VI

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Comparable<Klasa_uzytkownika>

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Języki i metodyka programowania. Język C# pętle, sterowanie, wyjątki

GUI - projektowanie interfejsów cz. II

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Przegląd języka Python. Łukasz Anwajler

Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 Zofia Kruczkiewicz

Instrukcja 3 Laboratorium z Podstaw Inżynierii Oprogramowania

Podstawy i języki programowania

Polimorfizm. dr Jarosław Skaruz

Dziedziczenie. dr Jarosław Skaruz

Google Web Toolkit. Piotr Findeisen

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Transkrypt:

Scala Wprowadzenie do języka. 1 1

whoami Michał Januszewski twitter.com/mjanuszewski michal@mjanuszewski.pl 2 2

Other activities * www.kropkapodi.pl 3 3

Krótka historia......czyli co, po co i dlaczego... 4 4

Features (ficzery) Statyczne typowanie Wieloparadygmatowość JVM +....NET ;-) Zwięzła, elastyczna i elegancka składnia Inferencja typu Skalowalność Wydajność 5 5

Static typing Typ zmiennej przechowywany w zmiennej przez cały cykl życia. Możliwość przechowywania obiektów tego samego typu lub pochodnych. Dlaczego nie dynamiczne? - słabsza wydajność - brak optymalizacji ze strony kompilatora - trudniejsza implementacja w IDE 6 6

Paradygmaty Object-oriented - wszystko jest obiektem, brak typów podstawowych, traitsy oraz singletony. Functional - immutable variables (wielowątkowość), funkcje jako obiekty, domknięcia (ang. closures ). 7 7

Platformy JVM.NET 8 8

Inferencja typu Scala posiada wbudowany mechanizm inferencji typu, dzięki któremu nie jesteśmy zmuszani do definiowania typu zmiennej. Kompilator przypisuje zmiennej typ, na podstawie wartości przypisanej do tej zmiennej. 9 9

Skalowalność Scala jest językiem skalowalnym, co oznacza, że doskonale nadaje się do pisania zarówno prostych skryptów, jak i rozbudowanych aplikacji. 10 10

Jak zacząć? www.scala-lang.org/downloads REPL plugin do IDE (Intellij IDEA, Eclipse, etc.) 11 11

Show me the code! 12 12

Zmienne val s: String = string var s = kolejny string lazy val i = 10 val map = Map(1 -> jeden, 2 -> dwa ) val odpowiednik javowego final var zwykła zmienna 13 13

Funkcje def join(strings: List[String], sep: String): String = strings.mkstring(sep) def show(list: String*) = for (x <- list) println(x) val increase = (x: Int) => x + 1 increase(10) val sum(a: Int, b: Int, c: Int) = a + b + c val othersum = sum _ othersum(2, 4, 5) val one = sum(1, _:Int, 3) val result = one(2) 14 14

Inferencja typu Java: Map<Integer,String> mapa = new HashMap<Integer, String>(); Scala: val mapa: Map[Integer,String] = new HashMap val mapa2 = new HashMap[Integer,String] 15 15

Pakiety import scala.collection.mutable._ import java.util.{map, HashMap} package scala.collection { import immutable._ } def function() = { import scala.collection.immutable.{ Stack => Stos, TreeMap => _ } } 16 16

Nowe typy val s = To jest przykładowy napis rozdzielony na kilka wierszy. Koniec val krotka = (1, tekst, new Car) val nr = krotka._1 val car = krotka._3 val krotka2 = 1 -> napis // (1, napis ) 17 17

Notacja operatorowa def parzysta(x: Int) = (x % 2) == 0 List(1,2,3,4,5).filter(x => parzysta(x)).foreach(y => println(y)) List(1,2,3,4,5).filter(parzysta( _ )).foreach(println( _ )) List(1,2,3,4,5) filter parzysta foreach println 18 18

Instrukcje warunkowe val y = 4 val x = if (y > 0) true else false val file = new File( in.txt ) val filepath = if (file.exists()) { file.getabsolutepath() } else { file.createnewfile() file.getabsolutepath() } 19 19

Pętla for val fruits = List( apple, orange, banana ) for (fruit <- fruits) // for(string s : fruits) println(fruit) for { fruit <- fruits if fruit.startswith( a ) if fruit.length == 5 } println( Czy to jabłko? ) 20 20

Pętla for od środka for (fruit <- fruits) println(fruit) fruits.foreach( fruit => println( fruit ) ) for { fruit <- fruits if fruit.startswith( a ) if fruit.length == 5 } println( jabłko ) fruits.filter( x => x.startswith( a ) && x.length == 5).foreach ( x => println( jabłko ) ) 21 21

Generatory for (i <- 1 to 5) println(i) for (j <- 1 until 10) println(i) val owoce = for { fruit <- List( apple, orange, banana ) } yield fruit owoce.foreach(println) 22 22

Pattern matching val x = List(2.0, sesja, new Praca(), false) for(elem <- x) elem match { case d: Double => println( Why? ) case s: String => println( When?! ) case p: Praca => println( Really? ) case b: Boolean => println( uff... ) case _ => println( Just kidding ;-) ) } 23 23

Pattern matching (cd) val n1 = List(1,2,3,4) val n2 = List(2,4,6,8) val empty = List() for (list <- List(n1, n2, empty)) { list match { case List(_, 2, _, _) => println( 4 elementy i drugi to 2 ) case List(2, _*) => println( Lista z 2 na początku ) case List(_*) => println( Zero lub więcej elementów ) } } 24 24

Pattern matching (cd.) val t1 = ( A, B ) val t2 = ( B, A ) for( t <- List(t1, t2)) t match { case (x, y) if x == A => println( Krotka z A ) case (x, y) => println( Inna krotka ) } 25 25

Obsługa wyjątków import java.util.calendar val then = null val now = Calendar.getInstance() try { now.compareto(then) } catch { case e: NullPointerException => ( Null! ) case _ => ( Inny wyjątek ) } finally { println( Wszystko ok! ) } 26 26

Traits trait Car { def start() = println( wrrruum ) def horn() = println( beeep! ) } trait Engine { def accel() = println( Go faster! ) } class GasCar extends Car with Engine { def cartype() = GasCar } val car = new GasCar car.start() car.accel() 27 27

Klasy i obiekty class Rational(val n:int, val d:int) { def this(n: Int) = this(n, 1) def + (that: Rational): Rational = new Rational(n * that.d + that.n*d, d * that.d) override def tostring() = n + "/" + d override def hashcode = 25 + (25 + n) + d } object Rational { def apply(n: Int, d: Int) = new Rational(n, d) def apply(n: Int) = new Rational(n) } 28 28

Case class case class X(x: Int, y: String) Możliwość tworzenia obiektów bez użycia new : val x = X(4, cztery ) Parametry konstruktora otrzymują val, więc tworzone są odpowiednie pola w klasie. Kompilator automatycznie dodaje metody tostring(), hashcode() oraz equals, więc można w prosty sposób porównywać obiekty 29 29

Case class - PM case class Osoba(imie: String, nazwisko: String, wiek: Double) val zenek = Osoba("Zenek", "Augustyński", 21.4) val kasia = Osoba("Kasia", "Bywalska", 24.3) val gosia = Osoba("Gosia", "Cichociemna", 24.) for(osoba <- List(zenek, kasia, gosia)) osoba match { case Osoba(_, _, 24) => println("gosia?") case Osoba("Kasia", _, _) => println("jakaś Kasia") } 30 30

Kolekcje krótki przegląd 31 31

List val l1 = List("apple", "orange", "mandarin") val l2 = "apple" :: "orange" :: "mandarin" :: Nil val numbers = List(1,2,3,4,5) val sorted = l1.sort( _ < _ ) val lengths = l2.map( _.length ) val filtered = l1.filter( _.startswith("o") ) val sum = (0 /: numbers) { _ + _ } val product = numbers.foldleft(1) { _ * _ } 32 32

Map import scala.collection.mutable._ val map = Map[Int, String]() map ++= List(1 -> apple, 2 -> orange ) map += (3 -> banana ) map.contains(2) val orange = map(2) map.keys, map.values 33 33

Array val zeros = Array[String](0) val onetofive = Array(1,2,3,4,5) import scala.collection.mutable._ val buffer = Array(1,2,3,4) buffer += 5 buffer -= 2 34 34

Gdzie szukać info? www.scala-lang.org / Documentation / Manuals ibm.com/developerworks/java/library/j-scala01228.html scala.sygneca.com Książki wydawnictw: O'reilly, Artima, Apress oraz Pragmatic Kanał irc #scala.pl oraz #scala @ freenode (aka blackrain) 35 35

Pytania? 36 36

Dziękuję za uwagę! 37 37