• Like
.Netの例外
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

.Netの例外

  • 631 views
Published

 

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
631
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
3
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. .NETの例外処理
  • 2. Myself 森理 麟(@moririring) 職業:ゲームプログラマ HP : moririringのHP Microsoft MVP for C# 2
  • 3. My Community VSハッカソン倶楽部 ExcptionalC++読書会 社内勉強会勉強会 Unityクリエイターズ Visual Studio勉強会 IT英語勉強会 ぼちぼちぼっち開発←NEW 3
  • 4. 皆さん例外処理を書いていま すかー? Exceptional 4
  • 5. 僕は例外処理は殆ど書かずに きた。…という言い訳 5
  • 6. 最近は.NETでは例外処理を意 識している ただ、正しい書き方の結論が 出ていない 多分間違ったことも言うので ぜひツッコミを! あと今日の趣旨と違いソース はC#。ゴメンナサイ。 6
  • 7. .NETの例外処理 その前に 7
  • 8. .NETはデフォルトの例外を表 示するウィンドウが頂けない この情報の殆どは開発者向 け。使用者向けではない。 8
  • 9. 以下を書くことで例外時のUI と処理を替えられる Application.ThreadException += (s, e) => { //ここで独自のエラー表示や処理をする MessageBox.Show("エラーが発生しました"); Application.Exit(); }; (※コンソールはAppDomain.CurrentDomain.UnhandledException) 9
  • 10. 僕はメッセージを単純にして 内容メールを送るようにした メール実装をして分かったこ とは誰も連絡なんかくれない 10
  • 11. メッセージボックスに「何か あったら森理まで」とか書い ても多分無駄 11
  • 12. メール処理で例外が出てしま うと本末転倒なので注意 さらにDB書き込みをしていた が、例外処理が甘くて。。。 12
  • 13. .NETの例外処理 13
  • 14. 例外処理について詳しく解説 されているHPは少ない印象。 ソースがアップされていても 「例外処理は分かりやすくす るために省きます」とか。 14
  • 15. 例外を意識しだしてから適切 なtry-catchを書こうとした それでもアプリが止まること はあり、指針が定まらない 15
  • 16. で、最近例外処理について書 かれている良い文章を発見 とあるコンサルタントのつぶ やき「.NETの例外処理 」 http://blogs.msdn.com/b/nakam a/archive/2008/12/29/net-part1.aspx 16
  • 17. もっとも衝撃的だったのが以下 の一文。大文字フォント+赤文 字で書かれている。 よほどのことがない限 り、アプリケーション で try-catch を書いて はいけません。 17
  • 18. さらに重要な内容がこれ エンドユーザに対して再試行 を促すようなメッセージを表 示することになるケースを業 務エラーと呼ぶ。業務エラー では、例外を利用してはいけ ない。 18
  • 19. 「殆どの例外処理は、どうに もならん場合以外お前のプロ グラムでなんとかしろ!」っ てことかなーと。 19
  • 20. .NETの例外処理の書 き方 20
  • 21. 以下の1行への適切な例外処理 とは? public string ReadAllText(string filePath) { return File.OpenText(filePath).ReadToEnd(); } 21
  • 22. 僕がよく行くサイトで書かれ ている例外処理。 http://dobon.net/vb/dotnet/begi nner/exceptionhandling.html 22
  • 23. 23
  • 24. まずFile.Existでファイルが存 在しているかチェック フォルダがない時、ファイル がない時など多くの例外は防 げる 24
  • 25. ファイルが存在する場合の例 外はファイルロックだけ? OpenText(FileStremが読み取 り)はロックされていても開く。 25
  • 26. 実際にこの書き方で、例外が 起こせないか手動で色々試す  ファイルを消す  フォルダを消す  Excelやサクラエディタで開いておく  アクセス権のないアカウントを作って アクセスする  でかいファイル作って、ロード中に削 除する 26
  • 27. 結果自力では例外を起こせず 27
  • 28. ちょっと話を変えて、例外が 来た時のリカバリーの疑問 28
  • 29. ファイルの例外はMessageBox でエラーを知らせるのが楽 どういうメッセージが適切か 調べる必要がある 29
  • 30. IOExceptionのようなエラー全 般がくる例外でどのメッセー ジが適切なのか判断つかず。 30
  • 31. サンプルはかなり適切。それ でも万全かは疑問が残る 31
  • 32. 色々見ていてふとex.Message こそ正しいメッセージが入っ ていることに気づく。 MSDNによると開発者向け? なので多少助長な時もあるが 32
  • 33. そうなると結局どの例外がこ ようが以下の書き方がエラー メッセージになるのかな? try { } catch (Exception ex) { MessageBox.Show(ex.Message); } 33
  • 34. 完全に例外を握りつぶすよう な書き方はするべきではない とよく見る。 34
  • 35. さまざまなことを考えて、ど う書くべきか、皆さんの考え を教えて下さい 35
  • 36. if (File.Exists(filePath)) { try { using (var sr = File.OpenText(filePath)) { s = sr.ReadToEnd(); } } //例外は全てメッセージを出すことでエラー処理とする catch (Exception ex) { MessageBox.Show(ex.Message); } } 36
  • 37. 1.例外はエラーメッセージ を出して全て握りつぶす。 2.ファイル系とアクセス例 外はエラーメッセージを出し ては握りつぶす。 3.サンプル通り全部書く 4.どれとも違う。 37
  • 38. 実は手動で一つだけ例外をだ せる方法があった。 10GBのファイルを作ってロー ドする。 Exceptionでthrowを書いてし まうとこのアプリは止まる。 ただちょっと作為的すぎ? 38
  • 39. .NETの別の例外対策 39
  • 40. そもそも.NETで言えばエラー チェックはUIで制御してしま うべきだと思う 40
  • 41. OpenFileDialogやSaveFileDialog を使えばFile.Existsより確実に 例外を防ぐ。 ただ、起動時ロードの実装な どでやはり例外が来たりもす る 41
  • 42. テキストにドラッグする場合 などは、ファイルがない場合 ボタンが押せないとするべき private void textBox_TextChanged(object sender, EventArgs e) { button1.Enabled = File.Exists(textBox.Text); } 42
  • 43. .NETの例外処理のま とめ 43
  • 44. ファイルアクセス時の例外処 理で、リソースへのアクセス 時は殆ど同じで行けるかな と。 44
  • 45. 例外はやっぱり難しい どうするべきかは経験の蓄積 例外の多くはnullチェックでか なり防げる 45
  • 46. ご清聴ありがとうございまし た Thank you for hearing my talk! 46