SlideShare a Scribd company logo
Scalaでの例外
                              @kawachi


Thursday, January 17, 13
自己紹介
                • 最近興味のあること

                      • Scala, TypeScript, iOS, golang, etc.

                • 興味のままに 将来性のあるプラットフォームで仕事
                      したい!

                      • Scala + Elastic Beanstalk + TypeScript でお仕事中
                           (先週末から)


Thursday, January 17, 13
Scalaとの出会い
                • 昨年10月

                • 「Rubyのプログラムが遅いよ∼」

                • 「Scalaっていうのがあるよ」

                • 6倍速に

                • 現在 Scala 歴1ヶ月


Thursday, January 17, 13
Scalaでの例外処理
                • No checked exception

                • サボりがちですが、
                      別に起きなくなったわけじゃありません

                • Blog記事(Error Handling in Scala)の内容を紹介
                      http://tersesystems.com/2012/12/27/error-
                      handling-in-scala


Thursday, January 17, 13
try, catch, finally
                                            ~基本~
                • Java と同じ

                • catch は PartialFunction で書く

                           try {
                             f() // throw new MyException()
                           } catch {
                             case e: MyException => ...
                           } finally {
                             ...
                           }




Thursday, January 17, 13
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
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
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
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
失敗からのrecover

                • Failure[Throwable] を Success[T] へ


                           var v: Try[Int]
                           val r: Try[Int] = v.recover {
                             case e: MyException => 100
                           }




Thursday, January 17, 13
まとめ
                • 基本は try, catch, finally

                • Option を使えば NullPointerException がなくなる

                • エラー応答を返したいときは Either

                • 例外を包む時はTry

                      • Futureを使った非同期プログラミングのお供に


Thursday, January 17, 13

More Related Content

What's hot

不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
Ryosuke839
 
Go guide for Java programmer
Go guide for Java programmerGo guide for Java programmer
Go guide for Java programmer
Masaaki Yonebayashi
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
 
PHPの教室「foreachを極める」
PHPの教室「foreachを極める」PHPの教室「foreachを極める」
PHPの教室「foreachを極める」
Yusuke Ando
 
SEH on mingw32
SEH on mingw32SEH on mingw32
SEH on mingw32
kikairoya
 
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4
Takashi Hoshino
 
Ocaml lecture slides 01 at axsh
Ocaml lecture slides 01 at axshOcaml lecture slides 01 at axsh
Ocaml lecture slides 01 at axsh
Tomofumi Hayashi
 
Control.Arrow
Control.ArrowControl.Arrow
Control.Arrow
haru haru
 
Swift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhiosSwift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhios
Tomohiro Kumagai
 
Haskellの型安全性の力よ〜参照透明性編〜
Haskellの型安全性の力よ〜参照透明性編〜Haskellの型安全性の力よ〜参照透明性編〜
Haskellの型安全性の力よ〜参照透明性編〜
aiya000
 
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みくださいC++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
digitalghost
 
静的型付け言語Python
静的型付け言語Python静的型付け言語Python
静的型付け言語Python
kiki utagawa
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
Genya Murakami
 
ジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansaiジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansai
Tomohiro Kumagai
 
constexpr idioms
constexpr idiomsconstexpr idioms
constexpr idioms
fimbul
 
Visual C++で使えるC++11
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11
nekko1119
 
Visual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALVisual C++コード分析を支えるSAL
Visual C++コード分析を支えるSAL
egtra
 
Emcpp0506
Emcpp0506Emcpp0506
Emcpp0506
Takatoshi Kondo
 
関数型プログラミング in javascript
関数型プログラミング in javascript関数型プログラミング in javascript
関数型プログラミング in javascript
Ryuma Tsukano
 

What's hot (20)

不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
 
Go guide for Java programmer
Go guide for Java programmerGo guide for Java programmer
Go guide for Java programmer
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
 
PHPの教室「foreachを極める」
PHPの教室「foreachを極める」PHPの教室「foreachを極める」
PHPの教室「foreachを極める」
 
SEH on mingw32
SEH on mingw32SEH on mingw32
SEH on mingw32
 
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4
 
Ocaml lecture slides 01 at axsh
Ocaml lecture slides 01 at axshOcaml lecture slides 01 at axsh
Ocaml lecture slides 01 at axsh
 
Control.Arrow
Control.ArrowControl.Arrow
Control.Arrow
 
Swift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhiosSwift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhios
 
Haskellの型安全性の力よ〜参照透明性編〜
Haskellの型安全性の力よ〜参照透明性編〜Haskellの型安全性の力よ〜参照透明性編〜
Haskellの型安全性の力よ〜参照透明性編〜
 
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みくださいC++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
 
静的型付け言語Python
静的型付け言語Python静的型付け言語Python
静的型付け言語Python
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
 
ジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansaiジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansai
 
20081120 lt11th ace
20081120 lt11th ace20081120 lt11th ace
20081120 lt11th ace
 
constexpr idioms
constexpr idiomsconstexpr idioms
constexpr idioms
 
Visual C++で使えるC++11
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11
 
Visual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALVisual C++コード分析を支えるSAL
Visual C++コード分析を支えるSAL
 
Emcpp0506
Emcpp0506Emcpp0506
Emcpp0506
 
関数型プログラミング in javascript
関数型プログラミング in javascript関数型プログラミング in javascript
関数型プログラミング in javascript
 

Viewers also liked

例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
Takuto Wada
 
Scalaによる型安全なエラーハンドリング
Scalaによる型安全なエラーハンドリングScalaによる型安全なエラーハンドリング
Scalaによる型安全なエラーハンドリング
TanUkkii
 
【アジャイルサムライ】6章_ユーザストーリーを集める
【アジャイルサムライ】6章_ユーザストーリーを集める【アジャイルサムライ】6章_ユーザストーリーを集める
【アジャイルサムライ】6章_ユーザストーリーを集める
Akio Terayama
 
XP祭り2014「アジャイルを手放して得られたこと」
XP祭り2014「アジャイルを手放して得られたこと」 XP祭り2014「アジャイルを手放して得られたこと」
XP祭り2014「アジャイルを手放して得られたこと」
Yusuke Suzuki
 
【6章】アジャイルサムライ お題
【6章】アジャイルサムライ お題【6章】アジャイルサムライ お題
【6章】アジャイルサムライ お題
Akio Terayama
 
『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト
『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト
『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト
makopi 23
 
スクラムの知られざる勘所
スクラムの知られざる勘所スクラムの知られざる勘所
スクラムの知られざる勘所
Yoshifumi Tsuda
 
なぜアジャイル開発はうまくいかないのか #xpjug
なぜアジャイル開発はうまくいかないのか #xpjugなぜアジャイル開発はうまくいかないのか #xpjug
なぜアジャイル開発はうまくいかないのか #xpjug
Yoshihito Kuranuki
 
文書をコードとして扱う
文書をコードとして扱う文書をコードとして扱う
文書をコードとして扱う
Recruit Technologies
 
リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計
増田 亨
 
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
増田 亨
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
 

Viewers also liked (13)

例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
Scalaによる型安全なエラーハンドリング
Scalaによる型安全なエラーハンドリングScalaによる型安全なエラーハンドリング
Scalaによる型安全なエラーハンドリング
 
【アジャイルサムライ】6章_ユーザストーリーを集める
【アジャイルサムライ】6章_ユーザストーリーを集める【アジャイルサムライ】6章_ユーザストーリーを集める
【アジャイルサムライ】6章_ユーザストーリーを集める
 
XP祭り2014「アジャイルを手放して得られたこと」
XP祭り2014「アジャイルを手放して得られたこと」 XP祭り2014「アジャイルを手放して得られたこと」
XP祭り2014「アジャイルを手放して得られたこと」
 
【6章】アジャイルサムライ お題
【6章】アジャイルサムライ お題【6章】アジャイルサムライ お題
【6章】アジャイルサムライ お題
 
『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト
『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト
『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト
 
スクラムの知られざる勘所
スクラムの知られざる勘所スクラムの知られざる勘所
スクラムの知られざる勘所
 
なぜアジャイル開発はうまくいかないのか #xpjug
なぜアジャイル開発はうまくいかないのか #xpjugなぜアジャイル開発はうまくいかないのか #xpjug
なぜアジャイル開発はうまくいかないのか #xpjug
 
文書をコードとして扱う
文書をコードとして扱う文書をコードとして扱う
文書をコードとして扱う
 
リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計
 
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 

More from Takashi Kawachi

例外のlogを快適に
例外のlogを快適に例外のlogを快適に
例外のlogを快適に
Takashi Kawachi
 
MacroPyがすごい
MacroPyがすごいMacroPyがすごい
MacroPyがすごい
Takashi Kawachi
 
Silhouette intro
Silhouette introSilhouette intro
Silhouette intro
Takashi Kawachi
 
最小 Hello World! チャレンジ
最小 Hello World! チャレンジ最小 Hello World! チャレンジ
最小 Hello World! チャレンジ
Takashi Kawachi
 
Elastic beanstalk と Docker と Play
Elastic beanstalk と Docker と PlayElastic beanstalk と Docker と Play
Elastic beanstalk と Docker と Play
Takashi Kawachi
 
やさしいIteratee入門
やさしいIteratee入門やさしいIteratee入門
やさしいIteratee入門
Takashi Kawachi
 
Haskell超初心者勉強会20
Haskell超初心者勉強会20Haskell超初心者勉強会20
Haskell超初心者勉強会20
Takashi Kawachi
 
Haskell超初心者勉強会17
Haskell超初心者勉強会17Haskell超初心者勉強会17
Haskell超初心者勉強会17
Takashi Kawachi
 
Haskell超初心者勉強会14
Haskell超初心者勉強会14Haskell超初心者勉強会14
Haskell超初心者勉強会14
Takashi Kawachi
 
Haskell超初心者勉強会11
Haskell超初心者勉強会11Haskell超初心者勉強会11
Haskell超初心者勉強会11
Takashi Kawachi
 

More from Takashi Kawachi (12)

例外のlogを快適に
例外のlogを快適に例外のlogを快適に
例外のlogを快適に
 
MacroPyがすごい
MacroPyがすごいMacroPyがすごい
MacroPyがすごい
 
Silhouette intro
Silhouette introSilhouette intro
Silhouette intro
 
最小 Hello World! チャレンジ
最小 Hello World! チャレンジ最小 Hello World! チャレンジ
最小 Hello World! チャレンジ
 
Sbt doctest
Sbt doctestSbt doctest
Sbt doctest
 
Elastic beanstalk と Docker と Play
Elastic beanstalk と Docker と PlayElastic beanstalk と Docker と Play
Elastic beanstalk と Docker と Play
 
やさしいIteratee入門
やさしいIteratee入門やさしいIteratee入門
やさしいIteratee入門
 
Sbt lock1
Sbt lock1Sbt lock1
Sbt lock1
 
Haskell超初心者勉強会20
Haskell超初心者勉強会20Haskell超初心者勉強会20
Haskell超初心者勉強会20
 
Haskell超初心者勉強会17
Haskell超初心者勉強会17Haskell超初心者勉強会17
Haskell超初心者勉強会17
 
Haskell超初心者勉強会14
Haskell超初心者勉強会14Haskell超初心者勉強会14
Haskell超初心者勉強会14
 
Haskell超初心者勉強会11
Haskell超初心者勉強会11Haskell超初心者勉強会11
Haskell超初心者勉強会11
 

Recently uploaded

"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ..."ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
たけおか しょうぞう
 
【GPT4-o越えのリアルタイム会話AI】kyutai labsのMoshiデモ動画を解説
【GPT4-o越えのリアルタイム会話AI】kyutai labsのMoshiデモ動画を解説【GPT4-o越えのリアルタイム会話AI】kyutai labsのMoshiデモ動画を解説
【GPT4-o越えのリアルタイム会話AI】kyutai labsのMoshiデモ動画を解説
TsuyoshiSaito7
 
Matsuo-Iwasawa Lab. | Research unit Introduction
Matsuo-Iwasawa Lab. | Research unit IntroductionMatsuo-Iwasawa Lab. | Research unit Introduction
Matsuo-Iwasawa Lab. | Research unit Introduction
Matsuo Lab
 
Imitation learning for robotics 勉強会資料(20240701)
Imitation learning for robotics 勉強会資料(20240701)Imitation learning for robotics 勉強会資料(20240701)
Imitation learning for robotics 勉強会資料(20240701)
Natsutani Minoru
 
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
Toru Tamaki
 
第61回CV勉強会「CVPR2024読み会」(前編)発表資料:State Space Models for Event Cameras
第61回CV勉強会「CVPR2024読み会」(前編)発表資料:State Space Models for Event Cameras第61回CV勉強会「CVPR2024読み会」(前編)発表資料:State Space Models for Event Cameras
第61回CV勉強会「CVPR2024読み会」(前編)発表資料:State Space Models for Event Cameras
Takuya Minagawa
 
MySQLの文字コードと照合順序について 2024/07/05の勉強会で発表されたものです。
MySQLの文字コードと照合順序について 2024/07/05の勉強会で発表されたものです。MySQLの文字コードと照合順序について 2024/07/05の勉強会で発表されたものです。
MySQLの文字コードと照合順序について 2024/07/05の勉強会で発表されたものです。
iPride Co., Ltd.
 
MOSHI: 革新的な音声AI QAIが開発した次世代のコミュニケーションツール
MOSHI: 革新的な音声AI QAIが開発した次世代のコミュニケーションツールMOSHI: 革新的な音声AI QAIが開発した次世代のコミュニケーションツール
MOSHI: 革新的な音声AI QAIが開発した次世代のコミュニケーションツール
TsuyoshiSaito7
 
Kyndryl Developer Services のご紹介 2024年7月
Kyndryl Developer Services のご紹介  2024年7月Kyndryl Developer Services のご紹介  2024年7月
Kyndryl Developer Services のご紹介 2024年7月
Takayuki Nakayama
 
「スマートエスイー」におけるスマートシステム&サービスおよびDX推進人材の産学連携育成ならびに参照モデルに基づく育成プログラム分析
「スマートエスイー」におけるスマートシステム&サービスおよびDX推進人材の産学連携育成ならびに参照モデルに基づく育成プログラム分析「スマートエスイー」におけるスマートシステム&サービスおよびDX推進人材の産学連携育成ならびに参照モデルに基づく育成プログラム分析
「スマートエスイー」におけるスマートシステム&サービスおよびDX推進人材の産学連携育成ならびに参照モデルに基づく育成プログラム分析
Hironori Washizaki
 
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
Sony - Neural Network Libraries
 
「福利厚生をコストから投資へ」AIで社員1人ひとりに最適な支援を届ける 全く新しいカフェテリアプラン
「福利厚生をコストから投資へ」AIで社員1人ひとりに最適な支援を届ける 全く新しいカフェテリアプラン「福利厚生をコストから投資へ」AIで社員1人ひとりに最適な支援を届ける 全く新しいカフェテリアプラン
「福利厚生をコストから投資へ」AIで社員1人ひとりに最適な支援を届ける 全く新しいカフェテリアプラン
shogotaguchi
 
Matsuo-Iwasawa Lab. Research unit Introduction
Matsuo-Iwasawa Lab. Research unit IntroductionMatsuo-Iwasawa Lab. Research unit Introduction
Matsuo-Iwasawa Lab. Research unit Introduction
Matsuo Lab
 
Matsuo-Iwasawa lab. Research Unit Introduction
Matsuo-Iwasawa lab. Research Unit IntroductionMatsuo-Iwasawa lab. Research Unit Introduction
Matsuo-Iwasawa lab. Research Unit Introduction
Matsuo Lab
 

Recently uploaded (14)

"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ..."ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
 
【GPT4-o越えのリアルタイム会話AI】kyutai labsのMoshiデモ動画を解説
【GPT4-o越えのリアルタイム会話AI】kyutai labsのMoshiデモ動画を解説【GPT4-o越えのリアルタイム会話AI】kyutai labsのMoshiデモ動画を解説
【GPT4-o越えのリアルタイム会話AI】kyutai labsのMoshiデモ動画を解説
 
Matsuo-Iwasawa Lab. | Research unit Introduction
Matsuo-Iwasawa Lab. | Research unit IntroductionMatsuo-Iwasawa Lab. | Research unit Introduction
Matsuo-Iwasawa Lab. | Research unit Introduction
 
Imitation learning for robotics 勉強会資料(20240701)
Imitation learning for robotics 勉強会資料(20240701)Imitation learning for robotics 勉強会資料(20240701)
Imitation learning for robotics 勉強会資料(20240701)
 
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
 
第61回CV勉強会「CVPR2024読み会」(前編)発表資料:State Space Models for Event Cameras
第61回CV勉強会「CVPR2024読み会」(前編)発表資料:State Space Models for Event Cameras第61回CV勉強会「CVPR2024読み会」(前編)発表資料:State Space Models for Event Cameras
第61回CV勉強会「CVPR2024読み会」(前編)発表資料:State Space Models for Event Cameras
 
MySQLの文字コードと照合順序について 2024/07/05の勉強会で発表されたものです。
MySQLの文字コードと照合順序について 2024/07/05の勉強会で発表されたものです。MySQLの文字コードと照合順序について 2024/07/05の勉強会で発表されたものです。
MySQLの文字コードと照合順序について 2024/07/05の勉強会で発表されたものです。
 
MOSHI: 革新的な音声AI QAIが開発した次世代のコミュニケーションツール
MOSHI: 革新的な音声AI QAIが開発した次世代のコミュニケーションツールMOSHI: 革新的な音声AI QAIが開発した次世代のコミュニケーションツール
MOSHI: 革新的な音声AI QAIが開発した次世代のコミュニケーションツール
 
Kyndryl Developer Services のご紹介 2024年7月
Kyndryl Developer Services のご紹介  2024年7月Kyndryl Developer Services のご紹介  2024年7月
Kyndryl Developer Services のご紹介 2024年7月
 
「スマートエスイー」におけるスマートシステム&サービスおよびDX推進人材の産学連携育成ならびに参照モデルに基づく育成プログラム分析
「スマートエスイー」におけるスマートシステム&サービスおよびDX推進人材の産学連携育成ならびに参照モデルに基づく育成プログラム分析「スマートエスイー」におけるスマートシステム&サービスおよびDX推進人材の産学連携育成ならびに参照モデルに基づく育成プログラム分析
「スマートエスイー」におけるスマートシステム&サービスおよびDX推進人材の産学連携育成ならびに参照モデルに基づく育成プログラム分析
 
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
 
「福利厚生をコストから投資へ」AIで社員1人ひとりに最適な支援を届ける 全く新しいカフェテリアプラン
「福利厚生をコストから投資へ」AIで社員1人ひとりに最適な支援を届ける 全く新しいカフェテリアプラン「福利厚生をコストから投資へ」AIで社員1人ひとりに最適な支援を届ける 全く新しいカフェテリアプラン
「福利厚生をコストから投資へ」AIで社員1人ひとりに最適な支援を届ける 全く新しいカフェテリアプラン
 
Matsuo-Iwasawa Lab. Research unit Introduction
Matsuo-Iwasawa Lab. Research unit IntroductionMatsuo-Iwasawa Lab. Research unit Introduction
Matsuo-Iwasawa Lab. Research unit Introduction
 
Matsuo-Iwasawa lab. Research Unit Introduction
Matsuo-Iwasawa lab. Research Unit IntroductionMatsuo-Iwasawa lab. Research Unit Introduction
Matsuo-Iwasawa lab. Research Unit Introduction
 

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