Вызываем методы, возвращаем значение

Открыта

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

— Идет.

— Отлично, тогда я расскажу тебе о вызове функций/методов и возвращаемых ими значениях.

— Команды группируют в функции, чтобы потом можно было исполнять их единым блоком – как одну сложную команду. Для этого надо написать имя функции(метода) и в скобках после него перечислить значения-параметры.

Пример
package com.javarush.lesson2;
public class MethodCall
{
    public static void main(String[] args)
    {
         print4(“I like to move it, move it.);
    }

    public static void print4(String s)
    {
        System.out.println(s);
        System.out.println(s);
        System.out.println(s);
        System.out.println(s);
    }
}

— В примере выше мы написали функцию, которая выводит на экран переданную строку 4 раза. Затем мы вызвали функцию print4 в строке номер 6.

— Когда программа дойдет до выполнения строчки 6, она перескачет на строчку 9 – переменной s будет присвоено значение “I like to move it, move it.”

— Затем будут выполнены строки 11-14, и, наконец, функция завершится и программа продолжит работу со строчки номер 7.

— Ясно.

— В функцию можно не только передавать аргументы (параметры), функция еще может возвращать результат(значение) своей работы. Это делается с помощью ключевого слова return. Вот как это выглядит:

Пример 1.
Вычисление минимума из двух чисел.
public class MethodCall
{
   public static void main(String[] args)
   {
      int a = 5, b = 7;
      int m = min(a, b);
      System.out.println("Minimum is "+ m);
   }

   public static int min(int c, int d)
   {
      int m2;
      if (c < d)
           m2 = c;
      else
           m2 = d;

      return m2;
   }
}
Вот как это работает:
public class MethodCall
{
   public static void main(String[] args)
   {
      int a = 5, b = 7;
      int c = a, d = b;
      int m2;
      if (c < d)
           m2 = c;
      else
           m2 = d;

      int m = m2;
      System.out.println("Minimum is "+ m);
   }
}
4
Задача
Java Syntax,  2 уровень,  7 лекция
Недоступна
Набираем код
Иногда думать не надо, строчить надо! Как ни парадоксально звучит, порой пальцы «запоминают» лучше, чем сознание. Вот почему во время обучения в секретном центре JavaRush вы иногда встречаете задания на набор кода. Набирая код, вы привыкаете к синтаксису и зарабатываете немного материи. А ещё — боретесь с ленью.

— Похоже, начинаю понимать. Слева и справа написан один и тот же код. Просто слева он вынесен в отдельную функцию.

— Функция вычисляет какое-то значение и отдает его тем, кто ее вызвал с помощью команды return. По крайней мере, мне так кажется.

— В принципе верно.

— А что еще за тип void такой?

— Некоторые функции просто что-то делают, но никаких значений не вычисляют и не возвращают, как наш метод main(), например. Для них придуман специальный тип результата – void – пустой тип.

— А почему нельзя было просто ничего не указывать, раз функция ничего не возвращает?

— Вспомни, как объявляется любая переменная – «тип и имя». А функция – «тип, имя и круглые скобки». А имя функции и затем круглые скобки – это вызов функции!

— Т.е. было проще придумать «пустой тип», чем разделять функции на две категории – возвращающие значение и не возвращающие значение?

— Именно! Ты отлично соображаешь, мой мальчик.

— А как возвращать пустой тип?

— Никак. Вот как все это работает: когда Java-машина выполняет команду return, она вычисляет значение выражения, стоящего справа от слова return, сохраняет это значение в специальной части памяти и тут же завершает работу функции. А сохранённое значение использует как результат вызова функции в том месте, где её вызвали. Ты можешь увидеть это на примере вверху.

— Ты говоришь про то место, где int m = min(a,b) трансформировалось в m=m2?

— Да. После вызова функции всё продолжает работать так, как будто вместо неё на этом же месте был написан её результат. Прочитай эту фразу еще раз и посмотри на код последнего примера.

— По-моему это только кажется лёгким, а на самом деле – сложно. Я только чуть-чуть чего-то понял и всё.

— Ничего. С первого раза можно понять только то, что уже знаешь. Чем больше не понятно, тем сильнее ты влез в новую для тебя область. И тем круче будет результат. Со временем всё прояснится.

— Ну, если ты так говоришь, тогда поехали дальше.

Комментарии (187)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
MaksMU3 уровень, Минск
вторник, 17:09
почему Амиго только сейчас задаётся вопросом про тим void?) раньше его это не беспокоило?)
MaksMU3 уровень, Минск
вторник, 16:27
Объясните пожалуйста, вообще в чём смысл вызова второго метода (print4), я ведь мог написать String s = "I like to ...." и потом System.out.println(s); если можно то с каким-нибудь примером, ибо я завис на этих методах и дальше двигаться толком не могу
ununnamed20 уровень, Киев
позавчера, 14:25
Твой код вывел бы 1 раз фразу. Код из примера делает это 4 раза.
Iryna Dorosh-Karakata8 уровень, Киев
11 апреля, 08:53
Немного раздражает, что методы упорно называют функциями
Konstantin Konstantin8 уровень
13 апреля, 09:52
Метод это есть функция, правда она определена внутри класса. Вроде как ошибка, но не совсем)
Яицкий Александр2 уровень, Москва
10 апреля, 16:17
открыл следующую лекцию, в запасе 51 материи) нифига не понимаю, но идем дальше...
Mikhail Petko3 уровень, Санкт-Петербург
8 апреля, 10:27
Грац
Иван Мозгачев8 уровень, Москва
11 марта, 19:36
- 1 к конвенции форматирования кода Изначально прививают к ошибкам( https://www.oracle.com/technetwork/java/codeconventions-150003.pdf
Игорь22 уровень, Минск
15 марта, 23:40
А за ссылочку спасибо. С удовольствием почитал и всем так же рекомендую.
Сергей 2 уровень, Москва
13 апреля, 09:34
Ссылка хороша, осталось только английский выучить)
Sergey7 уровень
9 марта, 14:37
+ 1 шаг к цели "Стать Java-программистом"
Alexandra5 уровень, Москва
19 февраля, 05:17
Ясно,что функция вынесена отдельно,не поняла как переменные стали именно int c = a, d = b; а почему не наоборот с=b; d=a?
Guram Salaev2 уровень
19 февраля, 13:23
Смотри - int m = min(a, b); int min(int c, int d) Первым стоить a, соответственно ему соответствует c. Так же b и d.
Артур3 уровень
1 февраля, 08:15
эммммм)) как закончилась?)) у меня сейчас 49 стоит))
Дмитрий Метельский13 уровень, Минск
31 января, 19:46
А как так материя закончилась?))
Regina40 уровень, Киев
1 февраля, 17:35
Ее необходимо пополнять решением практических задач.