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.

Overview of Scala ~ Hacker Tackle

3,953 views

Published on

2015-09-26 Hacker Tackle

Published in: Technology
  • Be the first to comment

Overview of Scala ~ Hacker Tackle

  1. 1. Overview of Scala ~Scalaひとめぐり~ 2015年9月26日Hacker Tackle id:daiksy
  2. 2. 本日の内容 • Scalaの周辺状況 • 採用事例(海外・国内) • はてなインターンの様子 • Scalaの特徴
  3. 3. 粕谷 大輔 id:daiksy (@daiksy) 株式会社 はてな
  4. 4. • スイス連邦工科大学 (EPFL)のMartin Odersky(小田好)教授によって設計 • JVMで動作(古の時代は .net Frameworkでも動 いた) • オブジェクト指向と関数型言語のパラダイム
  5. 5. daiksyのScala歴 • 2011年 くらいからちょっと触りだす • 2012年 ~ 2014年 フリュー株式会社 • 2015年 ~ 現在 株式会社 はてな
  6. 6. 日本でも規模の大きな カンファレンス • 2013年 Scala Conference in Japan • 2014年 ScalaMatsuri 2014 • 2015年 Scala関西Summit
  7. 7. 採用事例 (海外) • Twitter 「Scalaで日本のバルスに耐えた」 (ScalaMatsuri2014にて) • Linkedin • Netflix (はてな京都でミートアップ開催)
  8. 8. 採用事例 (国内) • ドワンゴ • サイバーエージェント • スマートニュース • TIS (Typesafeとパートナー契約) • LINE • ヌーラボ • はてな
  9. 9. Scala != Better Java LLからの移行事例が増加 • チャットワーク PHP -> Scala • はてなブックマーク Perl -> Scala
  10. 10. 利用できる主なフレームワーク • Lift • Play Framework • Scalatra • Skinny Framework
  11. 11. はてなサマーインターン 2015 今年からScalaコースを新設
  12. 12. はてなサマーインターン Scalaコースのカリキュラム • 1日目 Scalaの言語基礎 & 課題(講師 id:daiksy) • 2日目 DB講義 & 課題(講師 id:mechairoi) • 3日目 HTTP, WAF講義 & 課題(講師 id:Songmu) • 最後の3週間 Mackerelチームでプロダクト開発 他にもJavaScriptやインフラの講義も
  13. 13. Scalaの特徴 • JVM上で動作 • 静的な型付けと型推論 • オブジェクト指向 • 関数プログラミング
  14. 14. 静的な型付けと型推論
  15. 15. 静的な型付けと型推論
  16. 16. 多態性 (オブジェクト指向)
  17. 17. 多態性 (オブジェクト指向) • trait を使って実現 • trait は複数mixinできる • trait に実装することもできる
  18. 18. 関数プログラミング • 関数が第一級オブジェクト • 副作用を伴わない実装のための機能 • if 式 • for 式 • 抱負なコレクションメソッド
  19. 19. 関数が第一級オブジェクト
  20. 20. 副作用とは • 変数の値を変更する • オブジェクトのフィールドを変更する(Javaの setterとかC# のプロパティとか) • ファイルやデータベースなどに対する入出力
  21. 21. 副作用のない宣言(immutable)
  22. 22. 副作用のない宣言(immutable) • var で宣言すると再代入できる • val で宣言すると再代入できない • Scalaはコードスタイルや状況に応じてmutable とimmutableを使い分けられる • いわゆる「非純粋関数型言語」
  23. 23. if 式
  24. 24. if 式
  25. 25. for 式
  26. 26. コレクション • List/Array/Map/Set いろいろある • コレクションには便利なメソッドが山程ある • map/filter/flatMap/find/findAll/reduce • take/drop/exists/sort/sortBy/zip/partition • grouped/groupBy
  27. 27. FizzBazzを実装してみよう
  28. 28. 副作用のない実装まとめ • val で宣言することで変数が再代入できなくなる • if式 for式 コレクション操作 などを駆使すると、 val だけでプログラミングできるようになる • 慣れるとvar を使わざるを得ない局面で悔しみを 感じる
  29. 29. Scalaではnullも使わない • 言語仕様的にはnullは存在する • Scalaではnullを使わずOption型を使う
  30. 30. Option型 • あるかないかわからない値を表現できる型 • Someの中身を使うには明示的に取り出す操作 が必要 (ぬるぽに悩まずにすむ)
  31. 31. Option型 • 値があるときはSomeでくるむ • 値がないときはNone
  32. 32. Option型 • Optionは型なので、そのまま使おうとすると コンパイルで怒られる
  33. 33. Option型のいろいろな 取り出し方
  34. 34. Option型 • 要素が0または1のコレクションとみなせる • flatMap, foreachなどのコレクションのメソッ ドを持っている
  35. 35. Option型同士の計算
  36. 36. 今日ご紹介しきれない いろいろな機能 • case class • 強力なパターンマッチ • 暗黙の変換 (implicit)
  37. 37. 無限に勉強できる
  38. 38. Scalaは難しい? • 言語仕様が多いので学習コストは低くない • 表現力が抱負なので、Better Javaとして書いて もよい (最初はvar使ってもいいのでは) • 関数プログラミングが難しい? -> 新しいパラダ イムの学習は難しい。オブジェクト指向もそれ は一緒
  39. 39. Enjoy Scala!!
  40. 40. ご清聴ありがとうございました

×