Top Banner
scala っっっっっっ っっ っっ
20

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

Feb 08, 2017

Download

Engineering

Kenji Doi
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Javaから始めるscalaっぽい書き方

scala っぽい書き方

土井 健司

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

想定する参加者Scala を触り始めた人

とりあえず Java っぽく Scala 書いている

Intellij IDEA + scala plugin が入っている

※ 全く触ったことがない方でも、雰囲気は伝わる ... はず

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

本日のゴールハンズオン形式で Java っぽい Scala を Scala っぽく書く

Page 4: Javaから始める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’

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

お題 (3 分 )引数を取得

アカウント : account予算 : budget

予算が 0 以下でエラー予算は手数料 100 円を天引き出力 : ○○ さんの予算は○円です

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

Java っぽいイメージ

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

お願い!

var -> val

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

Option からはじめよう!

例外、 null 、 early exit 、全部 Option !Some(x), None

mapfilter

取り出しpattern matchget, getOrElse

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

Scala っぽくなった\ (^o^) /

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

演習問題 1 (3 分くらい )3つ目の引数を追加

期間 : weeks期間は 4 週までとする日数に変換するこんにちは○○さん、あなたの予算は○円 ([days] 日 ) です※

※ 少し難しい!

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

Option 同士の処理Option 同士の処理

(flatMap)

for

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

解答例

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

エラーを区別したい!None じゃなくてエラーメッセージを残したい

Right(x), Left(e)( あんまり使わない ...)right.map

right.filter

Option -> Right( 定石 )toRight(SomeThingLeft)

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

エラーが区別できた\ (^o^) /

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

演習問題 2 (3 分くらい )日割り予算を求めよ

budget / days

計算はメソッド化すること

引数は予算と日付

日割り金額が 1 円以下の場合はエラー

private def dailyBudget(...) = {...}

○○ さんの日割り予算は〇〇円です

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

よりよく書くヒント引数は Int? Option[Int]?

Option でも Either でも使える汎用さ =Int

map や for で中身を取り出して、意識して Int で書く

返り値は Int? Option? Either?Option が例外の存在を伝える

Option だから汎用的。エラー文言は呼び出し側で変換すれば良い

Option⇔Either 等変換の手助けメソッドはどんどん活用

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

解答例

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

Tips例外を抑制して Option 化

scala.util.Try().toOption

関数の引数省略

関数の引数は _ で1回ずつ参照可能

either は scalaz の方がげふんげふん ...

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

関数型言語の3大要素 ( 諸説あり )Immutable ← やや今日のテーマ

副作用がない ← 今日のテーマど真ん中

( 関数は第一級関数 )

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

まとめ

例外、 null 、 early exit→ 全部 Option !単体 : map, filter複数 : for結果 : pattern match, getOrElseエラー : toRight切り出し : メソッドを汎用的に