More Related Content
More from Takashi Kawachi (12)
Scalaでの例外処理
- 1. Scalaでの例外
@kawachi
Thursday, January 17, 13
- 2. 自己紹介
• 最近興味のあること
• Scala, TypeScript, iOS, golang, etc.
• 興味のままに 将来性のあるプラットフォームで仕事
したい!
• Scala + Elastic Beanstalk + TypeScript でお仕事中
(先週末から)
Thursday, January 17, 13
- 3. Scalaとの出会い
• 昨年10月
• 「Rubyのプログラムが遅いよ∼」
• 「Scalaっていうのがあるよ」
• 6倍速に
• 現在 Scala 歴1ヶ月
Thursday, January 17, 13
- 4. Scalaでの例外処理
• No checked exception
• サボりがちですが、
別に起きなくなったわけじゃありません
• Blog記事(Error Handling in Scala)の内容を紹介
http://tersesystems.com/2012/12/27/error-
handling-in-scala
Thursday, January 17, 13
- 5. try, catch, finally
~基本~
• Java と同じ
• catch は PartialFunction で書く
try {
f() // throw new MyException()
} catch {
case e: MyException => ...
} finally {
...
}
Thursday, January 17, 13
- 6. Option
~NullPointerException からの卒業~
• 値が無いかもしれないことを型で表現
• Some(A) or None
• Option の敵 → Some(null)
Some(possiblyNull) ではなく Option(possiblyNull)
• 使い方はコレクションっぽい。Cheat sheet 参照
• http://blog.tmorris.net/posts/scalaoption-cheat-sheet/
Thursday, January 17, 13
- 7. Either
~エラー応答~
• Left[L] or Right[R]
• Rightに成功応答、Leftにエラー応答
• ネストが深くなる傾向あり (Either[A,Either[B,...]])
def f(): Either[FailResult, String] =
if (...)
Right("abc")
else
Left(FailResult("failed"))
f().fold(
error => ...,
success => ...
)
Thursday, January 17, 13
- 8. Try New in 2.10
From twitter.util
~Wrap Throwable~
• Failure[Throwable] or Success[T]
• 例外を包む
• スタックをまたげる → 非同期プログラミング
object Try {
def apply[T](r: => T): Try[T] =
try Success(r) catch {
case NonFatal(e) => Failure(e)
}
}
Thursday, January 17, 13
- 9. Try の使い方
import util.Try
val sumTry = for {
int1 <- Try(Integer.parseInt("1"))
int2 <- Try(Integer.parseInt("2"))
} yield {
int1 + int2
}
sumTry match {
case Failure(e) => e.printStackTrace()
case Success(v) => println(v)
}
Thursday, January 17, 13
- 10. 失敗からのrecover
• Failure[Throwable] を Success[T] へ
var v: Try[Int]
val r: Try[Int] = v.recover {
case e: MyException => 100
}
Thursday, January 17, 13
- 11. まとめ
• 基本は try, catch, finally
• Option を使えば NullPointerException がなくなる
• エラー応答を返したいときは Either
• 例外を包む時はTry
• Futureを使った非同期プログラミングのお供に
Thursday, January 17, 13