http://www.devcastzone.com/course,programowanie-w-jezyku-scala
Szkolenie "Programowanie w języku Scala" wprowadza do programowania w języku Scala. W trakcie trwania poznasz podstawy języka Scala jak również zagadnienia zaawansowane. Po zakończeniu szkolenia, uczestnik będzie mógł rozpocząć samodzielne tworzenie aplikacji z wykorzystaniem Scali. Devcast rozpoczyna się od konfiguracji środowiska programistycznego, a kończy na rozbudowanym systemie typów Scali.
1. Programowanie w języku Scala
Materiały pochodzą ze strony:
www.devcastzone.com
copyright BNS MEDIA
www.devcastzone.com
2. Scala – składnia języka, funkcje,
zmienne, pakiety, klasy
Wprowadzenie do języka Scala
copyright BNS MEDIA
www.devcastzone.com
3. Treśd modułu
1. IDE
2. Podstawowe Typy Danych
3. Definiowanie funkcji
Źródło: sxc.hu/photo/204689
4. Definiowanie klas
5. Pakiety
6. Zagnieżdżanie
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 3
4. IDE
• Eclipse
• IDEA
• Netbeans
• Emacs
• VIM
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 4
5. Podstawowe Typy Danych
• Znane z Javy: Int, Long, Float, Double, Boolean, ...
• Dodatkowo ich rozszerzenia RichInt, RichLong,
RichString, ...
• Konwersje Int -> RichInt, ...
• Brak prymitywów
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 5
6. Składnia Scali
• Stałe (final w Javie)
wyrażenie
val lub var typ
val i: Int = 4 // jawne typowanie
nazwa
val x = 2 // typ jest opcjonalny (inferencja)
• Zmienne
var y = 4.1234
var z: Double = 11.123
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 6
7. Składnia – definicja funkcji
• Klamry ,- dookoła funkcji są opcjonalne jeżeli funkcja
mieści się w jednej linii
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 7
8. Pakiety
package it.bns.scala
import scala.collection.immutable
import immutable.HashMap
import immutable.List
import immutable.{Set => ScalaSet, List, HashMap}
import immutable._
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 8
9. Klasy Konstruktor
class MyClass(number: Int, val text: String) {
W
val x = 2
ł
a val i: Int = 4
s var y = 4.1234
n var z: Double = 11.123
o var c: Char = 'c'
ś val map: HashMap[Int, String] = new HashMap[Int, String]()
c def min(x: Int, y: Int): Int = if (x < y) x else y
i }
val myClass = new MyClass(0, "My First Class in Scala")
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 9
10. Klasa Person w Javie
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 10
11. Klasa Person w Scali
class Person(var name: String, var age: Int)
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 11
12. Konstruktory dodatkowe w Scali
class Person(var age: Int, var name: String) {
// konstruktory dodatkowe
def this(name: String) = this(0, name)
def this() = {
this("Foo Bar")
age = 12
}
}
scala> val john = new Person("John Smith")
john: Person = Person@2cc47220
scala> john.age = 31
john.age: Int = 31
scala> println("name:%s age:%s".format(john.name, john.age))
name:John Smith age:31
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 12
13. Obiekty
• W Scali nie ma klas statycznych
• Odwołania po nazwie odbywają się przez Obiekty
(nie są to instancje klas)
• Obiekty są kompilowane to klas statycznych w
bajtkodzie
• Mogą nazywad się tak samo jak klasy i jeżeli
występują obok siebie nazywane są „Companion
object”
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 13
14. Obiekty
object HelloWorld {
def main(args: Array[String]) = println("Hello World !")
}
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World !");
}
}
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 14
15. Obiekty – „companion objects”
class Person(var age: Int, var name: String) {
def this(name: String) = this(0, name)
}
object Person {
def prettyPrint(p: Person) = println("name:%s age:%s".format(p.name,
p.age))
def apply(age: Int, name: String) = new Person(age, name)
def apply() = new Person(0, "undefined")
}
scala> val john = Person(43, "John Smith")
john: Person = Person@18c9d448
scala> Person.prettyPrint(john)
name:John Smith age:43
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 15
16. Zastosowania obiektów
• Funkcje biblioteczne
• Fabryki
• Singletony
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 16
17. Klasy abstrakcyjne
• Nie można tworzyć instancji klas
abstrakcyjnych
• Mogą zawierać zarówno konretne jak i
niezdefiniowane pola oraz metody
abstract class Fruit
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 17
18. Case class i case object
• Daje „darmową” implementację
o toString()
o hashCode()
o equals()
• Jest niezmienna
• Można używad do „pattern matchingu”
• Ułatwia tworzenie struktur danych
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 18
19. Case class i case object
abstract class Fruit
abstract class Color
case object Green extends Color
case object Red extends Color
case object Orange extends Color
case class Apple(color: Color) extends Fruit
case class Pear(color: Color) extends Fruit
case class Orange(color: Color) extends Fruit
val redApple = Apple(Red)
val greenApple = Apple(Green)
val pear = Pear(Green)
val orange = Orange(Orange)
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 19
20. Case class i case object - użycie
scala> redApple == Apple(Red)
res6: Boolean = true
scala> redApple == greenApple
res7: Boolean = false
scala> pear.color
res8: Color = Green
scala> orange.color = Green
<console>:12: error: reassignment to val
orange.color = Green
^
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 20
21. Case class i case object - użycie
scala> redApple == Apple(Red)
res6: Boolean = true
scala> redApple == greenApple
res7: Boolean = false
scala> pear.color
res8: Color = Green
scala> orange.color = Green
<console>:12: error: reassignment to val
orange.color = Green
^
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 21
22. Operatory
• Operatory to funkcje z jednym argumentem
class MyInt(i: Int) {
def *+(x: Int) = i * x + x
def mult(x: Int) = i * x
}
scala> val i = 2
i: Int = 2
scala> val h = new MyInt(3)
h: MyInt = MyInt@3646a658
scala> h *+ 3
res0: Int = 12
scala> h.*+(3)
res1: Int = 12
scala> h mult 3
res3: Int = 9
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 22
23. Zagnieżdżanie
• Pakiety nie mogą byd zagnieżdżone
• Można zagnieżdżad praktycznie wszystkie pozostałe
konstrukcje
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 23
24. Modyfikatory dostępu
• public – niejawny i domyślny
• protected
• private
• private|protected*„nazwa pakietu”+ - ograniczenie
dostępu w zasięgu pakietu
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 24
25. Modyfikatory dostępu
package bns
object Person {
/*public*/ def prettyPrint(p: Person) = println("name:%s
age:%s".format(p.name, p.age))
private def apply(age: Int, name: String) = new Person(age, name)
protected def apply() = new Person(0, "undefined")
protected[bns] def addAge(p: Person) = p.age += 1
}
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 25
26. Hierarchia Dziedziczenia
Źródło: http://www.artima.com/pins1ed/images/scalaHierarchy.jpg
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 26
27. Programowanie w języku Scala – program pełnego
szkolenia
1. Wprowadzenie do języka Scala – historia, instalacja, podstawy
o Wprowadzenie
o Historia
o Instalacja
o Pierwsze kroki
2. Scala – składnia języka, funkcje, zmienne, pakiety, klasy
o IDE
o Podstawowe Typy Danych
o Definiowanie funkcji
o Definiowanie klas
o Pakiety
o Zagnieżdżanie
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 27
28. Programowanie w języku Scala – program pełnego
szkolenia
3. Scala – programowanie funkcyjne
o Funkcje jako obiekty
o Funkcje wyższych rzędów
o Listy
o Zastosowanie filter, map i reduce
o Funkcje częściowo zaaplikowane
o Pattern matching
o Nicośd w Scali
4. Parametryzacja i typy generyczne
o Typy Generyczne
o Parametryzacja Typów na podstawie przykładowej implementacji generycznej
kolejki
o Wariancja
5. Traits, niejawne konwersje
o Niejawne konwersje
o Traits
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 28
29. Wprowadzenie do języka Scala
http://www.devcastzone.com/course,programowanie-w-jezyku-
scala
Zapraszamy
Programowanie w języku Scala
copyright BNS MEDIA
www.devcastzone.com 29
Notes de l'éditeur
Equals jest bardzo trudne w implementacjiPrzydane zamiast java beans
Case objecty jedna instancjaSemantycznie istnieje tylko jeden kolor