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

Открыта

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

— Идет.

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

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

Пример
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);
   }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1
Задача
Java Syntax,  2 уровень,  7 лекция
Недоступна
Набираем код Ӏ Java Syntax: 2 уровень, 7 лекция
Java Syntax: 2 уровень, 7 лекция. Иногда думать не надо, строчить надо! Как ни парадоксально звучит, порой пальцы «запоминают» лучше, чем сознание. Вот почему во время обучения в секретном центре JavaRush вы иногда встречаете задания на набор кода. Набирая код, вы привыкаете к синтаксису и зарабатываете немного материи. А ещё — боретесь с ленью.
Комментарии (429)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Ринат3 уровень, Москва
вчера, 19:36
Не подскажете, почему когда я вставляю первую программу ( где 4 строки выводим) в IDEA, мне пишет, что какая-то ошибка ?
Vsevolod4 уровень, Москва
30 июля, 18:52
Создатели курса, вы чё там курите вообще??? (Тот момент, когда Амиго не понимает, а ты всё понимаешь.) Мне кажется, или эта лекция должна была идти ПЕРЕД двумя предыдущими лекциями? Там обсуждали сложные вещи, которые я лично понял, а тут обсуждают функции))) и Амиго "ничего не понимает". Чё-то всё у вас тут задом наперёд 🤣 И функции почему-то объявляются с конца, а не с начала)))
Loser3 уровень
30 июля, 13:36
А почему после if фигурные скобки не стоят?
Ravil Garifzyanov6 уровень
30 июля, 14:43
Если после условия идет только одна команда, то ставить фигурные скобки необязательно. Общий шаблон для if с одной командой: if (условие) команда; Общий шаблон для if с несколькими командами: if (условие) { команда; команда; }
Ilya Britkov5 уровень, Минск
31 июля, 00:32
как ответили выше, так делать можно, но лучше не надо) bad practise, сильно ухудшает читаемость кода.
Владимир3 уровень
30 июля, 04:12
Яндекс клавиатура всё набирается.
Artem8 уровень
24 июля, 15:45
Мне одному кажется странным, что сначала пишется код в методе main, а только после него описываются методы используемые в main? Программа же выполняется сверху вниз.
Vlad Proxorov3 уровень
27 июля, 11:27
Порядок тут совершенно не важен. Сверху вниз выполняется код только в самом методе. Чуть позже, когда появится немного опыта, это будет казаться очень даже логичным.
Ярослав8 уровень
18 июля, 13:33
а что было бы,если бы в методе min не написали бы return m2?
Егор Киселёв4 уровень, Омск
18 июля, 15:29
Метод бы не вернул значение. Смотри. Обращаясь к методу, мы пишем: int m = min(a, b). Т.е. мы объявили переменную m (типа int) и ждём, что получим от метода значение типа int. Передавая методу аргументы a и b, он находит минимальное, присваивает это минимальное значение своей переменной m2 и её возвращает. Собственно, таким образом значение m2 у нас присваивается m, как мы и хотели. И потом уже это число мы можем вывести. Убери return m2 и результаты вычисления в методе бы не вернулись в main и программа бы не работала.
LolaBraum9 уровень, Москва
8 июля, 15:40
Если кто не понял почему задание горит красным, а он все правильно написал, спойлер: когда печатаешь скобку "{" ( или (, ") и появляется такая же автоматически, надо ее (которая появляется автоматически) удалять.
Dmitriy Tsoy6 уровень, Санкт-Петербург
вторник, 01:36
ну, это ж сделано для удобства. Чтоб не запутаться в скобках. Смысл ее удалять, чтобы потом еще раз написать для закрытия?
Виктор3 уровень, Калуга
5 июля, 12:58
В Java в отличии от др языков программирования нет термина функция. Правильно говорить - метод. Использование в уроке термина функция только вносит путаницу.
dvazhdydva7 уровень, Farnborough
28 июня, 09:00
зачем в задании "Набираем код Ӏ Java Syntax: 2 уровень, 7 лекция" после каждой открывающей фигурной скобки надо ставить пробел? Без него задание не валидируется.
Вадим6 уровень, Санкт-Петербург
30 июня, 01:49
Как я понял, для того, чтобы не ставилась закрывающая фигурная скобка автоматом. Чтобы руку набивать. ))
Николай 3 уровень
28 июня, 06:21
Что такое if и esle ?
Akbar Abdumazhitov7 уровень
29 июня, 06:52
if - если else - либо