scala

26
SCALA Popularna alternatywa dla języka Java Dlaczego warto spróbować?

Upload: magda3695

Post on 22-Nov-2014

499 views

Category:

Documents


0 download

DESCRIPTION

 

TRANSCRIPT

  • 1. SCALA PopularnaalternatywadlajzykaJava Dlaczegowartosprbowa?

2. ScalaCotojest? Java zbyttoporna Jzykifunkcyjne zbytodmienne Zrwnoleglenie trudne,bdogenne NowamodanaprogramowaniefunkcyjnewJVM 3. KtowykorzystujejzykScala? 4. PopularnoScali hLp://www.itjobswatch.co.uk/ 5. PopularnoScali RedMonk GitHubprojects StackOverow 6. PopularnoScali Alexa 7. Nowepodejcie 8. Wydajnoprogramw hLp://benchmarksgame.alioth.debian.org/ WielenowychobiektwVSzrwnoleglenie Inteligentniejszykompilatorszybszedziaanie 9. Wydajnodeweloperw ProgramynapisanewScalis: BARDZIEJZWIZE CZYTELNIEJSZE ZAWIERAJCEMNIEJBDW DAJWICEJRADOCIDEWELOPEROM 10. Przykad1 ["Adam Nowak", "Marcin Kowalski", "Daniel Kowalski", "Damian Nowak", "Alicja Nowak] ! {Kowalski=[Marcin Kowalski, Daniel Kowalski], ! Nowak=[Adam Nowak, Damian Nowak, Alicja Nowak]}! 11. Przykad1-Java String [] people = {"Adam Nowak", "Marcin Kowalski", "Daniel ! ! !Kowalski", "Damian Nowak", "Alicja Nowak"};! ! Map> namesByLastName = ! ! !new TreeMap>();! for (String name : people) {! String[] splitName = name.split(" ");! List mappedNames = namesByLastName! .get(splitName[1]);! if (mappedNames == null) {! mappedNames = new ArrayList();! namesByLastName.put(splitName[1], mappedNames);! }! mappedNames.add(name);! }! ! System.out.println(namesByLastName);! 12. Przykad1-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. Przykad2-Java Problemzlogowaniemzdarze Czytoniekomplikujekodu? 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. Przykad2-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. Przykad3-Java Niejawnakonwersjamoezwikszyczytelno 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. Przykad3-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. Przykad4DSLiXML Scalapozwalanatworzeniewasnychjzykw val loan = 100000 loan! val simulation = loan duration (120 months) ! rates (5.5 %) simulate payments.equal ! IzagniedanieXML ! val table = ! { users map { user => ! ! {user.fname} ! {user.lname}! ! }}! ! 18. Przykad5PaLernMatching 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. Przykad6SystemAktorw Programowanieaplikacjidziaajcychasynchronicznie ! class MyActor extends Actor {! def receive = {! case ping => sender ! pong! case Echo(msg) => sender ! msg! case cmd: Command => cmd()! case STOP => this ! PoisonPill! }! }! 20. Oczekiwaniabiznesowe Szybkotworzeniarozwiza atwoutrzymaniairozwoju Stabilnoiniezawodno Wysycenietechnologi(frameworki, biblioteki,infrastruktura) Dostpdospecjalistw 21. Trendy Obliczeniarozproszone(chmuraobliczeniowa) Heterogenicznerdadanychiprzetwarzanie asynchroniczne(Akka) Jedensystem,rnekanaydostpu Odseparowaniewarstwylogikidowarstwy prezentacji JavaScript HTML5 REST AngularJS 22. EneterpriseczyStartup? Java/J2EE Python,Ruby,PHP Bogatyekosystem Ugruntowaniapozycjawbiznesie Stabilno Skalowalno Wydajno RozwizaniaEnterprise Szybkotworzeniaaplikacji Niskabarierawejcia Niskiekoszty Duaelastyczno atwotworzeniainterfejsw webowych Maerozwizania/Startupy +Frameworks 23. LazyLoading ParallelRendering AJAX&Comet(dlaHTMLidanych) Wiring DesignerFriendlyTemplates(modelView First) Security 24. WsparciedlaJavaiScala Bezstanowawarstwawebowa(braksesji) MVC Duaskalowalno(Akka,Non-blockingI/O) OdejcieodtradycyjnegomodeluJ2EE 25. Vs. LiG Play J2EE NonJ2EE RESTLess/RESTful RESTLess ViewFirst MVC Kontenerserwletw NeLyI/O,Akka LiuActors,Akka Akka Elastycznepodejcie: KlasycznaaplikacjaJ2EE Serwowaniedanych Naciskna: Skalowalno Przetwarzanierozproszone Cienkiegoklienta Aktywneforum Rozproszonadokumentacja SabyPR AktywneforumiStackOverow Dobradokumentacja Dobraprasa 26. Ktouywa?