SlideShare une entreprise Scribd logo
1  sur  20
scalaっぽい書き方
土井 健司
想定する参加者
Scalaを触り始めた人
とりあえずJavaっぽくScala書いている
Intellij IDEA + scala pluginが入っている
※ 全く触ったことがない方でも、雰囲気は伝わる...はず
本日のゴール
ハンズオン形式でJavaっぽいScalaをScalaっぽく書く
Mainクラス作成
1. File -> New -> Project -> Scala
2. scalikeプロジェクト作成
a. ※ scala SDKを選択、もしくはNewからscala-sdk-2.11.7を選択
3. srcを選択して右クリック→New→scalaクラス
4. name: Main, Kind: Object
5. 中でmainと入力し、保管でenter
6. println(“Hello World!”)
7. mainメソッドを右クリック→Run’Main’
お題(3分)
引数を取得
アカウント: account
予算: budget
予算が0以下でエラー
予算は手数料100円を天引き
出力: ○○さんの予算は○円です
Javaっぽいイメージ
お願い!
var -> val
Optionからはじめよう!
例外、null、early exit、全部Option!
Some(x), None
map
filter
取り出し
pattern match
get, getOrElse
Scalaっぽくなった\(^o^)/
演習問題1 (3分くらい)
3つ目の引数を追加
期間: weeks
期間は4週までとする
日数に変換する
こんにちは○○さん、あなたの予算は○円([days]日)です※
※ 少し難しい!
Option同士の処理
Option同士の処理
(flatMap)
for
解答例
エラーを区別したい!
Noneじゃなくてエラーメッセージを残したい
Right(x), Left(e)(あんまり使わない...)
right.map
right.filter
Option -> Right(定石)
toRight(SomeThingLeft)
エラーが区別できた\(^o^)/
演習問題2 (3分くらい)
日割り予算を求めよ
budget / days
計算はメソッド化すること
引数は予算と日付
日割り金額が1円以下の場合はエラー
private def dailyBudget(...) = {...}
○○さんの日割り予算は〇〇円です
よりよく書くヒント
引数はInt? Option[Int]?
OptionでもEitherでも使える汎用さ=Int
mapやforで中身を取り出して、意識してIntで書く
返り値はInt? Option? Either?
Optionが例外の存在を伝える
Optionだから汎用的。エラー文言は呼び出し側で変換すれば良い
Option⇔Either等変換の手助けメソッドはどんどん活用
解答例
Tips
例外を抑制してOption化
scala.util.Try().toOption
関数の引数省略
関数の引数は_で1回ずつ参照可能
eitherはscalazの方がげふんげふん...
関数型言語の3大要素(諸説あり)
Immutable ← やや今日のテーマ
副作用がない ← 今日のテーマど真ん中
(関数は第一級関数)
まとめ
例外、null、early exit→全部Option!
単体: map, filter
複数: for
結果: pattern match, getOrElse
エラー: toRight
切り出し: メソッドを汎用的に

Contenu connexe

En vedette

Skinny Framework で始めた Scala
Skinny Framework で始めた ScalaSkinny Framework で始めた Scala
Skinny Framework で始めた ScalaRyuji Yamashita
 
たのしい高階関数
たのしい高階関数たのしい高階関数
たのしい高階関数Shinichi Kozake
 
私がドメイン駆動設計をやる理由
私がドメイン駆動設計をやる理由私がドメイン駆動設計をやる理由
私がドメイン駆動設計をやる理由増田 亨
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知るShuhei Fujita
 
C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)Takuya Kawabe
 
データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016
データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016
データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016Tokoroten Nakayama
 
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...Yahoo!デベロッパーネットワーク
 
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門増田 亨
 
H2O x mrubyで人はどれだけ幸せになれるのか
H2O x mrubyで人はどれだけ幸せになれるのかH2O x mrubyで人はどれだけ幸せになれるのか
H2O x mrubyで人はどれだけ幸せになれるのかIchito Nagata
 
スマホマーケットの概要と、 マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
スマホマーケットの概要と、マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)スマホマーケットの概要と、マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
スマホマーケットの概要と、 マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)Tokoroten Nakayama
 

En vedette (10)

Skinny Framework で始めた Scala
Skinny Framework で始めた ScalaSkinny Framework で始めた Scala
Skinny Framework で始めた Scala
 
たのしい高階関数
たのしい高階関数たのしい高階関数
たのしい高階関数
 
私がドメイン駆動設計をやる理由
私がドメイン駆動設計をやる理由私がドメイン駆動設計をやる理由
私がドメイン駆動設計をやる理由
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知る
 
C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)
 
データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016
データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016
データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016
 
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
 
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
 
H2O x mrubyで人はどれだけ幸せになれるのか
H2O x mrubyで人はどれだけ幸せになれるのかH2O x mrubyで人はどれだけ幸せになれるのか
H2O x mrubyで人はどれだけ幸せになれるのか
 
スマホマーケットの概要と、 マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
スマホマーケットの概要と、マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)スマホマーケットの概要と、マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
スマホマーケットの概要と、 マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
 

Similaire à Javaから始めるscalaっぽい書き方

Scalaの現状と今後
Scalaの現状と今後Scalaの現状と今後
Scalaの現状と今後Kota Mizushima
 
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.jsYuto Suzuki
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Taisuke Shiratori
 
Scala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.jsScala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.jstakezoe
 

Similaire à Javaから始めるscalaっぽい書き方 (7)

fanscala1 3 sbt
fanscala1 3 sbtfanscala1 3 sbt
fanscala1 3 sbt
 
Scalaの現状と今後
Scalaの現状と今後Scalaの現状と今後
Scalaの現状と今後
 
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009
 
Scala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.jsScala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.js
 
ScalaCL in ScalaKaigi
ScalaCL in ScalaKaigiScalaCL in ScalaKaigi
ScalaCL in ScalaKaigi
 
scala-kaigi1-sbt
scala-kaigi1-sbtscala-kaigi1-sbt
scala-kaigi1-sbt
 

Javaから始めるscalaっぽい書き方