Wstęp
           O języku
          Przykłady




     BIWAK Scali
czyli Scala w domu i zagrodzie




          Krzysztof ...
Wstęp
                                         Czym jest Scala
                             O języku
                     ...
Wstęp
                                         Czym jest Scala
                             O języku
                     ...
Wstęp
                                         Czym jest Scala
                             O języku
                     ...
Wstęp
                                         Czym jest Scala
                             O języku
                     ...
Wstęp
                                       Czym jest Scala
                           O języku
                         ...
Wstęp
                                       Czym jest Scala
                           O języku
                         ...
Wstęp
                                       Czym jest Scala
                           O języku
                         ...
Wstęp
                                      Czym jest Scala
                          O języku
                           ...
Wstęp
                                       Czym jest Scala
                           O języku
                         ...
Wstęp
                                       Czym jest Scala
                           O języku
                         ...
Wstęp
                                     Czym jest Scala
                         O języku
                             ...
Wstęp
                                     Czym jest Scala
                         O języku
                             ...
Wstęp
                                     Czym jest Scala
                         O języku
                             ...
Wstęp
                                     Czym jest Scala
                         O języku
                             ...
Wstęp
                                     Czym jest Scala
                         O języku
                             ...
Wstęp
                                     Czym jest Scala
                         O języku
                             ...
Wstęp
                                           Czym jest Scala
                               O języku
                 ...
Wstęp
                                           Czym jest Scala
                               O języku
                 ...
Wstęp
                                           Czym jest Scala
                               O języku
                 ...
Wstęp
                                           Czym jest Scala
                               O języku
                 ...
Wstęp
                                           Czym jest Scala
                               O języku
                 ...
Wstęp
                                           Czym jest Scala
                               O języku
                 ...
Wstęp
                                           Czym jest Scala
                               O języku
                 ...
Wstęp
                                           Czym jest Scala
                               O języku
                 ...
Wstęp
                                           Czym jest Scala
                               O języku
                 ...
Wstęp
                                           Czym jest Scala
                               O języku
                 ...
Wstęp
                                           Czym jest Scala
                               O języku
                 ...
Wstęp
                                                      Czym jest Scala
                                          O ję...
Wstęp
                                                      Czym jest Scala
                                          O ję...
Wstęp
                                                      Czym jest Scala
                                          O ję...
Wstęp
                                                      Czym jest Scala
                                          O ję...
Wstęp
                                                      Czym jest Scala
                                          O ję...
Wstęp
                                                      Czym jest Scala
                                          O ję...
Wstęp
                                                      Czym jest Scala
                                          O ję...
Wstęp     Programowanie funkcyjne
                             O języku    Elastyczna Składnia
                           ...
Wstęp     Programowanie funkcyjne
                             O języku    Elastyczna Składnia
                           ...
Wstęp     Programowanie funkcyjne
                             O języku    Elastyczna Składnia
                           ...
Wstęp     Programowanie funkcyjne
                             O języku    Elastyczna Składnia
                           ...
Wstęp     Programowanie funkcyjne
                           O języku    Elastyczna Składnia
                          Prz...
Wstęp     Programowanie funkcyjne
                             O języku    Elastyczna Składnia
                           ...
Wstęp     Programowanie funkcyjne
                           O języku    Elastyczna Składnia
                          Prz...
Wstęp     Programowanie funkcyjne
                            O języku    Elastyczna Składnia
                           P...
Wstęp     Programowanie funkcyjne
                            O języku    Elastyczna Składnia
                           P...
Wstęp     Programowanie funkcyjne
                            O języku    Elastyczna Składnia
                           P...
Wstęp     Programowanie funkcyjne
                           O języku    Elastyczna Składnia
                          Prz...
Wstęp     Programowanie funkcyjne
                         O języku    Elastyczna Składnia
                        Przykła...
Wstęp     Programowanie funkcyjne
                         O języku    Elastyczna Składnia
                        Przykła...
Wstęp     Programowanie funkcyjne
                         O języku    Elastyczna Składnia
                        Przykła...
Wstęp     Programowanie funkcyjne
                               O języku    Elastyczna Składnia
                         ...
Wstęp     Programowanie funkcyjne
                             O języku    Elastyczna Składnia
                           ...
Wstęp     Programowanie funkcyjne
                            O języku    Elastyczna Składnia
                           P...
Wstęp     Programowanie funkcyjne
                            O języku    Elastyczna Składnia
                           P...
Wstęp     Programowanie funkcyjne
                            O języku    Elastyczna Składnia
                           P...
Wstęp     Programowanie funkcyjne
                             O języku    Elastyczna Składnia
                           ...
Wstęp     Programowanie funkcyjne
                             O języku    Elastyczna Składnia
                           ...
Wstęp     Programowanie funkcyjne
                        O języku    Elastyczna Składnia
                       Przykłady...
Wstęp     rozgrzewka
    O języku    ciekawsze
   Przykłady    przerażające




  Przykłady




Krzysztof Goj   BIWAK Scali
Wstęp     rozgrzewka
                                 O języku    ciekawsze
                                Przykłady    p...
Wstęp    rozgrzewka
                                         O języku   ciekawsze
                                        ...
Wstęp     rozgrzewka
                               O języku    ciekawsze
                              Przykłady    przer...
Wstęp     rozgrzewka
                               O języku    ciekawsze
                              Przykłady    przer...
Wstęp     rozgrzewka
                               O języku    ciekawsze
                              Przykłady    przer...
Wstęp     rozgrzewka
                                O języku    ciekawsze
                               Przykłady    prz...
Wstęp     rozgrzewka
                                O języku    ciekawsze
                               Przykłady    prz...
Wstęp     rozgrzewka
                                O języku    ciekawsze
                               Przykłady    prz...
Wstęp     rozgrzewka
                                O języku    ciekawsze
                               Przykłady    prz...
Wstęp     rozgrzewka
                                O języku    ciekawsze
                               Przykłady    prz...
Wstęp     rozgrzewka
                               O języku    ciekawsze
                              Przykłady    przer...
Wstęp     rozgrzewka
                               O języku    ciekawsze
                              Przykłady    przer...
Wstęp     rozgrzewka
                               O języku    ciekawsze
                              Przykłady    przer...
Wstęp     rozgrzewka
                               O języku    ciekawsze
                              Przykłady    przer...
Wstęp     rozgrzewka
                               O języku    ciekawsze
                              Przykłady    przer...
Wstęp     rozgrzewka
                               O języku    ciekawsze
                              Przykłady    przer...
Wstęp     rozgrzewka
                               O języku    ciekawsze
                              Przykłady    przer...
Wstęp     rozgrzewka
                               O języku    ciekawsze
                              Przykłady    przer...
Wstęp     rozgrzewka
                                 O języku    ciekawsze
                                Przykłady    p...
Wstęp     rozgrzewka
                                 O języku    ciekawsze
                                Przykłady    p...
Wstęp     rozgrzewka
                                 O języku    ciekawsze
                                Przykłady    p...
Wstęp     rozgrzewka
                               O języku    ciekawsze
                              Przykłady    przer...
Wstęp     rozgrzewka
                               O języku    ciekawsze
                              Przykłady    przer...
Wstęp     rozgrzewka
                                  O języku    ciekawsze
                                 Przykłady   ...
Wstęp     rozgrzewka
                                 O języku    ciekawsze
                                Przykłady    p...
Wstęp     rozgrzewka
                                        O języku    ciekawsze
                                       ...
Wstęp     rozgrzewka
                                        O języku    ciekawsze
                                       ...
Wstęp       rozgrzewka
                                        O języku      ciekawsze
                                   ...
Wstęp     rozgrzewka
                               O języku    ciekawsze
                              Przykłady    przer...
Wstęp     rozgrzewka
                                O języku    ciekawsze
                               Przykłady    prz...
Wstęp     rozgrzewka
                                O języku    ciekawsze
                               Przykłady    prz...
Wstęp     rozgrzewka
                                O języku    ciekawsze
                               Przykłady    prz...
Wstęp     rozgrzewka
                                O języku    ciekawsze
                               Przykłady    prz...
Wstęp     rozgrzewka
                                O języku    ciekawsze
                               Przykłady    prz...
Wstęp     rozgrzewka
                                O języku    ciekawsze
                               Przykłady    prz...
Wstęp     rozgrzewka
                                O języku    ciekawsze
                               Przykłady    prz...
Wstęp     rozgrzewka
                                O języku    ciekawsze
                               Przykłady    prz...
Wstęp     rozgrzewka
                                O języku    ciekawsze
                               Przykłady    prz...
Wstęp     rozgrzewka
                                O języku    ciekawsze
                               Przykłady    prz...
Wstęp     rozgrzewka
                                O języku    ciekawsze
                               Przykłady    prz...
Wstęp     rozgrzewka
                       O języku    ciekawsze
                      Przykłady    przerażające


Hierar...
Wstęp     rozgrzewka
                   O języku    ciekawsze
                  Przykłady    przerażające


Funkcja




  ...
Wstęp     rozgrzewka
                               O języku    ciekawsze
                              Przykłady    przer...
Wstęp     rozgrzewka
                                 O języku    ciekawsze
                                Przykłady    p...
Wstęp     rozgrzewka
                                 O języku    ciekawsze
                                Przykłady    p...
Do poczytania
                       Zakończenie
                                      Dziękuję


Do poczytania



     ht...
Do poczytania
                       Zakończenie
                                      Dziękuję


Do poczytania



     ht...
Do poczytania
                       Zakończenie
                                      Dziękuję


Do poczytania



     ht...
Do poczytania
                       Zakończenie
                                      Dziękuję


Do poczytania



     ht...
Do poczytania
                       Zakończenie
                                      Dziękuję


Do poczytania



     ht...
Do poczytania
                       Zakończenie
                                      Dziękuję


Do poczytania



     ht...
Do poczytania
                       Zakończenie
                                      Dziękuję


Do poczytania



     ht...
Do poczytania
 Zakończenie
                Dziękuję




 Dobranoc!




Krzysztof Goj   BIWAK Scali
Upcoming SlideShare
Loading in...5
×

Scala

3,229

Published on

Scala

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,229
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
48
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Scala

  1. 1. Wstęp O języku Przykłady BIWAK Scali czyli Scala w domu i zagrodzie Krzysztof Goj Koło Naukowe Informatyków BIT 3 grudnia 2008 Krzysztof Goj BIWAK Scali
  2. 2. Wstęp Czym jest Scala O języku Hello, World! Przykłady Czym jest Scala – flame Lepsza Java Haskell dla ludzi Ruby, który nie muli Procesy Erlanga na JVM Krzysztof Goj BIWAK Scali
  3. 3. Wstęp Czym jest Scala O języku Hello, World! Przykłady Czym jest Scala – flame Lepsza Java Haskell dla ludzi Ruby, który nie muli Procesy Erlanga na JVM Krzysztof Goj BIWAK Scali
  4. 4. Wstęp Czym jest Scala O języku Hello, World! Przykłady Czym jest Scala – flame Lepsza Java Haskell dla ludzi Ruby, który nie muli Procesy Erlanga na JVM Krzysztof Goj BIWAK Scali
  5. 5. Wstęp Czym jest Scala O języku Hello, World! Przykłady Czym jest Scala – flame Lepsza Java Haskell dla ludzi Ruby, który nie muli Procesy Erlanga na JVM Krzysztof Goj BIWAK Scali
  6. 6. Wstęp Czym jest Scala O języku Hello, World! Przykłady Czym jest Scala Nazwa i logo Obiektowo-funkcyjny język programowania wysokiego poziomu i ogólnego przeznaczenia. Zgodność z Javą, wersja na .NET Elastyczna składnia pozwala na tworzenie DSL-i Stworzona przez Martina Oderskiego (EPFL) http://www.scala-lang.org Krzysztof Goj BIWAK Scali
  7. 7. Wstęp Czym jest Scala O języku Hello, World! Przykłady Czym jest Scala Nazwa i logo Obiektowo-funkcyjny język programowania wysokiego poziomu i ogólnego przeznaczenia. Zgodność z Javą, wersja na .NET Elastyczna składnia pozwala na tworzenie DSL-i Stworzona przez Martina Oderskiego (EPFL) http://www.scala-lang.org Krzysztof Goj BIWAK Scali
  8. 8. Wstęp Czym jest Scala O języku Hello, World! Przykłady Czym jest Scala Nazwa i logo Obiektowo-funkcyjny język programowania wysokiego poziomu i ogólnego przeznaczenia. Zgodność z Javą, wersja na .NET Elastyczna składnia pozwala na tworzenie DSL-i Stworzona przez Martina Oderskiego (EPFL) http://www.scala-lang.org Krzysztof Goj BIWAK Scali
  9. 9. Wstęp Czym jest Scala O języku Hello, World! Przykłady Czym jest Scala Nazwa i logo Obiektowo-funkcyjny język programowania wysokiego poziomu i ogólnego przeznaczenia. Zgodność z Javą, wersja na .NET Elastyczna składnia pozwala na tworzenie DSL-i Stworzona przez Martina Oderskiego (EPFL) http://www.scala-lang.org Krzysztof Goj BIWAK Scali
  10. 10. Wstęp Czym jest Scala O języku Hello, World! Przykłady Czym jest Scala Nazwa i logo Obiektowo-funkcyjny język programowania wysokiego poziomu i ogólnego przeznaczenia. Zgodność z Javą, wersja na .NET Elastyczna składnia pozwala na tworzenie DSL-i Stworzona przez Martina Oderskiego (EPFL) http://www.scala-lang.org Krzysztof Goj BIWAK Scali
  11. 11. Wstęp Czym jest Scala O języku Hello, World! Przykłady Czym jest Scala Nazwa i logo Obiektowo-funkcyjny język programowania wysokiego poziomu i ogólnego przeznaczenia. Zgodność z Javą, wersja na .NET Elastyczna składnia pozwala na tworzenie DSL-i Stworzona przez Martina Oderskiego (EPFL) http://www.scala-lang.org Krzysztof Goj BIWAK Scali
  12. 12. Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” w shellu Najprościej Scalę zmusić do mówienia pisząc w shellu. shell goj@abulafia ∼ % scala Welcome to Scala version 2.7.1.final [...] Type in expressions to have them evaluated. Type :help for more information. scala> println(quot;Hello, World!quot;) Hello, World! Krzysztof Goj BIWAK Scali
  13. 13. Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” w shellu Najprościej Scalę zmusić do mówienia pisząc w shellu. shell goj@abulafia ∼ % scala Welcome to Scala version 2.7.1.final [...] Type in expressions to have them evaluated. Type :help for more information. scala> println(quot;Hello, World!quot;) Hello, World! Krzysztof Goj BIWAK Scali
  14. 14. Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” w shellu Najprościej Scalę zmusić do mówienia pisząc w shellu. shell goj@abulafia ∼ % scala Welcome to Scala version 2.7.1.final [...] Type in expressions to have them evaluated. Type :help for more information. scala> println(quot;Hello, World!quot;) Hello, World! Krzysztof Goj BIWAK Scali
  15. 15. Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” w shellu Najprościej Scalę zmusić do mówienia pisząc w shellu. shell goj@abulafia ∼ % scala Welcome to Scala version 2.7.1.final [...] Type in expressions to have them evaluated. Type :help for more information. scala> println(quot;Hello, World!quot;) Hello, World! Krzysztof Goj BIWAK Scali
  16. 16. Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” w shellu Najprościej Scalę zmusić do mówienia pisząc w shellu. shell goj@abulafia ∼ % scala Welcome to Scala version 2.7.1.final [...] Type in expressions to have them evaluated. Type :help for more information. scala> println(quot;Hello, World!quot;) Hello, World! Krzysztof Goj BIWAK Scali
  17. 17. Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” w shellu Najprościej Scalę zmusić do mówienia pisząc w shellu. shell goj@abulafia ∼ % scala Welcome to Scala version 2.7.1.final [...] Type in expressions to have them evaluated. Type :help for more information. scala> println(quot;Hello, World!quot;) Hello, World! Krzysztof Goj BIWAK Scali
  18. 18. Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako osobny program najczęściej pisze się tak. . . hello.scala object HelloWorld extends Application { println(quot;Hello, world!quot;) } shell goj@abulafia ∼ % scalac hello.scala goj@abulafia ∼ % ls Hello.class Hello$.class hello.scala goj@abulafia ∼ % scala -cp . Hello Hello, World! goj@abulafia ∼ % java -cp .:$SCALA_HOME/lib/scala-library.jar Hello Hello, World! Krzysztof Goj BIWAK Scali
  19. 19. Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako osobny program najczęściej pisze się tak. . . hello.scala object HelloWorld extends Application { println(quot;Hello, world!quot;) } shell goj@abulafia ∼ % scalac hello.scala goj@abulafia ∼ % ls Hello.class Hello$.class hello.scala goj@abulafia ∼ % scala -cp . Hello Hello, World! goj@abulafia ∼ % java -cp .:$SCALA_HOME/lib/scala-library.jar Hello Hello, World! Krzysztof Goj BIWAK Scali
  20. 20. Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako osobny program najczęściej pisze się tak. . . hello.scala object HelloWorld extends Application { println(quot;Hello, world!quot;) } shell goj@abulafia ∼ % scalac hello.scala goj@abulafia ∼ % ls Hello.class Hello$.class hello.scala goj@abulafia ∼ % scala -cp . Hello Hello, World! goj@abulafia ∼ % java -cp .:$SCALA_HOME/lib/scala-library.jar Hello Hello, World! Krzysztof Goj BIWAK Scali
  21. 21. Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako osobny program najczęściej pisze się tak. . . hello.scala object HelloWorld extends Application { println(quot;Hello, world!quot;) } shell goj@abulafia ∼ % scalac hello.scala goj@abulafia ∼ % ls Hello.class Hello$.class hello.scala goj@abulafia ∼ % scala -cp . Hello Hello, World! goj@abulafia ∼ % java -cp .:$SCALA_HOME/lib/scala-library.jar Hello Hello, World! Krzysztof Goj BIWAK Scali
  22. 22. Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako osobny program najczęściej pisze się tak. . . hello.scala object HelloWorld extends Application { println(quot;Hello, world!quot;) } shell goj@abulafia ∼ % scalac hello.scala goj@abulafia ∼ % ls Hello.class Hello$.class hello.scala goj@abulafia ∼ % scala -cp . Hello Hello, World! goj@abulafia ∼ % java -cp .:$SCALA_HOME/lib/scala-library.jar Hello Hello, World! Krzysztof Goj BIWAK Scali
  23. 23. Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako osobny program najczęściej pisze się tak. . . hello.scala object HelloWorld extends Application { println(quot;Hello, world!quot;) } shell goj@abulafia ∼ % scalac hello.scala goj@abulafia ∼ % ls Hello.class Hello$.class hello.scala goj@abulafia ∼ % scala -cp . Hello Hello, World! goj@abulafia ∼ % java -cp .:$SCALA_HOME/lib/scala-library.jar Hello Hello, World! Krzysztof Goj BIWAK Scali
  24. 24. Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako osobny program najczęściej pisze się tak. . . hello.scala object HelloWorld extends Application { println(quot;Hello, world!quot;) } shell goj@abulafia ∼ % scalac hello.scala goj@abulafia ∼ % ls Hello.class Hello$.class hello.scala goj@abulafia ∼ % scala -cp . Hello Hello, World! goj@abulafia ∼ % java -cp .:$SCALA_HOME/lib/scala-library.jar Hello Hello, World! Krzysztof Goj BIWAK Scali
  25. 25. Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako osobny program najczęściej pisze się tak. . . hello.scala object HelloWorld extends Application { println(quot;Hello, world!quot;) } shell goj@abulafia ∼ % scalac hello.scala goj@abulafia ∼ % ls Hello.class Hello$.class hello.scala goj@abulafia ∼ % scala -cp . Hello Hello, World! goj@abulafia ∼ % java -cp .:$SCALA_HOME/lib/scala-library.jar Hello Hello, World! Krzysztof Goj BIWAK Scali
  26. 26. Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako osobny program najczęściej pisze się tak. . . hello.scala object HelloWorld extends Application { println(quot;Hello, world!quot;) } shell goj@abulafia ∼ % scalac hello.scala goj@abulafia ∼ % ls Hello.class Hello$.class hello.scala goj@abulafia ∼ % scala -cp . Hello Hello, World! goj@abulafia ∼ % java -cp .:$SCALA_HOME/lib/scala-library.jar Hello Hello, World! Krzysztof Goj BIWAK Scali
  27. 27. Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako osobny program najczęściej pisze się tak. . . hello.scala object HelloWorld extends Application { println(quot;Hello, world!quot;) } shell goj@abulafia ∼ % scalac hello.scala goj@abulafia ∼ % ls Hello.class Hello$.class hello.scala goj@abulafia ∼ % scala -cp . Hello Hello, World! goj@abulafia ∼ % java -cp .:$SCALA_HOME/lib/scala-library.jar Hello Hello, World! Krzysztof Goj BIWAK Scali
  28. 28. Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako osobny program najczęściej pisze się tak. . . hello.scala object HelloWorld extends Application { println(quot;Hello, world!quot;) } shell goj@abulafia ∼ % scalac hello.scala goj@abulafia ∼ % ls Hello.class Hello$.class hello.scala goj@abulafia ∼ % scala -cp . Hello Hello, World! goj@abulafia ∼ % java -cp .:$SCALA_HOME/lib/scala-library.jar Hello Hello, World! Krzysztof Goj BIWAK Scali
  29. 29. Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako skrypt . . . można też pisać skrypty script.sh #!/bin/sh exec scala quot;$0quot; quot;$¨ !# object HelloWorld { def main(args: Array[String]) { println(quot;Hello, World!quot;) } } HelloWorld.main(args) shell goj@abulafia ∼ % chmod +x script.sh goj@abulafia ∼ % ./script.sh Hello, World! Krzysztof Goj BIWAK Scali
  30. 30. Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako skrypt . . . można też pisać skrypty script.sh #!/bin/sh exec scala quot;$0quot; quot;$¨ !# object HelloWorld { def main(args: Array[String]) { println(quot;Hello, World!quot;) } } HelloWorld.main(args) shell goj@abulafia ∼ % chmod +x script.sh goj@abulafia ∼ % ./script.sh Hello, World! Krzysztof Goj BIWAK Scali
  31. 31. Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako skrypt . . . można też pisać skrypty script.sh #!/bin/sh exec scala quot;$0quot; quot;$¨ !# object HelloWorld { def main(args: Array[String]) { println(quot;Hello, World!quot;) } } HelloWorld.main(args) shell goj@abulafia ∼ % chmod +x script.sh goj@abulafia ∼ % ./script.sh Hello, World! Krzysztof Goj BIWAK Scali
  32. 32. Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako skrypt . . . można też pisać skrypty script.sh #!/bin/sh exec scala quot;$0quot; quot;$¨ !# object HelloWorld { def main(args: Array[String]) { println(quot;Hello, World!quot;) } } HelloWorld.main(args) shell goj@abulafia ∼ % chmod +x script.sh goj@abulafia ∼ % ./script.sh Hello, World! Krzysztof Goj BIWAK Scali
  33. 33. Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako skrypt . . . można też pisać skrypty script.sh #!/bin/sh exec scala quot;$0quot; quot;$¨ !# object HelloWorld { def main(args: Array[String]) { println(quot;Hello, World!quot;) } } HelloWorld.main(args) shell goj@abulafia ∼ % chmod +x script.sh goj@abulafia ∼ % ./script.sh Hello, World! Krzysztof Goj BIWAK Scali
  34. 34. Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako skrypt . . . można też pisać skrypty script.sh #!/bin/sh exec scala quot;$0quot; quot;$¨ !# object HelloWorld { def main(args: Array[String]) { println(quot;Hello, World!quot;) } } HelloWorld.main(args) shell goj@abulafia ∼ % chmod +x script.sh goj@abulafia ∼ % ./script.sh Hello, World! Krzysztof Goj BIWAK Scali
  35. 35. Wstęp Czym jest Scala O języku Hello, World! Przykłady “Hello, World!” jako skrypt . . . można też pisać skrypty script.sh #!/bin/sh exec scala quot;$0quot; quot;$¨ !# object HelloWorld { def main(args: Array[String]) { println(quot;Hello, World!quot;) } } HelloWorld.main(args) shell goj@abulafia ∼ % chmod +x script.sh goj@abulafia ∼ % ./script.sh Hello, World! Krzysztof Goj BIWAK Scali
  36. 36. Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Fundamenty programowania funkcyjnego Funkcje to zwykłe obiekty • Można je przekazywać jako argumenty do funkcji • Mogą być zwracane przez inne funkcje • Programujemy składając je na różne sposoby Izolowanie efektów ubocznych • Niezmienność (immutability) • Programujemy tworząc nowe obiekty na podstawie starych, a nie zmieniając istniejące Krzysztof Goj BIWAK Scali
  37. 37. Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Fundamenty programowania funkcyjnego Funkcje to zwykłe obiekty • Można je przekazywać jako argumenty do funkcji • Mogą być zwracane przez inne funkcje • Programujemy składając je na różne sposoby Izolowanie efektów ubocznych • Niezmienność (immutability) • Programujemy tworząc nowe obiekty na podstawie starych, a nie zmieniając istniejące Krzysztof Goj BIWAK Scali
  38. 38. Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Fundamenty programowania funkcyjnego Funkcje to zwykłe obiekty • Można je przekazywać jako argumenty do funkcji • Mogą być zwracane przez inne funkcje • Programujemy składając je na różne sposoby Izolowanie efektów ubocznych • Niezmienność (immutability) • Programujemy tworząc nowe obiekty na podstawie starych, a nie zmieniając istniejące Krzysztof Goj BIWAK Scali
  39. 39. Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Fundamenty programowania funkcyjnego Funkcje to zwykłe obiekty • Można je przekazywać jako argumenty do funkcji • Mogą być zwracane przez inne funkcje • Programujemy składając je na różne sposoby Izolowanie efektów ubocznych • Niezmienność (immutability) • Programujemy tworząc nowe obiekty na podstawie starych, a nie zmieniając istniejące Krzysztof Goj BIWAK Scali
  40. 40. Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Fundamenty programowania funkcyjnego Funkcje to zwykłe obiekty • Można je przekazywać jako argumenty do funkcji • Mogą być zwracane przez inne funkcje • Programujemy składając je na różne sposoby Izolowanie efektów ubocznych • Niezmienność (immutability) • Programujemy tworząc nowe obiekty na podstawie starych, a nie zmieniając istniejące Krzysztof Goj BIWAK Scali
  41. 41. Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Fundamenty programowania funkcyjnego Funkcje to zwykłe obiekty • Można je przekazywać jako argumenty do funkcji • Mogą być zwracane przez inne funkcje • Programujemy składając je na różne sposoby Izolowanie efektów ubocznych • Niezmienność (immutability) • Programujemy tworząc nowe obiekty na podstawie starych, a nie zmieniając istniejące Krzysztof Goj BIWAK Scali
  42. 42. Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Fundamenty programowania funkcyjnego Funkcje to zwykłe obiekty • Można je przekazywać jako argumenty do funkcji • Mogą być zwracane przez inne funkcje • Programujemy składając je na różne sposoby Izolowanie efektów ubocznych • Niezmienność (immutability) • Programujemy tworząc nowe obiekty na podstawie starych, a nie zmieniając istniejące Krzysztof Goj BIWAK Scali
  43. 43. Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Zalety programowania funkcyjnego Skalowalność Zwięzłość Naturalny sposób opisu wielu problemów Jest trędi–dżezi, kul, na topie Krzysztof Goj BIWAK Scali
  44. 44. Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Zalety programowania funkcyjnego Skalowalność Zwięzłość Naturalny sposób opisu wielu problemów Jest trędi–dżezi, kul, na topie Krzysztof Goj BIWAK Scali
  45. 45. Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Zalety programowania funkcyjnego Skalowalność Zwięzłość Naturalny sposób opisu wielu problemów Jest trędi–dżezi, kul, na topie Krzysztof Goj BIWAK Scali
  46. 46. Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Zalety programowania funkcyjnego Skalowalność Zwięzłość Naturalny sposób opisu wielu problemów Jest trędi–dżezi, kul, na topie Krzysztof Goj BIWAK Scali
  47. 47. Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Co to jest DSL? Domain Specific Languages Zewnętrzne (np. Make) Wewnętrzne (np. Rake) Krzysztof Goj BIWAK Scali
  48. 48. Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Co to jest DSL? Domain Specific Languages Zewnętrzne (np. Make) Wewnętrzne (np. Rake) Krzysztof Goj BIWAK Scali
  49. 49. Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Co to jest DSL? Domain Specific Languages Zewnętrzne (np. Make) Wewnętrzne (np. Rake) Krzysztof Goj BIWAK Scali
  50. 50. Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Co to jest DSL? Wewnętrzny DSL w Scali — Specs object helloWorld extends Specification { quot;’Hello, World!’ has 13 charactersquot; in { quot;Hello, World!quot;.size mustEqual 13 } quot;’Hello, World!’ matches /H.*W.*d.?/ regexpquot; in { quot;Hello, World!quot; must beMatching(quot;H.*W.*d.?quot;) } } Krzysztof Goj BIWAK Scali
  51. 51. Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Scala a współbieżność scala.actors scala.concurrent • scala.concurrent.pilib – rachunek π • scala.concurrent.jolib – join calculus • Lock, SyncChannel Scala-STM (poza biblioteką standardową) Krzysztof Goj BIWAK Scali
  52. 52. Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Scala a współbieżność scala.actors scala.concurrent • scala.concurrent.pilib – rachunek π • scala.concurrent.jolib – join calculus • Lock, SyncChannel Scala-STM (poza biblioteką standardową) Krzysztof Goj BIWAK Scali
  53. 53. Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Scala a współbieżność scala.actors scala.concurrent • scala.concurrent.pilib – rachunek π • scala.concurrent.jolib – join calculus • Lock, SyncChannel Scala-STM (poza biblioteką standardową) Krzysztof Goj BIWAK Scali
  54. 54. Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Scala a współbieżność scala.actors scala.concurrent • scala.concurrent.pilib – rachunek π • scala.concurrent.jolib – join calculus • Lock, SyncChannel Scala-STM (poza biblioteką standardową) Krzysztof Goj BIWAK Scali
  55. 55. Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Scala a współbieżność scala.actors scala.concurrent • scala.concurrent.pilib – rachunek π • scala.concurrent.jolib – join calculus • Lock, SyncChannel Scala-STM (poza biblioteką standardową) Krzysztof Goj BIWAK Scali
  56. 56. Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne Scala a współbieżność scala.actors scala.concurrent • scala.concurrent.pilib – rachunek π • scala.concurrent.jolib – join calculus • Lock, SyncChannel Scala-STM (poza biblioteką standardową) Krzysztof Goj BIWAK Scali
  57. 57. Wstęp Programowanie funkcyjne O języku Elastyczna Składnia Przykłady Inne traity pattern matching składnia dla XML-a inferencja typów domknięcia funkcyjne funkcje anonimowe implicit conversions implicit parameters for comprehensions i monady elastyczny system typów Krzysztof Goj BIWAK Scali
  58. 58. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Przykłady Krzysztof Goj BIWAK Scali
  59. 59. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Na rozgrzewkę - map Haskell map (1+) [1, 2, 3] Ruby [1, 2, 3].map {|i| i+1} Scheme (Lisp) (map (lambda (n) (1+ n)) ’(1 2 3)) Python [n+1 for n in [1, 2, 3]] Erlang lists:map(fun(N) -> N+1 end, [1, 2, 3]). Krzysztof Goj BIWAK Scali
  60. 60. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Na rozgrzewkę - map Java import java.util.List; import java.util.ArrayList; import static java.util.Arrays.asList; interface Function<Result, Arg> { public Result execute(Arg arg); } public class MapExample { public static<Result, Arg> List<Result> map(Function<Result, Arg> fn, Iterable<Arg> iter) { List<Result> result = new ArrayList<Result>(); for (Arg i: iter) result.add(fn.execute(i)); return result; } public static void main(String[] args) { map(new Function<Integer, Integer>() { public Integer execute(Integer i) { return i + 1; } }, asList(1, 2, 3)); } } Krzysztof Goj BIWAK Scali
  61. 61. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Na rozgrzewkę - map Scala object MapExample extends Application { def increase(n: Int): Int = { return n + 1; } Array(1, 2, 3).map(increase); } Scala — którka funkcja object MapExample extends Application { def increase(n: Int): Int = n + 1; Array(1, 2, 3).map(increase); } Scala — inferencja typów object MapExample extends Application { def increase(n: Int) = n + 1; Array(1, 2, 3).map(increase); } Krzysztof Goj BIWAK Scali
  62. 62. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Na rozgrzewkę - map Scala object MapExample extends Application { def increase(n: Int): Int = { return n + 1; } Array(1, 2, 3).map(increase); } Scala — którka funkcja object MapExample extends Application { def increase(n: Int): Int = n + 1; Array(1, 2, 3).map(increase); } Scala — inferencja typów object MapExample extends Application { def increase(n: Int) = n + 1; Array(1, 2, 3).map(increase); } Krzysztof Goj BIWAK Scali
  63. 63. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Na rozgrzewkę - map Scala object MapExample extends Application { def increase(n: Int): Int = { return n + 1; } Array(1, 2, 3).map(increase); } Scala — którka funkcja object MapExample extends Application { def increase(n: Int): Int = n + 1; Array(1, 2, 3).map(increase); } Scala — inferencja typów object MapExample extends Application { def increase(n: Int) = n + 1; Array(1, 2, 3).map(increase); } Krzysztof Goj BIWAK Scali
  64. 64. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Na rozgrzewkę - map to samo, co na poprzednim slajdzie def increase(n: Int) = n + 1; Array(1, 2, 3).map(increase); funkcja anonimowa Array(1, 2, 3).map((n: Int) => n + 1); dalsza inferencja typów Array(1, 2, 3).map(n => n + 1); anonimowy argument Array(1, 2, 3).map(_ + 1); wygodna składnia Array(1, 2, 3) map (_ + 1) Krzysztof Goj BIWAK Scali
  65. 65. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Na rozgrzewkę - map to samo, co na poprzednim slajdzie def increase(n: Int) = n + 1; Array(1, 2, 3).map(increase); funkcja anonimowa Array(1, 2, 3).map((n: Int) => n + 1); dalsza inferencja typów Array(1, 2, 3).map(n => n + 1); anonimowy argument Array(1, 2, 3).map(_ + 1); wygodna składnia Array(1, 2, 3) map (_ + 1) Krzysztof Goj BIWAK Scali
  66. 66. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Na rozgrzewkę - map to samo, co na poprzednim slajdzie def increase(n: Int) = n + 1; Array(1, 2, 3).map(increase); funkcja anonimowa Array(1, 2, 3).map((n: Int) => n + 1); dalsza inferencja typów Array(1, 2, 3).map(n => n + 1); anonimowy argument Array(1, 2, 3).map(_ + 1); wygodna składnia Array(1, 2, 3) map (_ + 1) Krzysztof Goj BIWAK Scali
  67. 67. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Na rozgrzewkę - map to samo, co na poprzednim slajdzie def increase(n: Int) = n + 1; Array(1, 2, 3).map(increase); funkcja anonimowa Array(1, 2, 3).map((n: Int) => n + 1); dalsza inferencja typów Array(1, 2, 3).map(n => n + 1); anonimowy argument Array(1, 2, 3).map(_ + 1); wygodna składnia Array(1, 2, 3) map (_ + 1) Krzysztof Goj BIWAK Scali
  68. 68. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Na rozgrzewkę - map to samo, co na poprzednim slajdzie def increase(n: Int) = n + 1; Array(1, 2, 3).map(increase); funkcja anonimowa Array(1, 2, 3).map((n: Int) => n + 1); dalsza inferencja typów Array(1, 2, 3).map(n => n + 1); anonimowy argument Array(1, 2, 3).map(_ + 1); wygodna składnia Array(1, 2, 3) map (_ + 1) Krzysztof Goj BIWAK Scali
  69. 69. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające takaSkładnia.setJestBrzydka(true) Settery i gettery class DateError extends Exception class TimeOfDayVar { private var h, m, s: Int = 0 def hours = h def hours_= (h: Int) = if (0 <= h && h < 24) this.h = h else throw new DateError() // ... } def main(args: Array[String]) { val d = new TimeOfDayVar d.hours = 8; d.minutes = 30; d.seconds = 0 d.hours = 25 // throws a DateError exception } Krzysztof Goj BIWAK Scali
  70. 70. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Implicit Conversions silnia def fact(n: Int): BigInt = if (n > 0) BigInt(n) * fact(n-1) else 1 implicit def enrich(n: Int) = new { def !(): BigInt = fact(n) } println(42!) 1405006117752879898543142606244511569936384000000000 Krzysztof Goj BIWAK Scali
  71. 71. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Implicit Conversions silnia def fact(n: Int): BigInt = if (n > 0) BigInt(n) * fact(n-1) else 1 implicit def enrich(n: Int) = new { def !(): BigInt = fact(n) } println(42!) 1405006117752879898543142606244511569936384000000000 Krzysztof Goj BIWAK Scali
  72. 72. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające For Comprehensions sprytne pętle for (i <- 1 to 100 by 7) println(i) for (i <- 1 to 100 by 7 if i % 3 == 0) println(i) val numbers = for (i <- 1 to 100 by 7 if i % 3 == 0) yield i-1 odcukrzamy (1).to(100).by(7).foreach(println) (1).to(100).by(7).filter(_ % 3 == 0).foreach(println) val numbers = (1).to(100).by(7).filter(_ % 3 == 0).map(_-1) Krzysztof Goj BIWAK Scali
  73. 73. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające For Comprehensions sprytne pętle for (i <- 1 to 100 by 7) println(i) for (i <- 1 to 100 by 7 if i % 3 == 0) println(i) val numbers = for (i <- 1 to 100 by 7 if i % 3 == 0) yield i-1 odcukrzamy (1).to(100).by(7).foreach(println) (1).to(100).by(7).filter(_ % 3 == 0).foreach(println) val numbers = (1).to(100).by(7).filter(_ % 3 == 0).map(_-1) Krzysztof Goj BIWAK Scali
  74. 74. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające For Comprehensions sprytne pętle for (i <- 1 to 100 by 7) println(i) for (i <- 1 to 100 by 7 if i % 3 == 0) println(i) val numbers = for (i <- 1 to 100 by 7 if i % 3 == 0) yield i-1 odcukrzamy (1).to(100).by(7).foreach(println) (1).to(100).by(7).filter(_ % 3 == 0).foreach(println) val numbers = (1).to(100).by(7).filter(_ % 3 == 0).map(_-1) Krzysztof Goj BIWAK Scali
  75. 75. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające For Comprehensions sprytne pętle for (i <- 1 to 100 by 7) println(i) for (i <- 1 to 100 by 7 if i % 3 == 0) println(i) val numbers = for (i <- 1 to 100 by 7 if i % 3 == 0) yield i-1 odcukrzamy (1).to(100).by(7).foreach(println) (1).to(100).by(7).filter(_ % 3 == 0).foreach(println) val numbers = (1).to(100).by(7).filter(_ % 3 == 0).map(_-1) Krzysztof Goj BIWAK Scali
  76. 76. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Opcje Opcje import scala.collection.mutable.HashMap val numbers = HashMap(0 -> quot;nicquot;, 1 -> quot;jednoquot;, 2 -> quot;dwaquot;) val rnd = new Random numbers get rnd.nextInt(7) match { case Some(name) => println(quot;To quot; + name) case None => println(quot;Dużoquot;) } println(numbers get rnd.nextInt(7) map {_.capitalize + quot;!quot;} getOrElse quot;DUŻO!!!quot;) Krzysztof Goj BIWAK Scali
  77. 77. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające ScalaCheck — QuickCheck i więcej ScalaCheck import org.scalacheck._ object StringSpecification extends Properties(quot;Stringquot;) { specify(quot;startsWithquot;, (a: String, b: String) => (a+b).startsWith(a)) specify(quot;endsWithquot;, (a: String, b: String) => (a+b).endsWith(b)) // Is this really always true? specify(quot;concatquot;, (a: String, b: String) => (a+b).length > a.length && (a+b).length > b.length ) specify(quot;substringquot;, (a: String, b: String) => (a+b).substring(a.length) == b ) specify(quot;substringquot;, (a: String, b: String, c: String) => (a+b+c).substring(a.length, a.length+b.length) == b ) } Krzysztof Goj BIWAK Scali
  78. 78. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Traity Trait ordered trait Ordered[A] { def compare(that: A): Int def < (that: A): Boolean = (this compare that) < 0 def > (that: A): Boolean = (this compare that) > 0 def <= (that: A): Boolean = (this compare that) <= 0 def >= (that: A): Boolean = (this compare that) >= 0 def compareTo(that: A): Int = compare(that) } Użycie class Sth(val a: Int) extends Ordered[Sth] { override def compare(other: Sth) = { val b = other.a (a*a) compare (b*b) } } val rnd = new Random println(if (new Sth(-3) < new Sth(rnd nextInt 5)) quot;Yesquot; else quot;Noquot;) Krzysztof Goj BIWAK Scali
  79. 79. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Traity Trait ordered trait Ordered[A] { def compare(that: A): Int def < (that: A): Boolean = (this compare that) < 0 def > (that: A): Boolean = (this compare that) > 0 def <= (that: A): Boolean = (this compare that) <= 0 def >= (that: A): Boolean = (this compare that) >= 0 def compareTo(that: A): Int = compare(that) } Użycie class Sth(val a: Int) extends Ordered[Sth] { override def compare(other: Sth) = { val b = other.a (a*a) compare (b*b) } } val rnd = new Random println(if (new Sth(-3) < new Sth(rnd nextInt 5)) quot;Yesquot; else quot;Noquot;) Krzysztof Goj BIWAK Scali
  80. 80. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Domknięcia Zapis var counter = 0 def bump_up() { counter += 1 } Odczyt def outer(a: Int): Int = { def helper(b: Int) = a * a - b helper(4) + helper(a-1) } Krzysztof Goj BIWAK Scali
  81. 81. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Domknięcia Zapis var counter = 0 def bump_up() { counter += 1 } Odczyt def outer(a: Int): Int = { def helper(b: Int) = a * a - b helper(4) + helper(a-1) } Krzysztof Goj BIWAK Scali
  82. 82. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Domknięcia Licznik — patologicznik def mkCounter() = { var soFar = 0 def counter(n: Int) = { soFar += n soFar } counter _ } val cnt1 = mkCounter() val cnt2 = mkCounter() cnt1(1); cnt1(30) println(cnt1(11)) println(cnt2(7)) wypisze 42 i 7 Krzysztof Goj BIWAK Scali
  83. 83. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające XML – tworzenie XML case class Person(name: String, age: Int) class AddressBook(a: Person*) { private val people: List[Person] = a.toList def toXHTML = <table class=quot;XMLquot;> <tr> <th>Last Name</th> <th>First Name</th> </tr> { for (val p <- people) yield <tr> <td>{ p.name }</td> <td>{ p.age.toString }</td> </tr> } </table>; } Krzysztof Goj BIWAK Scali
  84. 84. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające XML – wyszukiwanie 1/3 XML def understandFakt(note: scala.xml.Node): String = note match { case <murder> <criminal> <name>{murdererName}</name> <age>{murderAge}</age> </criminal> <victim><name>{victimName}</name>{_*}</victim> </murder> => quot;ZBRODNIA! quot; + murderAge + quot;-letni quot; + murderAge + quot; zabił quot; + quot; quot; + victimName case <advert>{content}</advert> => quot;Kupuj quot; + content case _ => quot;prognoza pogody: będzie padaćquot; } Krzysztof Goj BIWAK Scali
  85. 85. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające XML – wyszukiwanie 2/3 XML val stuff = <badStuff> <newspapers> <newspaper title=quot;Nasz Dziennikquot;>...</newspaper> <newspaper title=quot;NIEquot;>...</newspaper> <newspaper title=quot;Faktquot;> <frontPage> <advert>Fakt</advert> <pogoda/> </frontPage> </newspaper> </newspapers> </badStuff> Krzysztof Goj BIWAK Scali
  86. 86. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające XML – wyszukiwanie 3/3 XML for { val paper <- stuff quot;newspapersquot; quot;newspaperquot; paper.attributes(quot;titlequot;) == quot;Faktquot; val frontPage <- paper quot;frontPagequot; val article <- frontPage child } println(understandFakt(article)) Krzysztof Goj BIWAK Scali
  87. 87. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Kowariancja i dolna granica typu Stos – definicja class Stack[+A] { def push[B >: A](elem: B): Stack[B] = new Stack[B] { override def top: B = elem override def pop: Stack[B] = Stack.this override def toString() = Stack.this.toString() + quot; quot; + elem.toString() } def top: A = error(quot;no element on stackquot;) def pop: Stack[A] = error(quot;no element on stackquot;) override def toString() = quot;quot; } hierarchia klas Krzysztof Goj BIWAK Scali
  88. 88. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Kowariancja i dolna granica typu Stos – użycie scala> :load examples/stack.scala Loading examples/stack.scala... defined class Stack scala> new Stack res0: Stack[Nothing] = scala> res0 push quot;Alaquot; push quot;maquot; push quot;kotaquot; res1: Stack[java.lang.String] = Ala ma kota scala> res1 pop res2: Stack[java.lang.String] = Ala ma scala> res2 push 0 res3: Stack[Any] = Ala ma 0 Krzysztof Goj BIWAK Scali
  89. 89. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Kowariancja i dolna granica typu Stos – użycie scala> :load examples/stack.scala Loading examples/stack.scala... defined class Stack scala> new Stack res0: Stack[Nothing] = scala> res0 push quot;Alaquot; push quot;maquot; push quot;kotaquot; res1: Stack[java.lang.String] = Ala ma kota scala> res1 pop res2: Stack[java.lang.String] = Ala ma scala> res2 push 0 res3: Stack[Any] = Ala ma 0 Krzysztof Goj BIWAK Scali
  90. 90. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Kowariancja i dolna granica typu Stos – użycie scala> :load examples/stack.scala Loading examples/stack.scala... defined class Stack scala> new Stack res0: Stack[Nothing] = scala> res0 push quot;Alaquot; push quot;maquot; push quot;kotaquot; res1: Stack[java.lang.String] = Ala ma kota scala> res1 pop res2: Stack[java.lang.String] = Ala ma scala> res2 push 0 res3: Stack[Any] = Ala ma 0 Krzysztof Goj BIWAK Scali
  91. 91. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Kowariancja i dolna granica typu Stos – użycie scala> :load examples/stack.scala Loading examples/stack.scala... defined class Stack scala> new Stack res0: Stack[Nothing] = scala> res0 push quot;Alaquot; push quot;maquot; push quot;kotaquot; res1: Stack[java.lang.String] = Ala ma kota scala> res1 pop res2: Stack[java.lang.String] = Ala ma scala> res2 push 0 res3: Stack[Any] = Ala ma 0 Krzysztof Goj BIWAK Scali
  92. 92. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Kowariancja i dolna granica typu Stos – użycie scala> :load examples/stack.scala Loading examples/stack.scala... defined class Stack scala> new Stack res0: Stack[Nothing] = scala> res0 push quot;Alaquot; push quot;maquot; push quot;kotaquot; res1: Stack[java.lang.String] = Ala ma kota scala> res1 pop res2: Stack[java.lang.String] = Ala ma scala> res2 push 0 res3: Stack[Any] = Ala ma 0 Krzysztof Goj BIWAK Scali
  93. 93. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Kowariancja i dolna granica typu Stos – użycie scala> :load examples/stack.scala Loading examples/stack.scala... defined class Stack scala> new Stack res0: Stack[Nothing] = scala> res0 push quot;Alaquot; push quot;maquot; push quot;kotaquot; res1: Stack[java.lang.String] = Ala ma kota scala> res1 pop res2: Stack[java.lang.String] = Ala ma scala> res2 push 0 res3: Stack[Any] = Ala ma 0 Krzysztof Goj BIWAK Scali
  94. 94. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Kowariancja i dolna granica typu Stos – użycie scala> :load examples/stack.scala Loading examples/stack.scala... defined class Stack scala> new Stack res0: Stack[Nothing] = scala> res0 push quot;Alaquot; push quot;maquot; push quot;kotaquot; res1: Stack[java.lang.String] = Ala ma kota scala> res1 pop res2: Stack[java.lang.String] = Ala ma scala> res2 push 0 res3: Stack[Any] = Ala ma 0 Krzysztof Goj BIWAK Scali
  95. 95. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Kowariancja i dolna granica typu Stos – użycie scala> :load examples/stack.scala Loading examples/stack.scala... defined class Stack scala> new Stack res0: Stack[Nothing] = scala> res0 push quot;Alaquot; push quot;maquot; push quot;kotaquot; res1: Stack[java.lang.String] = Ala ma kota scala> res1 pop res2: Stack[java.lang.String] = Ala ma scala> res2 push 0 res3: Stack[Any] = Ala ma 0 Krzysztof Goj BIWAK Scali
  96. 96. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Kowariancja i dolna granica typu Stos – użycie scala> :load examples/stack.scala Loading examples/stack.scala... defined class Stack scala> new Stack res0: Stack[Nothing] = scala> res0 push quot;Alaquot; push quot;maquot; push quot;kotaquot; res1: Stack[java.lang.String] = Ala ma kota scala> res1 pop res2: Stack[java.lang.String] = Ala ma scala> res2 push 0 res3: Stack[Any] = Ala ma 0 Krzysztof Goj BIWAK Scali
  97. 97. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Kowariancja i dolna granica typu Stos – użycie scala> :load examples/stack.scala Loading examples/stack.scala... defined class Stack scala> new Stack res0: Stack[Nothing] = scala> res0 push quot;Alaquot; push quot;maquot; push quot;kotaquot; res1: Stack[java.lang.String] = Ala ma kota scala> res1 pop res2: Stack[java.lang.String] = Ala ma scala> res2 push 0 res3: Stack[Any] = Ala ma 0 Krzysztof Goj BIWAK Scali
  98. 98. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Kowariancja i dolna granica typu Stos – użycie scala> :load examples/stack.scala Loading examples/stack.scala... defined class Stack scala> new Stack res0: Stack[Nothing] = scala> res0 push quot;Alaquot; push quot;maquot; push quot;kotaquot; res1: Stack[java.lang.String] = Ala ma kota scala> res1 pop res2: Stack[java.lang.String] = Ala ma scala> res2 push 0 res3: Stack[Any] = Ala ma 0 Krzysztof Goj BIWAK Scali
  99. 99. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Hierarchia typów stack.scala Krzysztof Goj BIWAK Scali
  100. 100. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Funkcja trait Function1[-T1, +R] Krzysztof Goj BIWAK Scali
  101. 101. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Implicit Parameters Powtórka z algebry abstract class SemiGroup[A] { def add(x: A, y: A): A } abstract class Monoid[A] extends SemiGroup[A] { def unit: A } implicit object StringMonoid extends Monoid[String] { def add(x: String, y: String): String = x concat y def unit: String = quot;quot; } implicit object IntMonoid extends Monoid[int] { def add(x: Int, y: Int): Int = x + y def unit: Int = 0 } def sum[A](xs: List[A])(implicit m: Monoid[A]): A = (m.unit /: xs)(m.add) println(sum(List(1, 2, 3))) println(sum(List(quot;aquot;, quot;bquot;, quot;cquot;))) Krzysztof Goj BIWAK Scali
  102. 102. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Parser Combinators Prosty Kalkulator import scala.util.parsing.combinator.lexical.StdLexical import scala.util.parsing.combinator.syntactical.StdTokenParsers object arithmeticParser extends StdTokenParsers { type Tokens = StdLexical ; val lexical = new StdLexical lexical.delimiters ++= List(quot;(quot;, quot;)quot;, quot;+quot;, quot;-quot;, quot;*quot;, quot;/quot;) lazy val expr = term*(quot;+quot; ^^^ {(x: Int, y: Int) => x + y} | quot;-quot; ^^^ {(x: Int, y: Int) => x - y}) lazy val term = factor*(quot;*quot; ^^^ {(x: Int, y: Int) => x * y} | quot;/quot; ^^^ {(x: Int, y: Int) => x / y}) lazy val factor: Parser[Int] = quot;(quot; ~> expr <~ quot;)quot; | numericLit ^^ (_.toInt) def eval(str: String) = expr(new lexical.Scanner(str)) } println(arithmeticParser.eval(quot;4 * (5+5) + 8/4quot;).get) Krzysztof Goj BIWAK Scali
  103. 103. Wstęp rozgrzewka O języku ciekawsze Przykłady przerażające Parser Combinators Prosty Kalkulator import scala.util.parsing.combinator.lexical.StdLexical import scala.util.parsing.combinator.syntactical.StdTokenParsers object arithmeticParser extends StdTokenParsers { type Tokens = StdLexical ; val lexical = new StdLexical lexical.delimiters ++= List(quot;(quot;, quot;)quot;, quot;+quot;, quot;-quot;, quot;*quot;, quot;/quot;) lazy val expr = term*(quot;+quot; ^^^ {(x: Int, y: Int) => x + y} | quot;-quot; ^^^ {(x: Int, y: Int) => x - y}) lazy val term = factor*(quot;*quot; ^^^ {(x: Int, y: Int) => x * y} | quot;/quot; ^^^ {(x: Int, y: Int) => x / y}) lazy val factor: Parser[Int] = quot;(quot; ~> expr <~ quot;)quot; | numericLit ^^ (_.toInt) def eval(str: String) = expr(new lexical.Scanner(str)) } println(arithmeticParser.eval(quot;4 * (5+5) + 8/4quot;).get) Krzysztof Goj BIWAK Scali
  104. 104. Do poczytania Zakończenie Dziękuję Do poczytania http://www.scala-lang.org Blog Martina Oderskiego Blog Daniela Spiewaka Blog Jamesa Iry-ego http://scala-blogs.org/ #scala na freenode Slajdy (z linkami) będą na http://biwak-agh.blogspot.com/ Krzysztof Goj BIWAK Scali
  105. 105. Do poczytania Zakończenie Dziękuję Do poczytania http://www.scala-lang.org Blog Martina Oderskiego Blog Daniela Spiewaka Blog Jamesa Iry-ego http://scala-blogs.org/ #scala na freenode Slajdy (z linkami) będą na http://biwak-agh.blogspot.com/ Krzysztof Goj BIWAK Scali
  106. 106. Do poczytania Zakończenie Dziękuję Do poczytania http://www.scala-lang.org Blog Martina Oderskiego Blog Daniela Spiewaka Blog Jamesa Iry-ego http://scala-blogs.org/ #scala na freenode Slajdy (z linkami) będą na http://biwak-agh.blogspot.com/ Krzysztof Goj BIWAK Scali
  107. 107. Do poczytania Zakończenie Dziękuję Do poczytania http://www.scala-lang.org Blog Martina Oderskiego Blog Daniela Spiewaka Blog Jamesa Iry-ego http://scala-blogs.org/ #scala na freenode Slajdy (z linkami) będą na http://biwak-agh.blogspot.com/ Krzysztof Goj BIWAK Scali
  108. 108. Do poczytania Zakończenie Dziękuję Do poczytania http://www.scala-lang.org Blog Martina Oderskiego Blog Daniela Spiewaka Blog Jamesa Iry-ego http://scala-blogs.org/ #scala na freenode Slajdy (z linkami) będą na http://biwak-agh.blogspot.com/ Krzysztof Goj BIWAK Scali
  109. 109. Do poczytania Zakończenie Dziękuję Do poczytania http://www.scala-lang.org Blog Martina Oderskiego Blog Daniela Spiewaka Blog Jamesa Iry-ego http://scala-blogs.org/ #scala na freenode Slajdy (z linkami) będą na http://biwak-agh.blogspot.com/ Krzysztof Goj BIWAK Scali
  110. 110. Do poczytania Zakończenie Dziękuję Do poczytania http://www.scala-lang.org Blog Martina Oderskiego Blog Daniela Spiewaka Blog Jamesa Iry-ego http://scala-blogs.org/ #scala na freenode Slajdy (z linkami) będą na http://biwak-agh.blogspot.com/ Krzysztof Goj BIWAK Scali
  111. 111. Do poczytania Zakończenie Dziękuję Dobranoc! Krzysztof Goj BIWAK Scali
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×