Бесплатный курс по java. Зарегистрируйтесь для отслеживания прогресса →

Java: Вызов методов в аргументах методов

Продолжаем тему выражений. Как вы помните, вызов метода — выражение, а значит мы можем положить вызов метода в вызов метода (…в вызов метода в вызов метода в вызов… а-а-а!).

var result = Math.min(1, Math.min(2, 3)); // 1

Мы вызываем метод Math.min() и передаем ему два аргумента:

  • число 1

  • результат вызова метода Math.min() с аргументами 2 и 3

Можно сделать то же самое, но с промежуточными шагами:

var secondNumber = Math.min(2, 3); // 2
var result = Math.min(1, secondNumber); // 1

Какой вариант предпочтительнее? Если вычисление совсем простое и неглубокое (не больше одного вложения), то можно смело вкладывать вызов в вызов. В остальных ситуациях предпочтительно разбивать вызовы на промежуточные вычисления.

Причины все те же. Чтение такого кода значительно легче. Во-первых, промежуточные переменные своими названиями отражают суть операций. Во-вторых, такой код легче отлаживать, а промежуточные данные проще исследовать. И в-третьих, глубокие вложенные вызовы сложно читать.

Задание

Для построения генеалогического дерева семьи Старков Сэм написал метод Functions.parentFor(), который возвращает имя родителя, если передать ему первым параметром полное имя ребенка. Вторым параметром метод принимает строку "father" или "mother". Так метод понимает, кого из родителей возвращать.

var mother = Functions.parentFor("Joffrey Baratheon", "mother");
System.out.println(mother); // => Cersei Lannister

Напишите программу, которая выводит на экран имя деда Джоффри по материнской линии. Полное имя Джоффри на английском: Joffrey Baratheon.


Нашли ошибку? Есть что добавить? Пулреквесты приветствуются https://github.com/hexlet-basics
Если вы столкнулись с трудностями и не знаете, что делать, задайте вопрос в нашем большом и дружном сообществе