複数の引数を取るメソッド
材料が 1 つでは、答えが出ない
引数が 1 つのメソッドは、渡された値をそのまま加工する処理には向いています。ただ、現実の計算はたいてい 2 つ以上の情報が揃ってはじめて答えが出ます。時刻を分に直すなら「時」と「分」、送料を出すなら「重さ」と「地域」というように、材料が 1 つで済むほうが珍しいくらいです。
引数は , で区切って何個でも並べられます。
Java
public static int toMinutes(int hours, int minutes) {
return hours * 60 + minutes;
}toMinutes(2, 30) と呼べば 150 が返ります。呼ぶ側も同じように、値を , で区切って並べるだけです。
型は 1 つずつ書く
最初につまずくのは型の書き方です。同じ int が 2 つ続くからといって、まとめることはできません。
Java
// これは通らない
public static int toMinutes(int hours, minutes) {Java の引数リストは「型 名前」のペアの繰り返しで、, のたびに型から書き直します。省くと <identifier> expected のような、原因の読み取りにくいエラーが出ます。面倒に感じても、1 つにつき 1 つ型を書くのが決まりです。
順番でしか結びつかない
Java の引数は 書いた位置 で対応します。1 番目に渡した値が 1 番目の引数に、2 番目が 2 番目に入ります。Python のように toMinutes(minutes=30, hours=2) と名前を指定して渡す書き方は用意されていません。
順番を取り違えても、型さえ合っていればコンパイルは通ります。止まらないぶん気づきにくく、答えだけが静かに変わります。
Java
public static int divide(int a, int b) {
return a / b;
}divide(10, 2) は 5 ですが、divide(2, 10) は 0 です。渡した数は同じでも、順番が違えば別の答えになります。
だからこそ、引数の名前は呼ぶ側への説明書きになります。send(String a, String b) では、どちらが差出人なのかを毎回定義まで見に行くことになります。String from, String to と書いてあれば、呼ぶ側はもう迷いません。
入れ替えても答えが変わらない計算だと、順序の取り違えはテストをすり抜けてしまいます。定義と呼び出しを並べて、同じ順に読めるかを確かめる癖をつけておくと安心です。
やってみよう
今回は、長方形の幅と高さを受け取って面積を返すメソッドを書きます。引数は int が 2 つ、戻り値も int です。
書けたら、幅か高さに 0 を渡したときにどうなるかも確かめてください。特別な分岐を足していないのに 0 が返るはずで、その理由を説明できれば、引数がそのまま計算に流れ込んでいる感覚がつかめています。
要件
- クラス名は
Solution、メソッド名はrectangleArea、引数はint widthとint heightの 2 つにすること - メソッドの戻り値の型は
intで、width * heightの計算結果を返すこと - 引数
widthまたはheightが0の場合、戻り値は0になること
入出力例
rectangleArea(3, 4) → 12
rectangleArea(5, 5) → 25
rectangleArea(0, 10) → 0
rectangleArea(7, 1) → 7
rectangleArea(12, 8) → 96