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

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

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

Внимание, вопрос: что возвращает метод System.out.println()?

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

System.out.println() выводит что-то на экран, но это не возврат значения, это просто какое-то действие, которое выполняет метод.

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

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

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

Задание

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

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

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


Советы


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