SlideShare une entreprise Scribd logo
1  sur  29
Programowanie w języku Scala

                      Materiały pochodzą ze strony:
                        www.devcastzone.com




copyright BNS MEDIA
                                 www.devcastzone.com
Scala – składnia języka, funkcje,
                 zmienne, pakiety, klasy
                      Wprowadzenie do języka Scala




copyright BNS MEDIA
                              www.devcastzone.com
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
IDE
      •     Eclipse
      •     IDEA
      •     Netbeans
      •     Emacs
      •     VIM




                       Programowanie w języku Scala
copyright BNS MEDIA
                            www.devcastzone.com       4
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
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
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
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
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
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
Klasa Person w Scali
      class Person(var name: String, var age: Int)




                               Programowanie w języku Scala
copyright BNS MEDIA
                                    www.devcastzone.com       11
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
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
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
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
Zastosowania obiektów
      • Funkcje biblioteczne
      • Fabryki
      • Singletony




                           Programowanie w języku Scala
copyright BNS MEDIA
                                www.devcastzone.com       16
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
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
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
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
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
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
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
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
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
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
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
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
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

Contenu connexe

Similaire à Programowanie w języku Scala

Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...The Software House
 
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
4Developers 2015: Property-based testing w języku Scala - Paweł GrajewskiPROIDEA
 
TDD drogą do oświecenia w Scali
TDD drogą do oświecenia w ScaliTDD drogą do oświecenia w Scali
TDD drogą do oświecenia w ScaliKonrad Malawski
 
Modularny JavaScript - meet.js
Modularny JavaScript - meet.jsModularny JavaScript - meet.js
Modularny JavaScript - meet.jsPatryk Jar
 

Similaire à Programowanie w języku Scala (7)

Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...
 
Scala
ScalaScala
Scala
 
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
 
TDD drogą do oświecenia w Scali
TDD drogą do oświecenia w ScaliTDD drogą do oświecenia w Scali
TDD drogą do oświecenia w Scali
 
DSL - DYI
DSL - DYIDSL - DYI
DSL - DYI
 
Mongodb with Rails
Mongodb with RailsMongodb with Rails
Mongodb with Rails
 
Modularny JavaScript - meet.js
Modularny JavaScript - meet.jsModularny JavaScript - meet.js
Modularny JavaScript - meet.js
 

Programowanie w języku Scala

  • 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

  1. Equals jest bardzo trudne w implementacjiPrzydane zamiast java beans
  2. Case objecty jedna instancjaSemantycznie istnieje tylko jeden kolor