Scalaでプログラムを作りました

27
Scala プログラムを作りました 2012429 Lab 浅海智晴

description

ニコニコ超会議2012の超エンジニアミーティングで使用したスライドです。JavaなどのOOPをやっていて、Scalaをこれから始めたい人向けの情報提供を目的としています。

Transcript of Scalaでプログラムを作りました

  • 1. Scala2012429Lab

2. ()LabJava edge2.cc XML SmartDoc (XML) Relaxer (XML/Java) SimpleModeler (Scala DSL) SmartDox () g3 () g4 (Android) UML(BP) () Scala(Softbank Creative) 3. Scala Scala Scala 4. Scala 5. ScalaSimpleModeler https://github.com/asami/simplemodelerScala: 789Scala: 95KSmartDoxhttps://github.com/asami/smartdoxDSLScala: 31Scala: 3.6Kg3http://code.google.com/p/goldenport3/()Scala: 162Scala: 22Kgoldenporthttps://github.com/asami/goldenportScala: 289Scala: 17K 6. SimpleModeler DSL DDD 7. sample.org* #+caption: | name |!|------|!| |!!** #+caption: | name | type |!|------+--------|!| | string |!!*** **** **** * ** *** **** **** (long)!*** **** (1;2;3)!* ** *** **** **** 8. Java$ sm -java sample.org!/src/main/java/model/ModelContext.java!/src/main/java/model/ModelRepository.java!/src/main/java/model/ModelController.java!/src/main/java/model/ModelModel.java!/src/main/java/model/ModelErrorModel.java!/src/main/java/model/ModelModule.java!/src/main/java/model/ModelFactory.java!/src/main/java/model/ModelApplication.java!/src/main/java/model/.java!/src/main/java/model/DD.java!/src/main/java/model/DVIId.java!/src/main/java/model/.java!/src/main/java/model/DD.java!/src/main/java/model/DP.java!/src/main/java/model/DVIId.java!/src/main/java/model/.java!/src/main/java/model/DD.java!/src/main/java/model/.java!/src/main/java/model/DD.java!/src/main/java/model/DVIId.java!/src/main/java/model/.java!/src/main/java/model/DD.java!/src/main/java/model/DVIId.java!/src/main/java/model/.java!/src/main/java/model/DD.java! 9. Ext-JS & Play$ sm -extjs sample.org!/public/app/model! /public/app/model/.js!/public/app/controller! /public/app/model/.js!/public/app/controller/AppController.js! /public/app/model/.js!/public/app/controller/Controller.js! /public/app/model/.js!/public/app/controller/Controller.js! /public/app/model/.js!/public/app/controller/ /public/app/model/.js!Controller.js! /public/app/store!/public/app/controller/Controller.js! /public/app/store/Store.js!/public/app/controller/ /public/app/store/Store.js!Controller.js! /public/app/store/Store.js!/public/app/controller/ /public/app/store/Store.js!Controller.js! /public/app/store/Store.js!/public/app/view! /public/app/store/Store.js!/public/app/view/AppView.js! /conf!/public/app/view/Viewport.js! /conf/evolutions!/public/app/view/Grid.js! /conf/evolutions/default!/public/app/view/ViewForm.js! /conf/evolutions/default/1.sql.sm!/public/app/view/EditForm.js!/public/app/view/Grid.js!/public/app/view/ViewForm.js!/public/app/view/EditForm.js!/public/app/view/Grid.js!/public/app/view/ViewForm.js!/public/app/view/EditForm.js!/public/app/view/Grid.js!/public/app/view/ViewForm.js!/public/app/view/EditForm.js!/public/app/view/Grid.js!/public/app/view/ViewForm.js!/public/app/view/EditForm.js!/public/app/view/Grid.js!/public/app/view/ViewForm.js!/public/app/view/EditForm.js! 10. Scala Tips Modegramming Style http://modegramming.blogspot.jp/ Modeling + Programming = Modegramming DSL Scala Tips Scala OptionEitherValidation 11. Lisp OS LispLisp Emacs-Lisp Lisp Lisp JavaLisp 1995Java 20 2008ScalaDSL 20112.0 2011Scalaz 12. Scala 13. Java VM OOP Scala DSL Better Java Scalaz Promise Beyond Mere Actors https://docs.google.com/present/view?id=ddmk3f43_63zpg3jcgz 14. DSL OO DSL OO OO 15. DSL(Domain Specic Language) 16. Scala 17. Scala Object-Functional Programming (OFP) OOP OOP (FP) OOPFP Monadic DSL API 18. OFP (trait) mix-in AOP (monad) Monadic (type class) (?) Scala 19. Javadef validate(name: String, age: Int): ValidationNEL[Throwable, (String,Int)] = {! val a = validateName(name) ! val b = validateAge(age) ! if (a.isSuccess && b.isSuccess) { ! val a1 = a.asInstanceOf[Success[NonEmptyList[Throwable], String]].a ! val b1 = b.asInstanceOf[Success[NonEmptyList[Throwable], Int]].a ! Success((a1, b1)) ! } else if (a.isSuccess) { ! b.asInstanceOf[Failure[NonEmptyList[Throwable], (String, Int)]] ! } else if (b.isSuccess) { ! a.asInstanceOf[Failure[NonEmptyList[Throwable], (String, Int)]] ! } else { ! val a1 = a.asInstanceOf[Failure[NonEmptyList[Throwable], String]].e ! val b1 = b.asInstanceOf[Failure[NonEmptyList[Throwable], Int]].e ! Failure(a1 |+| b1) ! } !}! 20. Scala ()def validate(name: String, age: Int):ValidationNEL[Throwable, (String, Int)] = { !validateName(name) match { !case Success(a) => validateAge(age) match { !case Success(b) => Success((a, b)) !case Failure(e) => Failure(e) !} !case Failure(e1) => validateAge(age) match { !case Success(b) => Failure(e1) !case Failure(e2) => Failure(e1 |+| e2) !} !} !} !Scalaz (Monadic)def validate(name: String, age: Int):ValidationNEL[Throwable, (String, Int)] = { ! (validateName(name) validateAge(age))((_, _)) !}!URL: http://modegramming.blogspot.jp/2012/04/ scala-tips-validation-10-applicative.html 21. SparkScaldingval file = spark.textFile("hdfs://...")file.flatMap(line => line.split(" ")) Spark.map(word => (word, 1)) http://www.spark-project.org/.reduceByKey(_ + _) Lightning-Fast Cluster Computing Apache Mesosclass WordCountJob(args : Args) extends Job(args) {TextLine( args("input") ).read. flatMap(line -> word) { line : String => line.split("s+") }. groupBy(word) { _.size }. write( Tsv( args("output") ) )} Scalding https://github.com/twitter/scalding CascadingScala DSL Collection APIHadoop 22. Enterprise IntegrationPatterns (EIP) Apache Camel Enterprise Integration Patterns http://camel.apache.org/enterprise-integration- patterns.htmlRouteBuilder builder = new RouteBuilder() {public void configure() { errorHandler(deadLetterChannel("mock:error")); from("seda:a").choice() .when(header("foo").isEqualTo("bar")).to("seda:b") .when(header("foo").isEqualTo("cheese")).to("seda:c") .otherwise().to("seda:d"); }}; 23. (associative law) (semigroup) (monoid) (a + b) + c = a + (b + c) (group) (commutative law) a+b=b+a () (distributive law) (ring) (field) a * (b + c) = a * b + a * c 24. (category)Hask (Scala?) (monad) (kleisli category) Applicative (arrow,functormorphism) (functor) 25. ScalaBetter Java DSLBetter JavamapfoldList Option, Either mapfoldflatMap MonadicScalaz 26. DSL Scala 27. END