【初心者向け】JavaとScalaを同時にマスターしよう!Vol. 9

こんにちは!ぐちです。

世の中、こんなはずじゃなかった〜みたいなことってありますよね。笑

心配ごとの8割は実現せずに杞憂に終わり、残りの2割中1割は事前準備を行うことで発生を防げるという話を聞いたことがあります。何の話やねん?!ということですが、プログラムでも「こういうはずだけど、こうじゃなかった〜」ということがあると思います。笑

そこで今回は事前条件のチェックについて学んだ内容をご紹介したいと思います。

Vol.8はこちらからどうぞ。

事前条件チェック

例えば、2つの数値を引数として受け取って、除算を行うメソッドがあった場合に、割る方の数値は0ではなダメなんですが、呼び出し元に委ねていては思わぬ動作につながる可能性があります。

そういった場合に事前条件のチェックを行う構文が用意されています。例によって例のごとくコードを見比べてみましょう!

Java

Javaには事前条件のチェックを行うためのassertという構文が用意されています。使い方は「こうであるべき」という条件をassertに続けて記述するだけです。

下記のコードを確認してみてください。

public class Main extends Parent {
    public static void main(String[] args) {
        System.out.println(div(10, 0));
    }

    public static int div(int a, int b) {
        assert b != 0;
        return (a / b);
    }
}

assertのあとに、「b0でないはず」という条件分を記述しています。b0の場合に、AssertionErrorが発生し、プログラムが終了します。

ただし、asserを記述しただけでは思ったように動作しません。実行オプションに-eaを付与する必要があります。

$ java -ea Main

IntelliJ IDEAのようなIDEの場合は実行設定画面に、実行時オプションを設定する箇所があります。参考までに画像を載せておきますね。

Scala

さて、続きまして、Scalaですが、require()という事前条件のチェック構文が用意されています。使い方はJavaのassertと同様です。さっそくコードを見てみましょう。

object Section3 {
    def div(a: Int, b: Int): Int = {
        require(b != 0)
        a /b
    }

    def main(args: Array[String]): Unit = {
        println(div(10, 0))
}

require()の引数に「b0でないはず」という条件を記述することで、条件に合致しない場合はIllegalArgumentExceptionが発生しプログラムを終了させることができます。

Scalaの場合は実行時にオプションを付与する必要もなく、通常通り実行して事前条件チェックが動作します。

では今回はこの辺で。