Выходные аргументы из книги Р.Мартина - Чистый код

SergXP

Новичок
Очень нужна помощь профи)

Читаю книгу Роберта Мартина - Чистый код.

Выходные аргументы
Аргументы естественным образом интерпретируются как входные данные
функции. Каждый, кто занимался программированием более нескольких лет,
наверняка сталкивался с необходимостью дополнительной проверки аргументов, которые
на самом деле оказывались выходными, а не входными. Пример:
appendFooter(s);
Присоединяет ли эта функция s в качестве завершающего блока к чему-то
другому? Или она присоединяет какой-то завершающий блок к s? Является ли s
входным или выходным аргументом? Конечно, можно посмотреть на сигнатуру
функции и получить ответ:
public void appendFooter(StringBuffer report)
Вопрос снимается, но только после проверки объявления. Все, что заставляет
обращаться к сигнатуре функции, нарушает естественный ритм чтения кода.
Подобных «повторных заходов» следует избегать.
До наступления эпохи объектно-ориентированного программирования без
выходных аргументов иногда действительно не удавалось обойтись. Но в ОО-языках
эта проблема в целом исчезла, потому что сама функция может вызываться для
выходного аргумента. Иначе говоря, функцию appendFooter лучше вызывать
в виде
report.appendFooter();
В общем случае выходных аргументов следует избегать. Если ваша функция
должна изменять чье-то состояние, пусть она изменяет состояние своего объекта-
владельца.
Пытаюсь вникнуть и набросать классы на php, но похоже я не совсем понял о чем он говорит(
Кто-нибудь может объяснить и на примере показать, о чем он говорит?

Спасибо!
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Кто-нибудь может объяснить и на примере показать, о чем он говорит?
выходные агрументы функции - это аргументы, изменившие свои значения в результате работы функции. В пхп это реализовано путем передачи переменной по ссылке в функцию и не особо распространено - новички не умеют, опытные - не связываются без нужды
 

riff

Новичок
Формулировка флоппика точнее книжной.

Кто-нибудь может объяснить и на примере показать, о чем он говорит?
Тебе нужно получать информацию от функции, чаще всего она возвращается через return.
Иногда надо получать доп.информацию об обработанных данных, return занят, куда их деть (?). Например надо текст заменить, функция вернёт(return) новую строку, а тебе захочется знать сколько замен произведено - вот функция и вернёт их в "выходной параметр".

Когда же речь идёт о более масштабных операциях
До наступления эпохи объектно-ориентированного программирования без...
Можно, например, создать функцию "basket", которая должна обработать товар в корзине, вернуть список товара, стоимость, ошибки, ...
Можно добавить кучу выходных параметров.
Можно разделить её на кучку маленьких функций,
а можно создать объект "class Basket" объединить эту кучу под одним крылом и вызывать его функции "$basket->updateProducts(); getProducts(); getCount(), ..." и вызов этих функций будет либо изменять состояние владельца ($basket), ли возвращать информацию по нему.
 
Последнее редактирование:

SergXP

Новичок
аа, все оказывается намного проще, чем думал!
Спасибо большое!
Теперь стало понятно) Да, эту книгу нужно очень внимательно читать)
 

HraKK

Мудак
Команда форума
Нужно начинать не с этой книги, книга ничего тебе не даст. Гарантирую. Книга, просто замечательная, но не для начала.

Чтоб не быть голословным я бы начал с банды(Да я знаю что это просто справочник), потом попытался бы с помощью этой азбуки сделать какое-то конечное РАБОТАЮЩЕЕ приложение небольшое, потом по книге Фаулера Рефакторинг - отрефакторил бы, на уровне своего текущего понимания, потом повторил бы этот курс не менее 3-5, с разными приложениями, а потом уже подключал бы Совершенный код Макконнелли и шаблонны Фаулера
 
Последнее редактирование:

SergXP

Новичок
HraKK, с книгой Фаулера тоже знакомился.
Стараюсь писать код сразу правильно, но все равно, после проверки рефакторю.
Единственное, в чем проблема, сложновато быстро и правильно применять шаблоны проектирования.
Но думаю, нужен опыт, и будет результат)
 
Сверху