【Java】メソッドの引数にデフォルト値が設定できなくて、PHPの自由度に感激したが、Javaでやるならオーバーロードしかない???
みなさま、おはこんばちは。
先月から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はまだいろいろと把握できてませんが、まぁなんとかなるでしょう!
そんな僕は、コピペプログラマー