Вызов функций в аргументах функций

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

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

Мы вызываем функцию Math.min и передаем ей два аргумента:

  • число 1

  • результат вызова функции Math.min с аргументами 2 и 3

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

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

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

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

Задание

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

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


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

Упражнение доступно только авторизованным пользователям.

Пожалуйста, авторизуйтесь с помощью учётной записи GitHub, это необходимо для отслеживания прогресса выполнения уроков. Если у вас ещё нет учётной записи, то сейчас самое время создать аккаунт на GitHub.