1. Оператор return

Думаєте, ви вже вивчили все про методи в Java? Де ж пак, ви ще й половини не знаєте.

Почнімо з чогось простого. Наприклад, у Java є команда (оператор) return, який дає змогу миттєво завершити виконання методу, в якому його викликано. Зовнішній вигляд команди:

return;

І все: лише одне слово return і крапка з комою. Щойно програма виконає цю команду, робота поточного методу відразу завершиться, і продовжиться робота методу, звідки його було викликано.

Якщо return викликати в методі main, метод main на цьому завершиться, а разом із ним — вся програма.

Приклад:

class Solution
{
   public static void fill(int[] data, int from, int to, int value)
   {


     if (from < 0 || to > data.length)
       return;

     for (int i = from; i < to; i++)
     {
       data[i] = value;
     }
   }

   public static void main(String[] args)
   {
     int[] months = {1, 2, 3, 4, 5, 6, 7, 8 ,9, 10, 11, 12};
     fill(months, 2, 10, 8);
   }
}


Метод fill заповнює частину переданого масиву значенням value.
Частина масиву визначається індексами from і to.
Якщо from менший за 0 або to більший за довжину масиву, метод відразу завершується.

У наведеній вище програмі є метод fill, який заповнює переданий у нього масив значенням value, причому заповнює не весь масив, а його частину, задану індексами from і to.

На початку методу fill виконується перевірка, чи коректні значення в нього передано. Якщо індекс from менший за 0 або індекс to більший за довжину масиву, то метод fill на цьому завершується (викликає команду return).

Корисна річ, цей оператор return: він є майже в кожному методі в Java, і от чому.



2. Функції з результатом void

Пам'ятаєте, ми колись з'ясували, що є команди, а є вирази? І вираз, на відміну від команди, має значення, яке можна десь використовувати.

Отож у Java методи можуть мати значення. І це дуже добра новина: методи можуть не просто щось робити залежно від параметрів, але й, приміром, обчислити що-небудь і повернути результат обчислення.

Ви, до речі, з такими методами вже стикалися:

double delta = Math.abs(d1 - d2);
Метод abs() повертає значення типу double
Scanner console = new Scanner(System.in);
int x = console.nextInt();

Метод nextInt() повертає значення типу int
String str = "Привіт";
String s2 = str.toUpperCase();

Метод toUpperCase() повертає значення типу String
int[] data = {1, 4, 5, 6, 7, 8, 11};
int[] array = Arrays.copyOf(data, 4);

Метод copyOf() повертає значення типу int[]

Кожен метод може повернути лише одне значення одного наперед заданого типу. Тип повернення значення визначається під час оголошення методу:

public static тип ім'я(параметри)
{
   код методу
}

де ім'я — це ім'я методу, параметри — список параметрів методу, а тип — тип результату, що повертається методом.

Для методів, які нічого не повертають, є спеціальний тип-заглушка — void.

Пишете свій метод і не хочете нічого повертати в метод, звідки здійснюється виклик? Просто оголосіть тип методу void, і проблему вирішено. Таких методів у Java теж багато.


3. Повернення результату

Як оголошувати метод із результатом обчислення/роботи ми щойно розібралися, а як же цей результат повернути з методу?

Для цього нам знову стане в пригоді оператор return. Передавання результату з методу матиме такий вигляд:

return значення;

де return — це оператор, який негайно завершить роботу методу. А значення — це значення, що метод має повернути як результат у той метод, звідки відбувся виклик. Тип значення має збігатися з типом, зазначеним під час оголошення методу.

Приклад 1. Метод знаходить менше з двох чисел:

int min(int a, int b)
{
   if (a < b)
     return a;
   else
     return b;
}
Метод повертає менше з двох чисел.

Якщо a < b
повернути a
Інакше —
повернути b

Приклад 2. Метод дублює переданий у нього рядок n разів:

String multiple(String str, int times)
{
   String result = "";
   for (int i = 0; i < times; i++)
     result = result + " "+ str;
   return result;
}
Метод отримує два параметри — рядок і кількість його повторень.
Створюється порожній рядок для майбутнього результату.

У циклі times разів
до рядка result додаються пробіл і рядок str.
Як результат метод повертає змінну result.

Приклад 3: Метод знаходить більше з двох чисел за допомогою тернарного оператора:

int max(int a, int b)
{
   return (a > b ? a : b);
}
Метод повертає більше з двох чисел.

Повернути (якщо a > b, то a, інакше — b)