JavaRush/Курсы/Java Syntax/Вызываем методы, возвращаем значение

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

Открыта

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

— Идет.

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

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

Пример
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?

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

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

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

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

Комментарии (521)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Светлана
Уровень 3
1 декабря 2024, 18:04
Вот интересно, почему лекция здесь, а задания на эту тему давались раньше?!
vlafriday
Уровень 1
11 февраля 2024, 06:23
11.02.2024 check, мой уровень 2
Антон Головин
Уровень 11
13 декабря 2022, 12:08
С этого момента мозг начал подкипать)
15 августа 2022, 14:14
Скажите пожалуйста, функция и метод это одно и тоже? До этого во всех лекций был задействован метод, сейчас функции, немного сбивает с толку
Rexalifet
Уровень 23
17 августа 2022, 10:08
Да. "В джаве функции ещё называются методами"
mmors
Уровень 4
10 декабря 2022, 17:40
Метод - это функция внутри класса
Данил
Уровень 13
2 июня 2022, 10:44
1)В примере, что слева - я так понимаю, что мы расписываем в методе int min то, что там будет происходить? То есть компилятор доходит до строки 6 и такой: хм...а что это за "min" такое? Пойду ка поищу описание... Ага, в строке 10. Ясненько... Но откуда он знает, что int c и int d = 5 и 7 соответственно? Нигде же нет знака равенства по типу int c = a, ind d = b... 2) Пример, который справа....Зачем присваивать int m = m2? Зачем вообще вводить м? Почему нельзя просто написать System.out.println(m2);?
Илья
Уровень 9
8 июля 2023, 08:36
1) При вызове функции параметры автоматически передаются тем, которые описаны в функции. 2) Справа просто развернули пример слева так, как по сути идёт череда операций
Строю Дома
Уровень 3
26 февраля 2022, 18:41
кто подскажет, зачем пропускать 5 и 17 строчки?
Dinislam Aminev
Уровень 16
Expert
23 января 2023, 11:38
Для удобочитаемости кода
Averluck
Уровень 4
30 декабря 2021, 20:14
Странно, я понял тему, даже в книге прочитал немного, но задание выполнить не могу - я написал код и окно всё равно красным подсвечено, будто ошибка. Уже 4 раза перепечатал, как же так?!
Eva Smirnova
Уровень 5
4 января 2022, 16:44
Пробелы проверьте все. У меня сработало после добавления пробела после is в "Minimum is" 😅
Averluck
Уровень 4
17 января 2022, 20:35
не, ну это жесть какая-то) Работаю в этой отрасли давно, внимательный, и вот на таком споткнуться!
Георгий
Уровень 5
28 апреля 2022, 21:12
а меня подводил интерфейс, призванный облегчать написание кода - речь про закрывающие скобки. когда печатаешь одну, к примеру "(", то автоматом проставляется ")", а на это задача ругается и не даёт принять задачу, пока не напечатаешь символ в символ, удаляя вот такую помощь, что бы поле "не краснело"
Антон
Уровень 2
7 октября 2021, 15:03
Нииичего не понял.
Rolik
Уровень 41
5 октября 2021, 15:42
Второй пример красив. 👍
Namig Team Lead
21 июня 2021, 22:14
В примере выше мы написали функцию, которая выводит на экран переданную строку 4 раза. Затем мы вызвали функцию print4 в строке номер 6. Буду рад если получу от кого то ответ на вопрос: print4 что означает? разве можно так писать?
Alex Fed
Уровень 2
2 июля 2021, 10:36
Не понимаю, что вас смущает.
aleksdenni
Уровень 37
10 июля 2021, 06:25
print4 , название метода.
2 августа 2021, 09:49
Сначала создается метод, который называется print4 В скобочках мы указываем, какие переменные в методе участвуют. в Нашем случае это переменная строкового типа s (String s) Затем мы указываем, что хотим. чтобы в методе main вызывалась функция print4, а значение String s присваиваем = "I like to move it, move it."
Egor Kurilko
Уровень 7
1 октября 2021, 20:19
Согласен. Это просто название метода(функции). Правила не запрещают так называть (по моему).