Побочные эффекты

Вы скорее всего уже заметили (может, подсознательно), что System.out.print — это тоже функция. Она принимает на вход данные любого типа и выводит их на экран.

Внимание, вопрос: что возвращает функция System.out.print?

Ответ: что бы она ни возвращала, это значение никак не используется.

System.out.print выводит что-то на экран, но это не возврат значения, это просто какое-то действие, которое выполняет функция.

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

Если какая-то функция осуществляет вычисление чего-то и при этом выводит какие-то данные на экран, то с точки зрения вычисления результата вывод на экран - побочный эффект. Для print, конечно, этот термин не очень подходит, потому что именно назначение этой функции состоит в выводе на экран, то есть это ее основной эффект, а не побочный; но если мы вспомним, что с точки зрения математики функция это именно выражение результата через аргументы, а не осуществление каких-то действий, то станет понятно, почему принято любые действия функции, которые помимо вычисления результата как-то меняют что-то в программе (кроме переменных в самой функции), называть побочными эффектами. К таким действиям относятся любые сетевые взаимодействия, взаимодействие с файловой системой (чтение и запись файлов), вывод информации на экран или печать на принтере и так далее. Понимание принципов работы с побочными эффектами очень сильно влияет на стиль программирования и способность строить качественные программы. Эта тема полностью раскроется в курсах на Хекслете.

Побочные эффекты — один из основных источников проблем и ошибок в программных системах. Код с побочными эффектами сложнее в тестировании и менее надежен, чем код без них. При этом без побочных эффектов программирование не имеет смысла. Без них было бы невозможно получить результат работы программы (записать в базу, вывести на экран, отправить по сети и так далее).

Задание

Это задание не связано напрямую с уроком. Но выполнить его без создания переменных — важный шаг в вашем профессиональном развитии.

Выведите на экран имя матери Дайнерис Таргариен (“Daenerys Targaryen”), используя функцию Functions.parentFor без создания переменных.

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


Советы


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

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