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"
. Так функция понимает, кого из родителей возвращать.
Напишите программу, которая выводит на экран имя деда Джоффри по материнской линии. Полное имя Джоффри на английском: Joffrey Baratheon
.