月曜日はバグ
みなさん、おはようおっぱぴー。
毎日がエブリデー、今日はマンデー。どうも僕です。
ここ最近、僕は憂鬱をこじらせてしまって、いろいろなものにやつあたりとかしたりしています。悪いことだと思っているんですけどついついあたってしまいます。でもそういうのに当たっても僕は弱いので大抵返り討ちにあっちゃうんですよね。これがインガオッホッホッホホホーッってやつなんでしょうね。
さて、そんなわけで今日は月曜日が来るという現象は世の中の理、すなわちシステム的な欠陥なんじゃないかなという考えに至ったのでJavaを使って月曜日の例外処理を作っていきます。
例外処理(れいがいしょり)とは、プログラムの上位の処理から呼び出されている下位の処理で継続不能、または継続すれば支障をきたす異常事態に陥ったとき、制御を呼び出し元の上位の処理に返し安全な状態になるよう回復処理をすること。その際に発生した異常のことを例外と呼ぶ。
例外処理……まあ、何を言っているのかわかりませんがプログラムは基本的に上から下に解読して、その処理を実行していきます。だけど途中で解読できないものがあるとコンピュータは困ってしまってわんわわーんってなっちゃうんですね。そんな状態を回避するための処理が例外処理っていうわけです。
月曜例外
さて、早速例外処理つくりましたーとやってもいいのですが、せっかくなので「try catch finally」について説明しようかと思います。上述のように例外となる現象は致命的なパターンが多いので発生してしまうと処理が止まってしまうことがほとんどです。それを回避するための条件分岐的な処理の書き方が「try catch finally」という構文になります。
try{ // 例外が発生しているかどうか調べる処理 } catch (例外クラス 変数名){ // 例外クラスの例外が発生した時に行う処理 } finally { // 例外が発生するしないに関わらず実行する処理 }
上のように書いていきます。基本的にはif文と同じ流れです。"try"で例外が発生したら"catch"が実行されると言った感じです。メリットとしては「例外クラス」というものがいくつか標準で実装されているのでそれを使うとなにか作るのに手間がかからなくなるとか、例外パターンを別の場所に切り分けることができるとかなんじゃないかなと思ってます。
それじゃあ雑な説明はこのあたりにして早速作っていきます。
――と思ったのですが、こちらの例外クラスリストをみてもおかしなことに月曜日が発生する例外クラスはないんですね。これってプログラム的におかしいことではないそうなんですよ。あれれーなんでだろー。
Exception (Java Platform SE 8)
そんなわけで月曜日発生を例外とするクラスを作っていかなくてはなりました。まあ、いいや。
作っていきましょう。
メインになるやつ
package Mon; import java.text.SimpleDateFormat; import java.util.Date; class Monday{ public static void main(String args[]){ Date d = new Date(); SimpleDateFormat df = new SimpleDateFormat("E曜"); System.out.println("月曜日の検知を開始します"); String checkDate = df.format(d); chcek_date(checkDate); } private static void chcek_date(String checkDate){ try{ // System.out.println(checkDate); if(checkDate.equals("月曜")){ throw new MondayException("精神と身体に深刻なエラーが発生しました"); } } catch(MondayException e){ e.printStackTrace(); } finally{ System.out.println("月曜日の検知を終了します。"); } } }
例外になるやつ
package Mon; public class MondayException extends Exception { public MondayException(String message) { super(message); } }
つくりました。
実行すると下のような感じになります。例外の方は完全にガワだけになってしまったので存在する意味がアレな感じになってしまいましたね……。
月曜日の検知を開始します Mon.MondayException: 精神と身体に深刻なエラーが発生しました 月曜日の検知を終了します。 at Mon.Monday.chcek_date(Monday.java:19) at Mon.Monday.main(Monday.java:12)
まあ、そういったわけで今日も月曜日です。
僕の精神と身体は既にボロボロですが今日も頑張っていきましょう。