Submit Search
Upload
Non-Functional Programming in Scala
•
6 likes
•
9,057 views
T
takezoe
Follow
Scala Kansai Summit 2017 #scala_ks
Read less
Read more
Software
Report
Share
Report
Share
1 of 57
Download now
Download to read offline
Recommended
[事例紹介]Scalaで物流倉庫システム作ったよ
[事例紹介]Scalaで物流倉庫システム作ったよ
Tomokazu Matsushita
BigDLでScala × DeepLearning に入門した話
BigDLでScala × DeepLearning に入門した話
hirotakanosato
ScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChisel
Kei Nakazawa
頑張りすぎないScala
頑張りすぎないScala
takezoe
元インフラエンジニアが Scalaを触ってつまづいたところ。
元インフラエンジニアが Scalaを触ってつまづいたところ。
takako onoue
Scala製機械学習サーバ「Apache PredictionIO」
Scala製機械学習サーバ「Apache PredictionIO」
takezoe
Scala界隈の近況
Scala界隈の近況
takezoe
Scala警察のすすめ
Scala警察のすすめ
takezoe
Recommended
[事例紹介]Scalaで物流倉庫システム作ったよ
[事例紹介]Scalaで物流倉庫システム作ったよ
Tomokazu Matsushita
BigDLでScala × DeepLearning に入門した話
BigDLでScala × DeepLearning に入門した話
hirotakanosato
ScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChisel
Kei Nakazawa
頑張りすぎないScala
頑張りすぎないScala
takezoe
元インフラエンジニアが Scalaを触ってつまづいたところ。
元インフラエンジニアが Scalaを触ってつまづいたところ。
takako onoue
Scala製機械学習サーバ「Apache PredictionIO」
Scala製機械学習サーバ「Apache PredictionIO」
takezoe
Scala界隈の近況
Scala界隈の近況
takezoe
Scala警察のすすめ
Scala警察のすすめ
takezoe
SIerでScalaを使うために私がしたこと
SIerでScalaを使うために私がしたこと
takezoe
Scala採用の背景とその後 @ hitomedia night #5
Scala採用の背景とその後 @ hitomedia night #5
Jiro Hiraiwa
PlayFramework1.x基礎編
PlayFramework1.x基礎編
Asami Abe
JavaからScalaへ
JavaからScalaへ
takezoe
ユーザーデータ基盤を1からScalaでつくった話し
ユーザーデータ基盤を1からScalaでつくった話し
Hideaki Tarumi
iOSエンジニアのためのScala入門
iOSエンジニアのためのScala入門
Masaya Dake
株式会社ドワンゴにおけるScala教育の現状
株式会社ドワンゴにおけるScala教育の現状
Kota Mizushima
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Asami Abe
アドテク企業のScala導入について振り返るlt
アドテク企業のScala導入について振り返るlt
Jiro Hiraiwa
Scala.js触ってみた
Scala.js触ってみた
Asami Abe
ネタじゃないScala.js
ネタじゃないScala.js
takezoe
Do you like scala
Do you like scala
Yuto Suzuki
Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -
Kota Mizushima
プロダクトにおけるScala
プロダクトにおけるScala
Yuto Suzuki
[Scalamatsuri2016]あ、社内コミュニティ
[Scalamatsuri2016]あ、社内コミュニティ
hirotakanosato
Scalaはじめました!
Scalaはじめました!
Asami Abe
Scala Performance Tuning Tips
Scala Performance Tuning Tips
Kota Mizushima
足を地に着け落ち着いて考える
足を地に着け落ち着いて考える
Ryuji Tamagawa
Fun tech#14 AlibabaCloud - EDAS(Enterprise Distributed Application Service)
Fun tech#14 AlibabaCloud - EDAS(Enterprise Distributed Application Service)
Takuya Mihara
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
Isamu Suzuki
Clojure web dev history
Clojure web dev history
Ikuru Kanuma
MP in Clojure
MP in Clojure
Kent Ohashi
More Related Content
What's hot
SIerでScalaを使うために私がしたこと
SIerでScalaを使うために私がしたこと
takezoe
Scala採用の背景とその後 @ hitomedia night #5
Scala採用の背景とその後 @ hitomedia night #5
Jiro Hiraiwa
PlayFramework1.x基礎編
PlayFramework1.x基礎編
Asami Abe
JavaからScalaへ
JavaからScalaへ
takezoe
ユーザーデータ基盤を1からScalaでつくった話し
ユーザーデータ基盤を1からScalaでつくった話し
Hideaki Tarumi
iOSエンジニアのためのScala入門
iOSエンジニアのためのScala入門
Masaya Dake
株式会社ドワンゴにおけるScala教育の現状
株式会社ドワンゴにおけるScala教育の現状
Kota Mizushima
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Asami Abe
アドテク企業のScala導入について振り返るlt
アドテク企業のScala導入について振り返るlt
Jiro Hiraiwa
Scala.js触ってみた
Scala.js触ってみた
Asami Abe
ネタじゃないScala.js
ネタじゃないScala.js
takezoe
Do you like scala
Do you like scala
Yuto Suzuki
Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -
Kota Mizushima
プロダクトにおけるScala
プロダクトにおけるScala
Yuto Suzuki
[Scalamatsuri2016]あ、社内コミュニティ
[Scalamatsuri2016]あ、社内コミュニティ
hirotakanosato
Scalaはじめました!
Scalaはじめました!
Asami Abe
Scala Performance Tuning Tips
Scala Performance Tuning Tips
Kota Mizushima
足を地に着け落ち着いて考える
足を地に着け落ち着いて考える
Ryuji Tamagawa
Fun tech#14 AlibabaCloud - EDAS(Enterprise Distributed Application Service)
Fun tech#14 AlibabaCloud - EDAS(Enterprise Distributed Application Service)
Takuya Mihara
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
Isamu Suzuki
What's hot
(20)
SIerでScalaを使うために私がしたこと
SIerでScalaを使うために私がしたこと
Scala採用の背景とその後 @ hitomedia night #5
Scala採用の背景とその後 @ hitomedia night #5
PlayFramework1.x基礎編
PlayFramework1.x基礎編
JavaからScalaへ
JavaからScalaへ
ユーザーデータ基盤を1からScalaでつくった話し
ユーザーデータ基盤を1からScalaでつくった話し
iOSエンジニアのためのScala入門
iOSエンジニアのためのScala入門
株式会社ドワンゴにおけるScala教育の現状
株式会社ドワンゴにおけるScala教育の現状
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
アドテク企業のScala導入について振り返るlt
アドテク企業のScala導入について振り返るlt
Scala.js触ってみた
Scala.js触ってみた
ネタじゃないScala.js
ネタじゃないScala.js
Do you like scala
Do you like scala
Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -
プロダクトにおけるScala
プロダクトにおけるScala
[Scalamatsuri2016]あ、社内コミュニティ
[Scalamatsuri2016]あ、社内コミュニティ
Scalaはじめました!
Scalaはじめました!
Scala Performance Tuning Tips
Scala Performance Tuning Tips
足を地に着け落ち着いて考える
足を地に着け落ち着いて考える
Fun tech#14 AlibabaCloud - EDAS(Enterprise Distributed Application Service)
Fun tech#14 AlibabaCloud - EDAS(Enterprise Distributed Application Service)
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
Viewers also liked
Clojure web dev history
Clojure web dev history
Ikuru Kanuma
MP in Clojure
MP in Clojure
Kent Ohashi
AtCoderで始めるテスト駆動開発
AtCoderで始めるテスト駆動開発
YujiSoftware
The best of AltJava is Xtend
The best of AltJava is Xtend
takezoe
Javaでマサカリ投げてみた
Javaでマサカリ投げてみた
YujiSoftware
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
Naoki Aoyama
Viewers also liked
(6)
Clojure web dev history
Clojure web dev history
MP in Clojure
MP in Clojure
AtCoderで始めるテスト駆動開発
AtCoderで始めるテスト駆動開発
The best of AltJava is Xtend
The best of AltJava is Xtend
Javaでマサカリ投げてみた
Javaでマサカリ投げてみた
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
Similar to Non-Functional Programming in Scala
サービスクラス、その前に
サービスクラス、その前に
Yasutomo Uemori
WikiWikiアジャイル
WikiWikiアジャイル
Fumio Kawakami
Swiftでの関数型プログラミングについて考えていること
Swiftでの関数型プログラミングについて考えていること
Shingo Sato
自前言語を仕事に使う話
自前言語を仕事に使う話
啓 小笠原
WorcCamp Kansai 2015 LT大会
WorcCamp Kansai 2015 LT大会
Koji Asaga
線形型のある言語でLEDを光らせる
線形型のある言語でLEDを光らせる
啓 小笠原
【MashupAwards11】kintoneのご紹介
【MashupAwards11】kintoneのご紹介
Koji Asaga
軽量言語メインの 文系エンジニアだった自分が Scalaのシステム開発に携わることになった経緯 @shigemk2
軽量言語メインの 文系エンジニアだった自分が Scalaのシステム開発に携わることになった経緯 @shigemk2
Michihito Shigemura
herokuもおもしろそうだよ(よこはまクラウド勉強会LT資料)
herokuもおもしろそうだよ(よこはまクラウド勉強会LT資料)
Kentaro Takasaki
遅いクエリと向き合う仕組み #CybozuMeetup
遅いクエリと向き合う仕組み #CybozuMeetup
S Akai
こわくないScala
こわくないScala
FScoward
Scalaで萌える関数型プログラミング[エッセンシャル版]
Scalaで萌える関数型プログラミング[エッセンシャル版]
Ra Zon
鹿駆動勉強会 青江発表資料
鹿駆動勉強会 青江発表資料
Takashi Aoe
Practical Use of Provisioning Profile 20140115 potatotips3
Practical Use of Provisioning Profile 20140115 potatotips3
Shin Yamamoto
メンバーズグループ アジャイル開発への取り組み
メンバーズグループ アジャイル開発への取り組み
Hiroshi Tsukamoto
20190517 Spark+AI Summit2019最新レポート
20190517 Spark+AI Summit2019最新レポート
Ryoma Nagata
これ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回す
これ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回す
Study Group by SciencePark Corp.
Scala.jsはじめました!
Scala.jsはじめました!
K Kinzal
uroboroSQLの紹介 (OSC2017 Tokyo/Spring)
uroboroSQLの紹介 (OSC2017 Tokyo/Spring)
Kenichi Hoshi
Scala Daysに行ってみて
Scala Daysに行ってみて
Kota Mizushima
Similar to Non-Functional Programming in Scala
(20)
サービスクラス、その前に
サービスクラス、その前に
WikiWikiアジャイル
WikiWikiアジャイル
Swiftでの関数型プログラミングについて考えていること
Swiftでの関数型プログラミングについて考えていること
自前言語を仕事に使う話
自前言語を仕事に使う話
WorcCamp Kansai 2015 LT大会
WorcCamp Kansai 2015 LT大会
線形型のある言語でLEDを光らせる
線形型のある言語でLEDを光らせる
【MashupAwards11】kintoneのご紹介
【MashupAwards11】kintoneのご紹介
軽量言語メインの 文系エンジニアだった自分が Scalaのシステム開発に携わることになった経緯 @shigemk2
軽量言語メインの 文系エンジニアだった自分が Scalaのシステム開発に携わることになった経緯 @shigemk2
herokuもおもしろそうだよ(よこはまクラウド勉強会LT資料)
herokuもおもしろそうだよ(よこはまクラウド勉強会LT資料)
遅いクエリと向き合う仕組み #CybozuMeetup
遅いクエリと向き合う仕組み #CybozuMeetup
こわくないScala
こわくないScala
Scalaで萌える関数型プログラミング[エッセンシャル版]
Scalaで萌える関数型プログラミング[エッセンシャル版]
鹿駆動勉強会 青江発表資料
鹿駆動勉強会 青江発表資料
Practical Use of Provisioning Profile 20140115 potatotips3
Practical Use of Provisioning Profile 20140115 potatotips3
メンバーズグループ アジャイル開発への取り組み
メンバーズグループ アジャイル開発への取り組み
20190517 Spark+AI Summit2019最新レポート
20190517 Spark+AI Summit2019最新レポート
これ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回す
これ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回す
Scala.jsはじめました!
Scala.jsはじめました!
uroboroSQLの紹介 (OSC2017 Tokyo/Spring)
uroboroSQLの紹介 (OSC2017 Tokyo/Spring)
Scala Daysに行ってみて
Scala Daysに行ってみて
More from takezoe
Journey of Migrating Millions of Queries on The Cloud
Journey of Migrating Millions of Queries on The Cloud
takezoe
GitBucket: Open source self-hosting Git server built by Scala
GitBucket: Open source self-hosting Git server built by Scala
takezoe
Testing Distributed Query Engine as a Service
Testing Distributed Query Engine as a Service
takezoe
Revisit Dependency Injection in scala
Revisit Dependency Injection in scala
takezoe
How to keep maintainability of long life Scala applications
How to keep maintainability of long life Scala applications
takezoe
GitBucket: Git Centric Software Development Platform by Scala
GitBucket: Git Centric Software Development Platform by Scala
takezoe
Scala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.js
takezoe
Tracing Microservices with Zipkin
Tracing Microservices with Zipkin
takezoe
Type-safe front-end development with Scala
Type-safe front-end development with Scala
takezoe
Scala Frameworks for Web Application 2016
Scala Frameworks for Web Application 2016
takezoe
Macro in Scala
Macro in Scala
takezoe
Java9 and Project Jigsaw
Java9 and Project Jigsaw
takezoe
Reactive database access with Slick3
Reactive database access with Slick3
takezoe
markedj: The best of markdown processor on JVM
markedj: The best of markdown processor on JVM
takezoe
Excel方眼紙を支えるJava技術 2015
Excel方眼紙を支えるJava技術 2015
takezoe
ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscala
ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscala
takezoe
GitBucket: The perfect Github clone by Scala
GitBucket: The perfect Github clone by Scala
takezoe
Play2実践tips集
Play2実践tips集
takezoe
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?
takezoe
Scala Frustrations
Scala Frustrations
takezoe
More from takezoe
(20)
Journey of Migrating Millions of Queries on The Cloud
Journey of Migrating Millions of Queries on The Cloud
GitBucket: Open source self-hosting Git server built by Scala
GitBucket: Open source self-hosting Git server built by Scala
Testing Distributed Query Engine as a Service
Testing Distributed Query Engine as a Service
Revisit Dependency Injection in scala
Revisit Dependency Injection in scala
How to keep maintainability of long life Scala applications
How to keep maintainability of long life Scala applications
GitBucket: Git Centric Software Development Platform by Scala
GitBucket: Git Centric Software Development Platform by Scala
Scala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.js
Tracing Microservices with Zipkin
Tracing Microservices with Zipkin
Type-safe front-end development with Scala
Type-safe front-end development with Scala
Scala Frameworks for Web Application 2016
Scala Frameworks for Web Application 2016
Macro in Scala
Macro in Scala
Java9 and Project Jigsaw
Java9 and Project Jigsaw
Reactive database access with Slick3
Reactive database access with Slick3
markedj: The best of markdown processor on JVM
markedj: The best of markdown processor on JVM
Excel方眼紙を支えるJava技術 2015
Excel方眼紙を支えるJava技術 2015
ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscala
ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscala
GitBucket: The perfect Github clone by Scala
GitBucket: The perfect Github clone by Scala
Play2実践tips集
Play2実践tips集
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?
Scala Frustrations
Scala Frustrations
Non-Functional Programming in Scala
1.
Non-Functional Programming in Scala Naoki
Takezoe @takezoen BizReach, Inc
2.
自己紹介 竹添 直樹: @takezoen ビズリーチという会社でScalaを書いてます OSS開発や技術書の執筆などもしています
3.
主題 Scalaがもっと普及して欲しい そうしないと自分が失業してしまう(重要!!) そのためにはどうすればいいのか?
4.
いままでやってきたこと Scalaの本を書いたり、翻訳したりした SI企業で業務システム開発の事例を作った Scalaでオープンソースプロダクトを開発 Scala関連イベントのサポート Webサービス企業でそれなりの規模でScalaを採用した
5.
突き当たった壁
6.
関数型プログラミング
7.
関数型プログラミング in Scala 基本的には副作用を使った手続き型プログラミング言語 関数型言語由来の様々な機能を備えている for内包表記、暗黙的なモナド Scalaz、Cats、Slickなどの関数型ライブラリ どこまで関数型に寄せるか?という選択を迫られる プログラミングスタイルだけでなく、ライブラリやフレームワークの 選定から考慮しなくてはならない
8.
振り返ってみる 業務での開発で起きたこと OSS開発で起きたこと
9.
業務での開発で起きたこと 時間 Scala力
10.
業務での開発で起きたこと 最初はみんな 初心者 時間 Scala力
11.
業務での開発で起きたこと Scala力アップ!! 最初はみんな 初心者 時間 Scala力
12.
業務での開発で起きたこと Scala力アップ!! 最初はみんな 初心者 後から入ってくる 人つらい!! 時間 Scala力 ハードルの高さ
13.
こうあって欲しい(気持ちは理解できる) 時間 Java力
14.
業務での開発で起きたこと 最初はみんなScala初心者だった 初期のメンバーが少しずつレベルアップしてくる 関数型プログラミングが取り入れられてくる 時代によってコードの傾向が違う 後から入ってくる人ほどつらくなってしまう
15.
振り返り Scalaはプログラマの成長にあわせてスタイルを変えられる 長期間、固定のチームで開発するのであればチームの成長にあ わせて変化していくことができる メンバーの増加・入れ替わりが激しい場合は変化が大きいとどん どんハードルが上がっていってしまう
16.
OSS開発で起きたこと Elasticsearch-Hadoop、Apache PredictionIOなど 手続き型バリバリのプログラミングスタイル varやmutableコレクション、whileループ、returnや例外なども多 用されている
17.
OSS開発で起きたこと コミッターのスキルが低いのか?そんなことはない バックグラウンド、モチベーションの違い SparkのためにScalaを使っている
18.
振り返り 言語としてではなくプロダクトとしてのニーズが存在する ○○を使えば□□ができる、というフックは増やしていくべき
19.
関数型プログラミングへのモチベーションが 低い状況でどうScalaを使うか?
20.
方針 そもそもScalaは副作用のある手続き型プログラミング言語であ り、モナドを意識せずに使えるように設計されている Scalaの便利な機能を使いつつ、関数型プログラミングに寄せす ぎないようにする
21.
使うべきか?使わないべきか? ● var、while ● mutableコレクション ●
return ● 例外 ● null ● Option.get ● for内包表記 ● 型クラス
22.
考えてみよう!!
23.
var、while
24.
var、while ループ処理などでフラグやアキュムレータなどに使いがち takeWhileやfoldLeftなどで代用可能だが取っつきづらい var line =
reader.readLine() while(line != null) { ... line = reader.readLine() }
25.
var、while ループ処理などでフラグやアキュムレータなどに使いがち takeWhileやfoldLeftなどで代用可能だが取っつきづらい var line =
reader.readLine() while(line != null) { ... line = reader.readLine() }
26.
var、while メソッド内での利用であれば許容する valはJavaでfinalをつけるかどうかくらいの感覚で使い分けるの がよさそう
27.
mutableコレクション
28.
mutableコレクション ループしながら詰め替えるような処理で使いがち val list =
... val map = mutable.Map("some" -> 0, "none" -> 0) list.foreach { x => if (x.nonEmpty) { map.put("some", map("some") + 1) } else { map.put("none", map("none") + 1) } }
29.
mutableコレクション ループしながら詰め替えるような処理で使いがち val list =
... val map = mutable.Map("some" -> 0, "none" -> 0) list.foreach { x => if (x.nonEmpty) { map.put("some", map("some") + 1) } else { map.put("none", map("none") + 1) } }
30.
mutableコレクション メソッド内での利用であれば許容する 戻り値として返す際にimmutableなコレクションに変換する 使わなくても済むものはimmutableなコレクションを使うように啓 蒙していく val map =
list.groupBy(_.nonEmpty) .map { case (nonEmpty, values) => if(nonEmpty) "some" -> values.size else "none" -> values.size }
31.
return
32.
return Ealry returnやループ処理中からのreturnなどが使われがち def hello(names:
Seq[String]): String = { if(name.isEmpty) return "" ... } 戻り値の型を明記しないといけなくなる コンパイル後に例外(ControlThrowable)で実現されるケースが ある
33.
return Ealry returnやループ処理中からのreturnなどが使われがち def hello(names:
Seq[String]): String = { if(name.isEmpty) return "" ... } 戻り値の型を明記しないといけなくなる コンパイル後に例外(ControlThrowable)で実現されるケースが ある
34.
return 実際に問題になるケースは少ないので許容してもよいのでは そもそも例外をThrowableでキャッチしない try { ... } catch
{ case NonFatal(t) => ... }
35.
例外
36.
例外 エラーを戻り値で返すか?Eitherなどで返すか? def findUser(): Either[Exception,
User] = { try { val user: User = ... Right(user) } catch { case e: Exception => Left(e) } }
37.
例外 エラーを戻り値で返すか?Eitherなどで返すか? def findUser(): Either[Exception,
User] = { try { val user: User = ... Right(user) } catch { case e: Exception => Left(e) } }
38.
例外 Eitherで返そうとすると 例外の発生は防げないので変換が必要になる for内包表記やEitherTなどが登場してしまう 通常は積極的に例外に倒してしまってもよいのでは? ただし非同期処理の場合は別
39.
null
40.
null
41.
null 使うべき理由がまるでない がくぞー先生に消されてしまう Optionを使う Javaライブラリを使う部分は仕方ない
42.
Option.get
43.
Option.get 値が必ず入っているはずだと直接getしがち Noneチェックしてからgetしがち val opt: Option[String]
= ... if(opt.isDefined){ val str = opt.get ... }
44.
Option.get 値が必ず入っているはずだと直接getしがち Noneチェックしてからgetしがち val opt: Option[String]
= ... if(opt.isDefined){ val str = opt.get ... }
45.
Option.get opt.getOrElse("") などとする人が出現 getして明示的にエラーになる方がマシではある mapやforeachなどを使うよう啓蒙していく
46.
for内包表記
47.
for内包表記 モナモナするときに使う for { project <-
findProject(projectId) user <- findUser(userId) } yield { registerComment(project, user, comment) }
48.
for内包表記 モナモナするときに使う for { project <-
findProject(projectId) user <- findUser(userId) } yield { registerComment(project, user, comment) }
49.
for内包表記 無理して使わない コレクション操作やFutureのチェーンをシンプルに記述するため に使う その場合もmapやflatMapのシンタックスシュガーという認識があ ればよい 「モナド」って言わない
50.
型クラス
51.
型クラス implicitの使い方の一種 implicit val userInfoReads
= Json.reads[UserInfoInfo] r.body.validate[UserInfo].fold( error => ..., form => ... ) sealed trait JsValue extends JsReadable { def validate[A](implicit rds: Reads[A]): JsResult[A] }
52.
型クラス implicitの使い方の一種 implicit val userInfoReads
= Json.reads[UserInfoInfo] r.body.validate[UserInfo].fold( error => ..., form => ... ) sealed trait JsValue extends JsReadable { def validate[A](implicit rds: Reads[A]): JsResult[A] }
53.
型クラス フレームワークやライブラリで使っているケースが多い 使うだけであれば意識する必要はない(CanBuildFromを意識し なくてもScalaのコレクションは使える) play-jsonのReads/Writesのように自分で実装しないといけない ケースもあるが、そこまで躓くことはない印象(面倒なのはさてお き...) 「型クラス」って言わない
54.
結果 ● var、while ● mutableコレクション ●
return ● 例外 ● null ● Option.get ● for内包表記 ● 型クラス
55.
最終的にはケースバイケース これはあくまでも判断の一例 プロダクトの方向性、今後のチーム運営も考えて決める チームのスキルが一様であればそれにあわせればよい
56.
Scalaを使う人がもっと増えて欲しい 最初はみんな初心者だった Scalaで楽しくプログラミングをして欲しい 関数型プログラミングに興味のある人だけでなく、 それ以外の人たちにもScalaを使って欲しい Scalaを使っているのにというジレンマを感じることもある いろんな使い方ができるのもScalaの良いところ Scalaユーザが増えることで自分たちの選択肢も広がる
57.
ご静聴ありがとうございました
Download now