Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Rubyistを誘うScalaの世界

9,065 views

Published on

#kwskrb 30

Published in: Technology
  • Be the first to comment

Rubyistを誘うScalaの世界

  1. 1. Rubyistを誘う Scalaの世界 @Peranikov
  2. 2. ドーモ、 ルビースト=サン
  3. 3. Scalaistデス
  4. 4. 今日はRubyistの皆様に Scalaの魅力を 伝えるために来ました
  5. 5. どうやってつたえるか • Rubyの魅力(と思われるもの)をScalaで再現す れば良い • 型をなるべく書かない(Rubyistに型を見せると 死ぬ)
  6. 6. Scalaは純粋な オブジェクト指向 である
  7. 7. 1 + 2 これをな
  8. 8. 1.+(2) +メソッド +メソッドの引数 こうじゃ
  9. 9. 1.+(2) +メソッド +メソッドの引数 RubyでもScalaでも通る!
  10. 10. リスト操作
  11. 11. どっちのコードか? [1,2,3].map { ¦i¦ i * 2 }
  12. 12. 正解:Ruby [1,2,3].map { ¦i¦ i * 2 }
 # => [2, 4, 6]
  13. 13. Scalaではこう書く List(1,2,3).map { i => i * 2 }
 // => List(2, 4, 6)
  14. 14. さらに短く List(1,2,3).map { _ * 2 }
 // => List(2, 4, 6) ※ _ には引数が代入される
  15. 15. おなじみのメソッド達 • min • max • reduce • zip • unzip
  16. 16. Mix-In
  17. 17. RubyにはModule、 ScalaにはTraitがある trait HelloModule { def hello = "Hello!" } trait WorldModule { def world = "World!" } class Hoge extends HelloModule with WorldModule val hoge = new Hoge() hoge.hello // => "Hello!" Traitを定義 TraitをMix-In
  18. 18. Open Class
  19. 19. 暗黙クラスを使う implicit class MyString(val s: String) extends AnyVal { def addScala = s + "Scala" } "Ruby is like ".addScala // => "Ruby is like Scala" 拡張したい型を指定 implicitにより暗黙的に型変換され、MyStringの メソッドが呼ばれる
  20. 20. Duck Typing
  21. 21. がんばればできる
 (structural subtyping) type Hogeable = { def hoge(s: String):String }
 
 def addFuga(t: Hogeable): String = { t.hoge + fuga! } class Hoge { def hoge = hoge! } addFuga(new Hoge()) // => hoge!fuga! 共通するメソッドを持つ 型を定義 定義した型を 引数に指定 メソッドを持っていれば そのまま渡せる
  22. 22. 結論 • Rubyの魅力(と思われるもの)は大体Scalaで再 現できた(はず) • Scala書こうぜ!
  23. 23. 終わり
  24. 24. メタプログラミングは? • そんなものにふれてはいけない
  25. 25. メタプログラミングは??? • 一応ScalaにもReflectionやMacroが存在する • まだEXPERIMENTAL • 触ってみたが面倒くさかった
 (Rubyほどカジュアルに使えない)

×