Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Параметры и возврат значения

Метод становится по-настоящему полезным, когда принимает данные и возвращает результат. Данные передают через параметры, а результат отдают оператором 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
25

return завершает метод

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, чтобы значение возвращалось всегда.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.