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.

Scalaでの例外処理

4,657 views

Published on

Scala 勉強会 in 東京 第95回で発表して来ました。

Published in: Technology

Scalaでの例外処理

  1. 1. Scalaでの例外 @kawachiThursday, January 17, 13
  2. 2. 自己紹介 • 最近興味のあること • Scala, TypeScript, iOS, golang, etc. • 興味のままに 将来性のあるプラットフォームで仕事 したい! • Scala + Elastic Beanstalk + TypeScript でお仕事中 (先週末から)Thursday, January 17, 13
  3. 3. Scalaとの出会い • 昨年10月 • 「Rubyのプログラムが遅いよ∼」 • 「Scalaっていうのがあるよ」 • 6倍速に • 現在 Scala 歴1ヶ月Thursday, January 17, 13
  4. 4. Scalaでの例外処理 • No checked exception • サボりがちですが、 別に起きなくなったわけじゃありません • Blog記事(Error Handling in Scala)の内容を紹介 http://tersesystems.com/2012/12/27/error- handling-in-scalaThursday, January 17, 13
  5. 5. try, catch, finally ~基本~ • Java と同じ • catch は PartialFunction で書く try { f() // throw new MyException() } catch { case e: MyException => ... } finally { ... }Thursday, January 17, 13
  6. 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. 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. 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. 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. 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. 11. まとめ • 基本は try, catch, finally • Option を使えば NullPointerException がなくなる • エラー応答を返したいときは Either • 例外を包む時はTry • Futureを使った非同期プログラミングのお供にThursday, January 17, 13

×