SlideShare a Scribd company logo
1 of 26
Download to read offline
SCALA	
  
Popularna	
  alternatywa	
  dla	
  języka	
  Java	
  
Dlaczego	
  warto	
  spróbować?	
  
Scala	
  –	
  Co	
  to	
  jest?	
  
Java	
   	
   	
   	
   	
  à	
  zbyt	
  toporna	
  
Języki	
  funkcyjne	
   	
  à	
  zbyt	
  odmienne	
  
Zrównoleglenie	
   	
  à	
  trudne,	
  błędogenne	
  
	
  
Nowa	
  moda	
  na	
  programowanie	
  funkcyjne	
  w	
  JVM	
  
Kto	
  wykorzystuje	
  język	
  Scala?	
  
Popularność	
  Scali	
  
hLp://www.itjobswatch.co.uk/	
  
Popularność	
  Scali	
  
RedMonk	
  
GitHub	
  projects	
  
Stack	
  Overflow	
  
Popularność	
  Scali	
  
Alexa	
  
Nowe	
  podejście	
  
Wydajność	
  programów	
  
hLp://benchmarksgame.alioth.debian.org/	
  
Wiele	
  nowych	
  obiektów	
  VS	
  zrównoleglenie	
  
Inteligentniejszy	
  kompilator	
  à	
  szybsze	
  działanie	
  
	
  
	
  
	
  
	
  
Wydajność	
  deweloperów	
  
Programy	
  napisane	
  w	
  Scali	
  są:	
  
	
  
BARDZIEJ	
  ZWIĘZŁE	
  
	
  
CZYTELNIEJSZE	
  
	
  
ZAWIERAJĄCE	
  MNIEJ	
  BŁĘDÓW	
  
	
  
DAJĄ	
  WIĘCEJ	
  RADOŚCI	
  DEWELOPEROM	
  
Przykład	
  1	
  
["Adam Nowak", "Marcin Kowalski", "Daniel
Kowalski", "Damian Nowak", "Alicja Nowak”]	
  
	
  
	
  
!
{Kowalski=[Marcin Kowalski, Daniel
Kowalski], !
Nowak=[Adam Nowak, Damian Nowak, Alicja
Nowak]}!
Przykład	
  1	
  -­‐	
  Java	
  
String [] people = {"Adam Nowak", "Marcin Kowalski", "Daniel !
! !Kowalski", "Damian Nowak", "Alicja Nowak"};!
!
Map<String, List<String>> namesByLastName = !
! !new TreeMap<String, List<String>>();!
for (String name : people) {!
String[] splitName = name.split(" ");!
List<String> mappedNames = namesByLastName!
.get(splitName[1]);!
if (mappedNames == null) {!
mappedNames = new ArrayList<String>();!
namesByLastName.put(splitName[1], mappedNames);!
}!
mappedNames.add(name);!
}!
!
System.out.println(namesByLastName);!
Przykład	
  1	
  -­‐	
  Scala	
  
val people = List("Adam Nowak", "Marcin Kowalski", !
! !"Daniel Kowalski", "Damian Nowak", "Alicja Nowak")!
!
println(people.map(_.split(' '))!
! !.map(arr => (arr(0), arr(1)))!
! !.groupBy(_._2).toSeq.sortBy(_._1))!
Przykład	
  2	
  -­‐	
  Java	
  
Problem	
  z	
  logowaniem	
  zdarzeń	
  
	
  
Czy	
  to	
  nie	
  komplikuje	
  kodu?	
  
	
  
public class JavaTest {!
public static final Logger logger = !
LogFactory.getLog(JavaTest.class);!
!
public static void main(String[] args) {!
List veryLargeCollection = new List();!
if (logger.isDebugEnabled()) {!
logger.debug(veryLargeCollection);!
}!
}!
}!
Przykład	
  2	
  -­‐	
  Scala	
  
trait Loggable { self =>!
val logger = LogFactory.getLog(self.getClass)!
!
def debug[T](msg: => T): Unit = {!
if (logger.isDebugEnabled) logger.debug(msg)!
}!
}!
!
object Test extends Loggable {!
def main(args: Array[String]) {!
val veryLargeCollection = List()!
debug(veryLargeCollection)!
}!
}!
Przykład	
  3	
  -­‐	
  Java	
  
Niejawna	
  konwersja	
  może	
  zwiększyć	
  czytelność	
  
	
  
public class Complex {!
public final double re, im;!
!
public Complex(double re, double im) { … }!
public Complex add(Complex complex) { … }!
}!
!
String someString = "5";!
Integer someNumber = 4;!
Complex z = new Complex(4, 7)!
.add(new Complex(someNumber, 0))!
.add(new Complex(Double.parseDouble(someString), 0));!
!
!
	
  
Przykład	
  3	
  -­‐	
  Scala	
  
case class Complex(re: Double, im: Double) {!
def +(complex: Complex): Complex = !
Complex(re + complex.re, im + complex.im)!
}!
!
implicit def stringToComplex(str: String): Complex = !
Complex(str.toInt, 0)!
implicit def intToComplex(num: Int): Complex = !
Complex(num, 0)!
!
val z = Complex(3, 4) + 4 + "5"!
!
Przykład	
  4	
  –	
  DSL	
  i	
  XML	
  
Scala	
  pozwala	
  na	
  tworzenie	
  własnych	
  języków	
  
	
  
val loan = 100000 loan!
val simulation = loan duration (120 months) !
rates (5.5 %) simulate payments.equal	
  
!
I	
  zagnieżdżanie	
  XML	
  
!
val table = <table class="my-table">!
{ users map { user => !
<tr>!
<td>{user.fname}</td> !
<td>{user.lname}</td>!
</tr>!
}}!
</table>!
Przykład	
  5	
  –	
  PaLern	
  Matching	
  
case class Group(name: String, category: String)!
case class User(fname: String, lname: String, !
group: Group)!
!
val userExtractor = !
"""User('(w+)','(w+)',Group('students','(w+)'))""".r!
!
x match {!
case userExtractor(fname, lname, _) => !
(fname, lname)!
case User(fname, lname, Group("students", _)) => !
(fname, lname)!
case _ => null!
}!
Przykład	
  6	
  –	
  System	
  Aktorów	
  
Programowanie	
  aplikacji	
  działających	
  asynchronicznie	
  
!
class MyActor extends Actor {!
def receive = {!
case „ping” => sender ! „pong”!
case Echo(msg) => sender ! msg!
case cmd: Command => cmd()!
case STOP => this ! PoisonPill!
}!
}!
Oczekiwania	
  biznesowe	
  
•  Szybkość	
  tworzenia	
  rozwiązań	
  
•  Łatwość	
  utrzymania	
  i	
  rozwoju	
  
•  Stabilność	
  i	
  niezawodność	
  
•  Wysycenie	
  technologią	
  (frameworki,	
  
biblioteki,	
  infrastruktura)	
  	
  
•  Dostęp	
  do	
  specjalistów	
  
Trendy	
  
•  Obliczenia	
  rozproszone	
  (chmura	
  obliczeniowa)	
  
•  Heterogeniczne	
  źródła	
  danych	
  i	
  przetwarzanie	
  
asynchroniczne	
  (Akka)	
  
•  Jeden	
  system,	
  różne	
  kanały	
  dostępu	
  
•  Odseparowanie	
  warstwy	
  logiki	
  do	
  warstwy	
  
prezentacji	
  
–  JavaScript	
  
–  HTML5	
  
–  REST	
  
–  AngularJS	
  
Eneterprise	
  czy	
  Startup?	
  
Java/J2EE	
   Python,	
  Ruby,	
  PHP…	
  
•  Bogaty	
  ekosystem	
  
•  Ugruntowania	
  pozycja	
  w	
  biznesie	
  
•  Stabilność	
  
•  Skalowalność	
  
•  Wydajność	
  
	
  
Rozwiązania	
  Enterprise	
  
•  Szybkość	
  tworzenia	
  aplikacji	
  
•  Niska	
  bariera	
  wejścia	
  
•  Niskie	
  koszty	
  
•  Duża	
  elastyczność	
  
•  Łatwość	
  tworzenia	
  interfejsów	
  
webowych	
  
	
  
Małe	
  rozwiązania/Startupy	
  
+	
  Frameworks	
  
•  Lazy	
  Loading	
  
•  Parallel	
  Rendering	
  
•  AJAX	
  &	
  Comet	
  (dla	
  HTML	
  i	
  danych)	
  
•  Wiring	
  
•  Designer	
  Friendly	
  Templates	
  (model	
  View	
  
First)	
  
•  Security	
  
•  Wsparcie	
  dla	
  Java	
  i	
  Scala	
  
•  Bezstanowa	
  warstwa	
  webowa	
  (brak	
  sesji)	
  
•  MVC	
  
•  Duża	
  skalowalność	
  (Akka,	
  Non-­‐blocking	
  I/O)	
  
•  Odejście	
  od	
  tradycyjnego	
  modelu	
  J2EE	
  
Vs.	
  
LiG	
   Play	
  
J2EE	
   Non	
  J2EE	
  
RESTLess/RESTful	
   RESTLess	
  
View	
  First	
   MVC	
  
Kontener	
  serwletów	
   NeLy	
  I/O,	
  Akka	
  
Liu	
  Actors,	
  Akka	
   Akka	
  
Elastyczne	
  podejście:	
  
•  Klasyczna	
  aplikacja	
  J2EE	
  
•  Serwowanie	
  danych	
  	
  
Nacisk	
  na:	
  
•  Skalowalność	
  
•  Przetwarzanie	
  rozproszone	
  
•  Cienkiego	
  klienta	
  
•  Aktywne	
  forum	
  	
  
•  Rozproszona	
  dokumentacja	
  
•  Słaby	
  PR	
  
•  Aktywne	
  forum	
  i	
  StackOverflow	
  
•  Dobra	
  dokumentacja	
  
•  Dobra	
  prasa	
  
Kto	
  używa?	
  

More Related Content

Viewers also liked

Akamai in a hyperconnected world
Akamai in a hyperconnected worldAkamai in a hyperconnected world
Akamai in a hyperconnected worldmagda3695
 
Prezentacja v2(1)
Prezentacja v2(1)Prezentacja v2(1)
Prezentacja v2(1)magda3695
 
Info meet katalog kraków 8 marca
Info meet katalog kraków 8 marcaInfo meet katalog kraków 8 marca
Info meet katalog kraków 8 marcamagda3695
 
Agile zrobtosam infomeet
Agile zrobtosam infomeetAgile zrobtosam infomeet
Agile zrobtosam infomeetmagda3695
 
Zmiana pracy mariola zieba antal
Zmiana pracy   mariola zieba antalZmiana pracy   mariola zieba antal
Zmiana pracy mariola zieba antalmagda3695
 
Hostingowe i domenowe pułapki [97 2003]
Hostingowe i domenowe pułapki [97 2003]Hostingowe i domenowe pułapki [97 2003]
Hostingowe i domenowe pułapki [97 2003]magda3695
 
Soft layer cloud without compromise
Soft layer   cloud without compromiseSoft layer   cloud without compromise
Soft layer cloud without compromisemagda3695
 
Przychodzi baba do lekarza na badania usability
Przychodzi baba do lekarza na badania usabilityPrzychodzi baba do lekarza na badania usability
Przychodzi baba do lekarza na badania usabilitymagda3695
 
Prezentacja personal branding
Prezentacja personal brandingPrezentacja personal branding
Prezentacja personal brandingmagda3695
 
Big data ecosystem
Big data ecosystemBig data ecosystem
Big data ecosystemmagda3695
 
Jakość utracona v13
Jakość utracona v13Jakość utracona v13
Jakość utracona v13magda3695
 
Szczepan.faber.gradle
Szczepan.faber.gradleSzczepan.faber.gradle
Szczepan.faber.gradlemagda3695
 
Patterns for organic architecture codedive
Patterns for organic architecture codedivePatterns for organic architecture codedive
Patterns for organic architecture codedivemagda3695
 

Viewers also liked (14)

Akamai in a hyperconnected world
Akamai in a hyperconnected worldAkamai in a hyperconnected world
Akamai in a hyperconnected world
 
Prezentacja v2(1)
Prezentacja v2(1)Prezentacja v2(1)
Prezentacja v2(1)
 
Info meet katalog kraków 8 marca
Info meet katalog kraków 8 marcaInfo meet katalog kraków 8 marca
Info meet katalog kraków 8 marca
 
Ibm
IbmIbm
Ibm
 
Agile zrobtosam infomeet
Agile zrobtosam infomeetAgile zrobtosam infomeet
Agile zrobtosam infomeet
 
Zmiana pracy mariola zieba antal
Zmiana pracy   mariola zieba antalZmiana pracy   mariola zieba antal
Zmiana pracy mariola zieba antal
 
Hostingowe i domenowe pułapki [97 2003]
Hostingowe i domenowe pułapki [97 2003]Hostingowe i domenowe pułapki [97 2003]
Hostingowe i domenowe pułapki [97 2003]
 
Soft layer cloud without compromise
Soft layer   cloud without compromiseSoft layer   cloud without compromise
Soft layer cloud without compromise
 
Przychodzi baba do lekarza na badania usability
Przychodzi baba do lekarza na badania usabilityPrzychodzi baba do lekarza na badania usability
Przychodzi baba do lekarza na badania usability
 
Prezentacja personal branding
Prezentacja personal brandingPrezentacja personal branding
Prezentacja personal branding
 
Big data ecosystem
Big data ecosystemBig data ecosystem
Big data ecosystem
 
Jakość utracona v13
Jakość utracona v13Jakość utracona v13
Jakość utracona v13
 
Szczepan.faber.gradle
Szczepan.faber.gradleSzczepan.faber.gradle
Szczepan.faber.gradle
 
Patterns for organic architecture codedive
Patterns for organic architecture codedivePatterns for organic architecture codedive
Patterns for organic architecture codedive
 

Similar to 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ł GrajewskiPROIDEA
 
Jak nadążyć za światem front-endu - WordPress Training Day
Jak nadążyć za światem front-endu - WordPress Training DayJak nadążyć za światem front-endu - WordPress Training Day
Jak nadążyć za światem front-endu - WordPress Training DayTomasz Dziuda
 
4Developers 2015: Baza danych w aplikacji typu SaaS - błędy w projektowaniu -...
4Developers 2015: Baza danych w aplikacji typu SaaS - błędy w projektowaniu -...4Developers 2015: Baza danych w aplikacji typu SaaS - błędy w projektowaniu -...
4Developers 2015: Baza danych w aplikacji typu SaaS - błędy w projektowaniu -...PROIDEA
 
Programowanie Równolegle - Parallel Extensions
Programowanie Równolegle - Parallel ExtensionsProgramowanie Równolegle - Parallel Extensions
Programowanie Równolegle - Parallel ExtensionsWojciech Grześkowiak
 
Testowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStackTestowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStackThe Software House
 
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16Krzysztof Synak
 
Skalowalność Magento - MMPL13
Skalowalność Magento - MMPL13Skalowalność Magento - MMPL13
Skalowalność Magento - MMPL13Divante
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Cloudskraqa
 
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...Tomasz Kopacz
 
REvolution, czyli o bardziej obiektowym podejściu w Railsach
REvolution, czyli o bardziej obiektowym podejściu w RailsachREvolution, czyli o bardziej obiektowym podejściu w Railsach
REvolution, czyli o bardziej obiektowym podejściu w RailsachThe Software House
 
Więcej testów/mniej kodu - Michał Gaworski, kraQA 13
Więcej testów/mniej kodu - Michał Gaworski, kraQA 13Więcej testów/mniej kodu - Michał Gaworski, kraQA 13
Więcej testów/mniej kodu - Michał Gaworski, kraQA 13kraqa
 
Jak szybko przetwarzasz hurtowe ilości XML?
Jak szybko przetwarzasz hurtowe ilości XML?Jak szybko przetwarzasz hurtowe ilości XML?
Jak szybko przetwarzasz hurtowe ilości XML?Bartosz Ratajczyk
 
Ruby, Ruby on Rails 2010
Ruby, Ruby on Rails 2010Ruby, Ruby on Rails 2010
Ruby, Ruby on Rails 2010Natalia Stanko
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowychTomasz Borowski
 
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegroallegro.tech
 
Agregacja i analiza logów
Agregacja i analiza logówAgregacja i analiza logów
Agregacja i analiza logówDivante
 
Integracja systemow od strony praktycznej
Integracja systemow od strony praktycznejIntegracja systemow od strony praktycznej
Integracja systemow od strony praktycznejMarek Horbań
 
Jak stworzyliśmy system kudosów w Laravelu i Slacku
Jak stworzyliśmy system kudosów w Laravelu i SlackuJak stworzyliśmy system kudosów w Laravelu i Slacku
Jak stworzyliśmy system kudosów w Laravelu i SlackuLaravel Poland MeetUp
 

Similar to Scala (20)

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
 
Jak nadążyć za światem front-endu - WordPress Training Day
Jak nadążyć za światem front-endu - WordPress Training DayJak nadążyć za światem front-endu - WordPress Training Day
Jak nadążyć za światem front-endu - WordPress Training Day
 
4Developers 2015: Baza danych w aplikacji typu SaaS - błędy w projektowaniu -...
4Developers 2015: Baza danych w aplikacji typu SaaS - błędy w projektowaniu -...4Developers 2015: Baza danych w aplikacji typu SaaS - błędy w projektowaniu -...
4Developers 2015: Baza danych w aplikacji typu SaaS - błędy w projektowaniu -...
 
Programowanie Równolegle - Parallel Extensions
Programowanie Równolegle - Parallel ExtensionsProgramowanie Równolegle - Parallel Extensions
Programowanie Równolegle - Parallel Extensions
 
Testowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStackTestowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStack
 
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
 
Skalowalność Magento - MMPL13
Skalowalność Magento - MMPL13Skalowalność Magento - MMPL13
Skalowalność Magento - MMPL13
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Clouds
 
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...
 
REvolution, czyli o bardziej obiektowym podejściu w Railsach
REvolution, czyli o bardziej obiektowym podejściu w RailsachREvolution, czyli o bardziej obiektowym podejściu w Railsach
REvolution, czyli o bardziej obiektowym podejściu w Railsach
 
Więcej testów/mniej kodu - Michał Gaworski, kraQA 13
Więcej testów/mniej kodu - Michał Gaworski, kraQA 13Więcej testów/mniej kodu - Michał Gaworski, kraQA 13
Więcej testów/mniej kodu - Michał Gaworski, kraQA 13
 
Jak szybko przetwarzasz hurtowe ilości XML?
Jak szybko przetwarzasz hurtowe ilości XML?Jak szybko przetwarzasz hurtowe ilości XML?
Jak szybko przetwarzasz hurtowe ilości XML?
 
Scala
ScalaScala
Scala
 
JavaEE + OSGi
JavaEE + OSGiJavaEE + OSGi
JavaEE + OSGi
 
Ruby, Ruby on Rails 2010
Ruby, Ruby on Rails 2010Ruby, Ruby on Rails 2010
Ruby, Ruby on Rails 2010
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowych
 
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
 
Agregacja i analiza logów
Agregacja i analiza logówAgregacja i analiza logów
Agregacja i analiza logów
 
Integracja systemow od strony praktycznej
Integracja systemow od strony praktycznejIntegracja systemow od strony praktycznej
Integracja systemow od strony praktycznej
 
Jak stworzyliśmy system kudosów w Laravelu i Slacku
Jak stworzyliśmy system kudosów w Laravelu i SlackuJak stworzyliśmy system kudosów w Laravelu i Slacku
Jak stworzyliśmy system kudosów w Laravelu i Slacku
 

More from magda3695

Prezentacja 20141129
Prezentacja 20141129Prezentacja 20141129
Prezentacja 20141129magda3695
 
Dlaczego firmy wdrażają er py info_meet kraków
Dlaczego firmy wdrażają er py info_meet krakówDlaczego firmy wdrażają er py info_meet kraków
Dlaczego firmy wdrażają er py info_meet krakówmagda3695
 
Big data today and tomorrow
Big data today and tomorrowBig data today and tomorrow
Big data today and tomorrowmagda3695
 
Info meet 8 02-2014
Info meet 8 02-2014Info meet 8 02-2014
Info meet 8 02-2014magda3695
 
Ccpm jako metoda planowania i kontroli projektów
Ccpm jako metoda planowania i kontroli projektówCcpm jako metoda planowania i kontroli projektów
Ccpm jako metoda planowania i kontroli projektówmagda3695
 
Info meet pomiary wydajności
Info meet pomiary wydajnościInfo meet pomiary wydajności
Info meet pomiary wydajnościmagda3695
 
A rnav infomeet
A rnav infomeetA rnav infomeet
A rnav infomeetmagda3695
 
Dług technologiczny czyli mały wkład w duże problemy
Dług technologiczny czyli mały wkład w duże problemyDług technologiczny czyli mały wkład w duże problemy
Dług technologiczny czyli mały wkład w duże problemymagda3695
 
Akamai in a hyperconnected world
Akamai in a hyperconnected worldAkamai in a hyperconnected world
Akamai in a hyperconnected worldmagda3695
 
Antal international prezentacja_targi_it
Antal international prezentacja_targi_itAntal international prezentacja_targi_it
Antal international prezentacja_targi_itmagda3695
 
Koprowski t certyfikacja_a_kariera_it_infomeet
Koprowski t certyfikacja_a_kariera_it_infomeetKoprowski t certyfikacja_a_kariera_it_infomeet
Koprowski t certyfikacja_a_kariera_it_infomeetmagda3695
 

More from magda3695 (12)

Prezentacja 20141129
Prezentacja 20141129Prezentacja 20141129
Prezentacja 20141129
 
7
77
7
 
Dlaczego firmy wdrażają er py info_meet kraków
Dlaczego firmy wdrażają er py info_meet krakówDlaczego firmy wdrażają er py info_meet kraków
Dlaczego firmy wdrażają er py info_meet kraków
 
Big data today and tomorrow
Big data today and tomorrowBig data today and tomorrow
Big data today and tomorrow
 
Info meet 8 02-2014
Info meet 8 02-2014Info meet 8 02-2014
Info meet 8 02-2014
 
Ccpm jako metoda planowania i kontroli projektów
Ccpm jako metoda planowania i kontroli projektówCcpm jako metoda planowania i kontroli projektów
Ccpm jako metoda planowania i kontroli projektów
 
Info meet pomiary wydajności
Info meet pomiary wydajnościInfo meet pomiary wydajności
Info meet pomiary wydajności
 
A rnav infomeet
A rnav infomeetA rnav infomeet
A rnav infomeet
 
Dług technologiczny czyli mały wkład w duże problemy
Dług technologiczny czyli mały wkład w duże problemyDług technologiczny czyli mały wkład w duże problemy
Dług technologiczny czyli mały wkład w duże problemy
 
Akamai in a hyperconnected world
Akamai in a hyperconnected worldAkamai in a hyperconnected world
Akamai in a hyperconnected world
 
Antal international prezentacja_targi_it
Antal international prezentacja_targi_itAntal international prezentacja_targi_it
Antal international prezentacja_targi_it
 
Koprowski t certyfikacja_a_kariera_it_infomeet
Koprowski t certyfikacja_a_kariera_it_infomeetKoprowski t certyfikacja_a_kariera_it_infomeet
Koprowski t certyfikacja_a_kariera_it_infomeet
 

Scala

  • 1. SCALA   Popularna  alternatywa  dla  języka  Java   Dlaczego  warto  spróbować?  
  • 2. Scala  –  Co  to  jest?   Java          à  zbyt  toporna   Języki  funkcyjne    à  zbyt  odmienne   Zrównoleglenie    à  trudne,  błędogenne     Nowa  moda  na  programowanie  funkcyjne  w  JVM  
  • 5. Popularność  Scali   RedMonk   GitHub  projects   Stack  Overflow  
  • 8. Wydajność  programów   hLp://benchmarksgame.alioth.debian.org/   Wiele  nowych  obiektów  VS  zrównoleglenie   Inteligentniejszy  kompilator  à  szybsze  działanie          
  • 9. Wydajność  deweloperów   Programy  napisane  w  Scali  są:     BARDZIEJ  ZWIĘZŁE     CZYTELNIEJSZE     ZAWIERAJĄCE  MNIEJ  BŁĘDÓW     DAJĄ  WIĘCEJ  RADOŚCI  DEWELOPEROM  
  • 10. Przykład  1   ["Adam Nowak", "Marcin Kowalski", "Daniel Kowalski", "Damian Nowak", "Alicja Nowak”]       ! {Kowalski=[Marcin Kowalski, Daniel Kowalski], ! Nowak=[Adam Nowak, Damian Nowak, Alicja Nowak]}!
  • 11. Przykład  1  -­‐  Java   String [] people = {"Adam Nowak", "Marcin Kowalski", "Daniel ! ! !Kowalski", "Damian Nowak", "Alicja Nowak"};! ! Map<String, List<String>> namesByLastName = ! ! !new TreeMap<String, List<String>>();! for (String name : people) {! String[] splitName = name.split(" ");! List<String> mappedNames = namesByLastName! .get(splitName[1]);! if (mappedNames == null) {! mappedNames = new ArrayList<String>();! namesByLastName.put(splitName[1], mappedNames);! }! mappedNames.add(name);! }! ! System.out.println(namesByLastName);!
  • 12. Przykład  1  -­‐  Scala   val people = List("Adam Nowak", "Marcin Kowalski", ! ! !"Daniel Kowalski", "Damian Nowak", "Alicja Nowak")! ! println(people.map(_.split(' '))! ! !.map(arr => (arr(0), arr(1)))! ! !.groupBy(_._2).toSeq.sortBy(_._1))!
  • 13. Przykład  2  -­‐  Java   Problem  z  logowaniem  zdarzeń     Czy  to  nie  komplikuje  kodu?     public class JavaTest {! public static final Logger logger = ! LogFactory.getLog(JavaTest.class);! ! public static void main(String[] args) {! List veryLargeCollection = new List();! if (logger.isDebugEnabled()) {! logger.debug(veryLargeCollection);! }! }! }!
  • 14. Przykład  2  -­‐  Scala   trait Loggable { self =>! val logger = LogFactory.getLog(self.getClass)! ! def debug[T](msg: => T): Unit = {! if (logger.isDebugEnabled) logger.debug(msg)! }! }! ! object Test extends Loggable {! def main(args: Array[String]) {! val veryLargeCollection = List()! debug(veryLargeCollection)! }! }!
  • 15. Przykład  3  -­‐  Java   Niejawna  konwersja  może  zwiększyć  czytelność     public class Complex {! public final double re, im;! ! public Complex(double re, double im) { … }! public Complex add(Complex complex) { … }! }! ! String someString = "5";! Integer someNumber = 4;! Complex z = new Complex(4, 7)! .add(new Complex(someNumber, 0))! .add(new Complex(Double.parseDouble(someString), 0));! ! !  
  • 16. Przykład  3  -­‐  Scala   case class Complex(re: Double, im: Double) {! def +(complex: Complex): Complex = ! Complex(re + complex.re, im + complex.im)! }! ! implicit def stringToComplex(str: String): Complex = ! Complex(str.toInt, 0)! implicit def intToComplex(num: Int): Complex = ! Complex(num, 0)! ! val z = Complex(3, 4) + 4 + "5"! !
  • 17. Przykład  4  –  DSL  i  XML   Scala  pozwala  na  tworzenie  własnych  języków     val loan = 100000 loan! val simulation = loan duration (120 months) ! rates (5.5 %) simulate payments.equal   ! I  zagnieżdżanie  XML   ! val table = <table class="my-table">! { users map { user => ! <tr>! <td>{user.fname}</td> ! <td>{user.lname}</td>! </tr>! }}! </table>!
  • 18. Przykład  5  –  PaLern  Matching   case class Group(name: String, category: String)! case class User(fname: String, lname: String, ! group: Group)! ! val userExtractor = ! """User('(w+)','(w+)',Group('students','(w+)'))""".r! ! x match {! case userExtractor(fname, lname, _) => ! (fname, lname)! case User(fname, lname, Group("students", _)) => ! (fname, lname)! case _ => null! }!
  • 19. Przykład  6  –  System  Aktorów   Programowanie  aplikacji  działających  asynchronicznie   ! class MyActor extends Actor {! def receive = {! case „ping” => sender ! „pong”! case Echo(msg) => sender ! msg! case cmd: Command => cmd()! case STOP => this ! PoisonPill! }! }!
  • 20. Oczekiwania  biznesowe   •  Szybkość  tworzenia  rozwiązań   •  Łatwość  utrzymania  i  rozwoju   •  Stabilność  i  niezawodność   •  Wysycenie  technologią  (frameworki,   biblioteki,  infrastruktura)     •  Dostęp  do  specjalistów  
  • 21. Trendy   •  Obliczenia  rozproszone  (chmura  obliczeniowa)   •  Heterogeniczne  źródła  danych  i  przetwarzanie   asynchroniczne  (Akka)   •  Jeden  system,  różne  kanały  dostępu   •  Odseparowanie  warstwy  logiki  do  warstwy   prezentacji   –  JavaScript   –  HTML5   –  REST   –  AngularJS  
  • 22. Eneterprise  czy  Startup?   Java/J2EE   Python,  Ruby,  PHP…   •  Bogaty  ekosystem   •  Ugruntowania  pozycja  w  biznesie   •  Stabilność   •  Skalowalność   •  Wydajność     Rozwiązania  Enterprise   •  Szybkość  tworzenia  aplikacji   •  Niska  bariera  wejścia   •  Niskie  koszty   •  Duża  elastyczność   •  Łatwość  tworzenia  interfejsów   webowych     Małe  rozwiązania/Startupy   +  Frameworks  
  • 23. •  Lazy  Loading   •  Parallel  Rendering   •  AJAX  &  Comet  (dla  HTML  i  danych)   •  Wiring   •  Designer  Friendly  Templates  (model  View   First)   •  Security  
  • 24. •  Wsparcie  dla  Java  i  Scala   •  Bezstanowa  warstwa  webowa  (brak  sesji)   •  MVC   •  Duża  skalowalność  (Akka,  Non-­‐blocking  I/O)   •  Odejście  od  tradycyjnego  modelu  J2EE  
  • 25. Vs.   LiG   Play   J2EE   Non  J2EE   RESTLess/RESTful   RESTLess   View  First   MVC   Kontener  serwletów   NeLy  I/O,  Akka   Liu  Actors,  Akka   Akka   Elastyczne  podejście:   •  Klasyczna  aplikacja  J2EE   •  Serwowanie  danych     Nacisk  na:   •  Skalowalność   •  Przetwarzanie  rozproszone   •  Cienkiego  klienta   •  Aktywne  forum     •  Rozproszona  dokumentacja   •  Słaby  PR   •  Aktywne  forum  i  StackOverflow   •  Dobra  dokumentacja   •  Dobra  prasa