Scala
Upcoming SlideShare
Loading in...5
×
 

Scala

on

  • 408 views

 

Statistics

Views

Total Views
408
Views on SlideShare
408
Embed Views
0

Actions

Likes
0
Downloads
2
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Scala Scala Presentation Transcript

    • 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?