Upgrade to Pro — share decks privately, control downloads, hide ads and more …

seasar_conf_2015.pdf

tsuyoshi yoshizawa
September 26, 2015
2.6k

 seasar_conf_2015.pdf

tsuyoshi yoshizawa

September 26, 2015
Tweet

Transcript

  1. *NNVUBCMF case  class  User(name:  String,  lang:  Lang)   val  u

     =  User("Seasar",  Lang("ja-­‐JP"))   u  =  User("Seasar",  Lang("en-­‐US"))  //  error   u.name  =  "Seasar"  //  error   val  u2  =  u.copy(lang  =  Lang(“en-­‐US”)) w DBTFDMBTTͷDPQZϝιουΛ࢖༻͢Δ͜ͱʹ ΑͬͯɺݩͷΠϯελϯεΛ௚઀มߋ͠ͳ͍
  2. ώΞυΩϡϝϯτ val  user  =  User("Seasar",  Lang(“en-­‐US”))   s"""   Hello!

      Your  name  is  $user.name   """   Hello!   Your  name  is  Seasar w 4USJOH*OUFSQPMBUJPO΋͔Βαϙʔτ
  3. ύλʔϯϚον User("Seasar",  Lang("ja-­‐JP"))  match  {      case  User(name,  lang)

     if  lang  ==  Lang("ja-­‐JP")  =>          println(s"͜Μʹͪ͸  $name  ͞Μ")      case  User(name,  _)  =>          println(s"Hello  $name")   } w ΦϒδΣΫτΛ෼ղͯ͠஋ΛऔΓग़͢͜ͱ͕Ͱ͖Δ
  4. ໊લ౉͠ w ࣮ߦ௚લ·ͰॲཧΛߦΘͳ͍ w ྫʣෆཁͳϩάϨϕϧԼͰԿ΋ॲཧ͸ͤ͞ͳ͍ def  time(f:  =>  Unit)  {

         val  before  =  System.currentTimeMillis      f      println(System.currentTimeMillis  -­‐  before)   }   val  isDebug  =  false   def  debug(s:  String)  =  if  (isDebug)  println(s)   def  lazyDebug(s:  =>  String)  =  if  (isDebug)  println(s)   time  {  debug("Hello"  *  5000000)  }  //  140ms   time  {  lazyDebug("Hello"  *  5000000)  }  //  0ms  
  5. 'VUVSF val  f1  =  Future  {  100  }  //  heavyTask

      val  f2  =  Future  {  200  }  //  heavyTask   val  f  =  for  {      r1  <-­‐  f1      r2  <-­‐  f2   }  yield  (r1  +  r2)   f  onSuccess  {      case  r  =>  println(r)  //  300   } w ඇಉظॲཧͷ߹੒΋खܰ w +BWBͷ$PNQMFUBCMF'VUVSF
  6. 4DBMBͷίί͕ࠔΔ w ίϯύΠϧ͕஗͍ w ϓϩδΣΫτ෼ׂɺJNQMJDJUΛଟ༻͠ͳ͍ͱ ͍ͬͨ#, w όΠφϦޓ׵ੑ  ʜ

     w ϥΠϒϥϦ͕ର৅4DBMBͷόʔδϣϯͰ࠶ίϯ ύΠϧ͢Δඞཁ͋Γʢ͔ͳΓվળ͞ΕͯΔʣ
  7. DMFBODPNQJMFྫ 0 50 100 67s 90s MBA 11-inch Mid 2012

    (2.0 GHz intel Core i7) MBP Retina 15-inch Early 2013 (2.7 GHz Intel Core i7) ։ൃ࣌͸ຖճΫϦʔϯίϯ ύΠϧ͢ΔΘ͚Ͱ͸ͳ͍ sbt ͕ࠩ෼ίϯύΠϧͯ͘͠ ΕΔ
  8. 3&45GVM class  UserController  extends  Controller  {      …  

       def  create  =  Action  {          val  user  =  …          Ok(Json.toJson(user))      }   } POST  /users  controllers.UserController.create
  9. ؆қͳϞοΫ࣮૷ྫ trait  Twitter  {      def  search(keyword:  String)  =

     ???   }   object  Twitter  extends  Twitter   class  TwitterController  extends  Controller  {      val  twitter  =  Twitter      …   } class  MockTwitterController  extends  TwitterController   {      override  val  twitter  =  MockTwitter   }
  10. τϥϯβΫγϣϯྫ def  findUser(name:  String)  =      DB.readOnly  {  implicit

     session  =>          User.find(name)      } w τϥϯβΫγϣϯڥքΛϒϩοΫͰදݱ w τϥϯβΫγϣϯ͕͋ΔͱΘ͔Δ҆৺ײ w +BWBͷϥϜμࣜͰ΋࣮ݱՄ %PNB
  11. 42-JT%4- sql"""      select          id,

     name,  price,  created_at      from          products      where          id  =  ${id}   """   .map(rs  =>  Product(rs)).single.apply() w 4DBMB ϚΫϩ֦ுʹΑΔ҆શͳ42- CZTDBMJLFKECD  w ίʔυͱ42-͕෼཭͠ͳ͍ͨΊ೺Ѳ͠΍͍͢