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

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

Java Syntax
2 уровень , 7 лекция
Открыта

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

— Идет.

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

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

Пример
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
Вот интересно, почему лекция здесь, а задания на эту тему давались раньше?!
vlafriday Уровень 1
11 февраля 2024
11.02.2024 check, мой уровень 2
Антон Головин Уровень 11
13 декабря 2022
С этого момента мозг начал подкипать)
15 августа 2022
Скажите пожалуйста, функция и метод это одно и тоже? До этого во всех лекций был задействован метод, сейчас функции, немного сбивает с толку
Rexalifet Уровень 23
17 августа 2022
Да. "В джаве функции ещё называются методами"
mmors Уровень 4
10 декабря 2022
Метод - это функция внутри класса
Данил Уровень 13
2 июня 2022
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
1) При вызове функции параметры автоматически передаются тем, которые описаны в функции. 2) Справа просто развернули пример слева так, как по сути идёт череда операций
Строю Дома Уровень 3
26 февраля 2022
кто подскажет, зачем пропускать 5 и 17 строчки?
Dinislam Aminev Уровень 16 Expert
23 января 2023
Для удобочитаемости кода
Averluck Уровень 4
30 декабря 2021
Странно, я понял тему, даже в книге прочитал немного, но задание выполнить не могу - я написал код и окно всё равно красным подсвечено, будто ошибка. Уже 4 раза перепечатал, как же так?!
Eva Smirnova Уровень 5
4 января 2022
Пробелы проверьте все. У меня сработало после добавления пробела после is в "Minimum is" 😅
Averluck Уровень 4
17 января 2022
не, ну это жесть какая-то) Работаю в этой отрасли давно, внимательный, и вот на таком споткнуться!
Георгий Уровень 5
28 апреля 2022
а меня подводил интерфейс, призванный облегчать написание кода - речь про закрывающие скобки. когда печатаешь одну, к примеру "(", то автоматом проставляется ")", а на это задача ругается и не даёт принять задачу, пока не напечатаешь символ в символ, удаляя вот такую помощь, что бы поле "не краснело"
Антон Уровень 2
7 октября 2021
Нииичего не понял.
Rolik Уровень 41
5 октября 2021
Второй пример красив. 👍
Namig Уровень 3
21 июня 2021
В примере выше мы написали функцию, которая выводит на экран переданную строку 4 раза. Затем мы вызвали функцию print4 в строке номер 6. Буду рад если получу от кого то ответ на вопрос: print4 что означает? разве можно так писать?
Alex Fed Уровень 9
2 июля 2021
Не понимаю, что вас смущает.
aleksdenni Уровень 37
10 июля 2021
print4 , название метода.
Щербаков Артем Уровень 5
2 августа 2021
Сначала создается метод, который называется print4 В скобочках мы указываем, какие переменные в методе участвуют. в Нашем случае это переменная строкового типа s (String s) Затем мы указываем, что хотим. чтобы в методе main вызывалась функция print4, а значение String s присваиваем = "I like to move it, move it."
Egor Kurilko Уровень 7
1 октября 2021
Согласен. Это просто название метода(функции). Правила не запрещают так называть (по моему).