Параметры и возврат значения
Метод становится по-настоящему полезным, когда принимает данные и возвращает результат. Данные передают через параметры, а результат отдают оператором return.
Параметры
Параметры перечисляют в скобках объявления: тип и имя, как у переменной. Значение, которое подставляют при вызове, называется аргументом:
void greet(String name) {
IO.println("Привет, " + name + "!");
}
void main() {
greet("Анна");
greet("Олег");
}Результат:
Привет, Анна!
Привет, Олег!Внутри метода параметр name работает как обычная переменная, которая уже получила значение аргумента. Число и типы аргументов должны совпадать с параметрами, иначе программа не скомпилируется.
Несколько параметров
Параметры разделяют запятыми, и у каждого свой тип. Аргументы передают в том же порядке:
void printPrice(String item, double price, int quantity) {
IO.println(item + ": $" + price * quantity);
}
void main() {
printPrice("Капучино", 3.5, 2);
}Результат:
Капучино: $7.0Возврат значения
Вместо void указывают тип результата, а в теле пишут return со значением. Вызов такого метода сам становится значением, его можно сохранить в переменную или сразу использовать:
int square(int n) {
return n * n;
}
void main() {
int result = square(5);
IO.println(result);
IO.println(square(3) + square(4));
}Результат:
25
25return завершает метод
return сразу выходит из метода — код после него не выполняется. Поэтому в методе может быть несколько return в разных ветках:
String grade(int score) {
if (score >= 90) {
return "Отлично";
}
if (score >= 60) {
return "Зачёт";
}
return "Незачёт";
}
void main() {
IO.println(grade(95));
IO.println(grade(40));
}Результат:
Отлично
НезачётВ void методе можно написать return; без значения, чтобы выйти досрочно.
Передача по значению
Java передаёт в метод копию значения аргумента. Если метод меняет параметр примитивного типа, переменная снаружи остаётся прежней:
void addBonus(int points) {
points += 100;
IO.println("Внутри метода: " + points);
}
void main() {
int points = 50;
addBonus(points);
IO.println("Снаружи: " + points);
}Результат:
Внутри метода: 150
Снаружи: 50Чтобы получить новое значение, верните его через return и присвойте: points = addBonus(points).
Частая ошибка
Если метод объявлен с типом результата, return должен сработать на любом пути выполнения. Здесь при отрицательном n метод ничего не вернул бы:
String sign(int n) {
if (n >= 0) {
return "плюс";
}
}
void main() {
IO.println(sign(5));
}Результат:
Main.java:5: error: missing return statement
}
^
1 error
error: compilation failedДобавьте return в конец метода или ветку else, чтобы значение возвращалось всегда.