アツログ

つけめんは、ひやもり派のあつもりです。おすすめのガジェットだったり、食だったり、プログラミングなどの雑記をあげていきます

アツログ

【Java】メソッドの引数にデフォルト値が設定できなくて、PHPの自由度に感激したが、Javaでやるならオーバーロードしかない???

あとで読む

f:id:AshG:20180116201919j:plain

みなさま、おはこんばちは。

先月からJavaをいじり始めたあつもりです。

今回は久々のプログラミング記事

というものの、私はPHPをメインに5年間エンジニア活動してまして、先月から初めてJavaに触れています。

そこで、あぁJavaで出来ないのかと思ったことがあり、今回記事にした次第。

スーパーハカーの僕からしたら、大した事なかったんですけどね(白目

【Java】メソッドの引数にデフォルト値設定できないので、オーバーロードでなんとかした

PHPでのデフォルト値の設定方法

たとえば、以下のような形になります。

<?php
public class CalcClass {
    public function calcSum(int $a, int $b){
        return calcMethod($a, $b);
    }

    public function calcDiff(int $a, int $b){
        return calcMethod($a, $b, "difference");
    }

    public function calcPro(int $a, int $b){
        return calcMethod($a, $b, "product");
    }

    public function calcQuo(int $a, int $b){
        return calcMethod($a, $b, "quotient");
    }

    private function calcMethod(int $a, int $b, String $sdpq = "sum"){
        switch ($sdqp){
            case "sum" :
                return $a + $b;
            case "difference" :
                return $a - $b;
            case "product" :
                return $a * $b;
            case "quotient" :
                return $a / $b;
            default :
                return $a + $b;
        }
    }
}
?>

calcMethodの第3引数である$sdpqのデフォルト値を"sum"という文字列で設定してます。

ので、calcSumがcalcMethodを呼び出すときは、第3引数を設定しなくても、和が返却されます。

差積商を出したいときは、calcDiffから下のメソッドのように、calcMethodを呼び出す時に、どの計算方法なのかを第3引数で設定してます。

Javaでのデフォルト値の設定方法

じゃぁJavaでもPHPと同じことをやれるかというと、やれないわけです。

ので、やるならcalcMethodを二つ定義します。

public class calcClass {
    public int calcSum(int a, int b){
        return calcMethod(a, b);
    }

    public int calcDiff(int a, int b){
        return calcMethod(a, b, "difference");
    }

    public int calcPro(int a, int b){
        return calcMethod(a, b, "product");
    }

    public int calcQuo(int a, int b){
        return calcMethod(a, b, "quotient");
    }

    private int calcMethod(int a, int b){
        return calcMethod(a, b, "sum");
    }

    private int calcMethod(int a, int b, String sdpq){
        switch (sdpq) {
            case "sum" :
                return a + b;
            case "difference" :
                return a - b;
            case "product" :
                return a * b;
            case "quotient" :
                return a / b;
            default :
                return a + b;
        }
    }
}

ひとつめのcalcMethodは第2引数までしかなく、その中でさらに、第3引数まであるcalcMethodを呼び出し、"sum"を渡しています。

これで、calcSumは第2引数までしかないcalcMethodを呼び出せば、デフォルト値"sum"になるので、結果和が返ってくるようになります。

まとめ

上記コードはコンパイルチェックしてないので、いろいろとエラーが出る可能性があります。

が、大体こんな感じじゃないですかね(適当

Javaでやると縦に長くなっていくのが嫌だけどまぁJavaならこんなもんかという感じもします。

C#もJavaと同じですね。

Javaはまだいろいろと把握できてませんが、まぁなんとかなるでしょう!

そんな僕は、コピペプログラマー