SCALA	
  
Popularna	
  alternatywa	
  dla	
  języka	
  Java	
  
Dlaczego	
  warto	
  spróbować?	
  
Scala	
  –	
  Co	
  to	
  jest?	
  
Java	
   	
   	
   	
   	
  à	
  zbyt	
  toporna	
  
Języki	
  funkcyjne	
   	
  à	
...
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...
Wydajność	
  deweloperów	
  
Programy	
  napisane	
  w	
  Scali	
  są:	
  
	
  
BARDZIEJ	
  ZWIĘZŁE	
  
	
  
CZYTELNIEJSZE...
Przykład	
  1	
  
["Adam Nowak", "Marcin Kowalski", "Daniel
Kowalski", "Damian Nowak", "Alicja Nowak”]	
  
	
  
	
  
!
{Ko...
Przykład	
  1	
  -­‐	
  Java	
  
String [] people = {"Adam Nowak", "Marcin Kowalski", "Daniel !
! !Kowalski", "Damian Nowa...
Przykład	
  1	
  -­‐	
  Scala	
  
val people = List("Adam Nowak", "Marcin Kowalski", !
! !"Daniel Kowalski", "Damian Nowak...
Przykład	
  2	
  -­‐	
  Java	
  
Problem	
  z	
  logowaniem	
  zdarzeń	
  
	
  
Czy	
  to	
  nie	
  komplikuje	
  kodu?	
 ...
Przykład	
  2	
  -­‐	
  Scala	
  
trait Loggable { self =>!
val logger = LogFactory.getLog(self.getClass)!
!
def debug[T](...
Przykład	
  3	
  -­‐	
  Java	
  
Niejawna	
  konwersja	
  może	
  zwiększyć	
  czytelność	
  
	
  
public class Complex {!...
Przykład	
  3	
  -­‐	
  Scala	
  
case class Complex(re: Double, im: Double) {!
def +(complex: Complex): Complex = !
Compl...
Przykład	
  4	
  –	
  DSL	
  i	
  XML	
  
Scala	
  pozwala	
  na	
  tworzenie	
  własnych	
  języków	
  
	
  
val loan = 1...
Przykład	
  5	
  –	
  PaLern	
  Matching	
  
case class Group(name: String, category: String)!
case class User(fname: Stri...
Przykład	
  6	
  –	
  System	
  Aktorów	
  
Programowanie	
  aplikacji	
  działających	
  asynchronicznie	
  
!
class MyAc...
Oczekiwania	
  biznesowe	
  
•  Szybkość	
  tworzenia	
  rozwiązań	
  
•  Łatwość	
  utrzymania	
  i	
  rozwoju	
  
•  Sta...
Trendy	
  
•  Obliczenia	
  rozproszone	
  (chmura	
  obliczeniowa)	
  
•  Heterogeniczne	
  źródła	
  danych	
  i	
  prze...
Eneterprise	
  czy	
  Startup?	
  
Java/J2EE	
   Python,	
  Ruby,	
  PHP…	
  
•  Bogaty	
  ekosystem	
  
•  Ugruntowania	
...
•  Lazy	
  Loading	
  
•  Parallel	
  Rendering	
  
•  AJAX	
  &	
  Comet	
  (dla	
  HTML	
  i	
  danych)	
  
•  Wiring	
 ...
•  Wsparcie	
  dla	
  Java	
  i	
  Scala	
  
•  Bezstanowa	
  warstwa	
  webowa	
  (brak	
  sesji)	
  
•  MVC	
  
•  Duża	...
Vs.	
  
LiG	
   Play	
  
J2EE	
   Non	
  J2EE	
  
RESTLess/RESTful	
   RESTLess	
  
View	
  First	
   MVC	
  
Kontener	
  ...
Kto	
  używa?	
  
Upcoming SlideShare
Loading in …5
×

Scala

462 views
397 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
462
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Scala

  1. 1. SCALA   Popularna  alternatywa  dla  języka  Java   Dlaczego  warto  spróbować?  
  2. 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  
  3. 3. Kto  wykorzystuje  język  Scala?  
  4. 4. Popularność  Scali   hLp://www.itjobswatch.co.uk/  
  5. 5. Popularność  Scali   RedMonk   GitHub  projects   Stack  Overflow  
  6. 6. Popularność  Scali   Alexa  
  7. 7. Nowe  podejście  
  8. 8. Wydajność  programów   hLp://benchmarksgame.alioth.debian.org/   Wiele  nowych  obiektów  VS  zrównoleglenie   Inteligentniejszy  kompilator  à  szybsze  działanie          
  9. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 23. •  Lazy  Loading   •  Parallel  Rendering   •  AJAX  &  Comet  (dla  HTML  i  danych)   •  Wiring   •  Designer  Friendly  Templates  (model  View   First)   •  Security  
  24. 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. 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  
  26. 26. Kto  używa?  

×