読者です 読者をやめる 読者になる 読者になる

NEGAKULIFE

ネ学生のQoLを上げるブログ

ネ学生のQoLを上げるブログ

課題が終わらないのは仕様

SD攻略決死隊 - 例外より課題処理 #2

先週(2016/5/19)のSDは例外処理でした。問題数の割には意外と簡単だったのでは無いでしょうか。
(というかその前が鬼畜すぎた)

後、某サークルに今年から加入しました。先週はちょうど合宿という事で色々な人と喋る事が出来ました。
今後ともぜひよろしくお願いします。

今回の課題

問題数が多かったですね。一個一個はそこまで重くないです。と思ってました。 1. 例外処理のメリット 2. TurtleOutOfFrameExceptionを作ってみる 3. 指定されたプログラムの動作を確認、例外処理の追加 4. マージソートについて調べて記述 5. MyListにマージソートを実装 6. 例外処理の便利さを身を持って知る

今回ヤバいのは課題6です。それ以外は割りと簡単。課題5で躓いてる人は先週の実装がガバかった人です。

例外を身を持って知る

課題1を突破した皆さんなら、「例外がいかに素晴らしいか」というのを分かっているはずです。
では、それを身をもって体感してみましょう、というのが課題6です。

例外処理はマジ便利

例外処理、一体なんなんだマジ死んでくれって感じの人も多いと思います。わかります。

めんどくさいものは図で考えましょう。処理というのは以下のような感じです。 f:id:ne5oku:20160526000146p:plain

メソッドが連なって連なって、「処理を担当するキャラ」がどんどん変わっていきます。

ここで問題が発生!

f:id:ne5oku:20160526000352p:plain

「処理を頼まれたんだけど、何らかの原因で処理ができなかった」
こうなると大変です。

あると思っていた5億が無い事に気付いたネコは、タートルさんに報告しなければいけません。
そして、タートルさんは神様である私たちの所に「5億なんてなかったよ」って教えてくれます。

その機能を実現するためには、タートルさんとネコに「エラーを報告する」とか「エラーを受け取る」とかそういう機能を追加しなければいけません。
これって非常にムダだよね!

今回はタートルさんとネコしか居なかったので、まだ良いですが、これがもっと多かったら…エラーを神様サイドへ運ぶために、多大な労力が必要です。
もしこれが再帰処理(!)だったら…めんどくさいったらありゃしない!(ちなみにマージソート再帰処理なのでこの面倒くさいのを課題6で実装しろと僕らの神が仰っております)

ここで登場するのがtryシステム

イメージとしては、「処理を頼み始めたヤツが、責任を持って部下の仕事を見張る」ような感じです。
今回の場合は「5億とってこいよ」と言っているのは左側の神様です。神様が、エラーを見張るのです。
そして、エラーを見つけたら「あ、5億無い?そかそかwんじゃ終わりでいいよw」とcatchブロックへ処理を移動します。

課題6への応用

課題6は「エラー」を「見つけた数」と置き換えて考えてみましょう。
つまり「数を見つけて、上司にreturnする」機能と「部下が見つけた数がreturnされてきたからそれを上司にreturnする」機能が必要なわけです。

まとめ

  • 責任は取ろう

謝辞

今回は、睡眠と猫が捗りすぎたため、短い記事な上に投稿日時が遅れてしまいました。申し訳ありません。
本当はもうちょい色々書きたかったのですが、時間も時間なので一番大事そうな所だけ書いておきました。
これ以外の所は多分教科書に乗ってます。