Возврат результата функции через её параметр
собственно, статья
я думаю 1) что красота - это, конечно, положительно, но если цель - добиться результата, то это не основной фактор 2) и соответственно, бывают случаи, когда функция иногда должна возвращать дополнительную информацию. Например, место действия - php, возвращаем массив, иногда может понадобться дополнительная информация. Чтобы вернуть ее не через параметр, нужно "усложнить" возвращаемое значение. Но это не всегда лучше а что вы думаете? |
я считаю использование аргумента-ссылки оправдано, когда функция должна изменять уже существующий объект
для создания новых объектов следует использовать возвращение результата а не аргумент |
речь не об объектах, это уже "усложненный" случай
допустим мы возвращаем массив объектов, и еще иногда нам нужно вернуть общее количество объектов (их больше, чем мы возвращаем). В php (в отличие от javascript) в массив дополнительную информацию добавить не получиться, это не объект. Нужно либо помещать наш массив в еще один массив, либо возвращать коллекцию (объект). С одной стороны, зачем нам возвращать объект, если можно массив. С другой, эта функция, очевидно, более общего плана (а не для конкретного специфического случая), не так уж и сложно объявить еще один класс (может это еще пригодится), так что можно и объект возвращать. Так что я теперь склоняюсь к тому, что красота спасет мир :) p.s. по поводу "я считаю использование аргумента-ссылки оправдано, когда функция должна изменять уже существующий объект" я подумал, что если функция должна изменять существующий объект, получаемый по ссылке, она должна быть его методом. По-крайней мере, контраргументы мне в голову пока не пришли, кроме "бывает, что функция не может быть методом объекта" |
А в Perl можно делать контекстно-зависимый вызов функции :p
А в PHP нельзя :( Разве что эмулировать, указывая явно: function context_driven($params, $return_total=0) { return $return_total ? array( $params, count($params) ) : $params; } $p = context_driven(array(1,2,3)); // [1,2,3] list($p, $t) = context_driven(array(1,2,3), 1); // [1,2,3], 3 |
Зато у перла грамматики нет :)
|
Цитата:
|
Цитата:
Я думаю тому автору нужно поменьше читать перед сном книги по LISP. Этот метод передачи параметра-переменной -- один из основных. В php например их только два - по ссылке и по значению. Странно смотрится на этом фоне решение возвращать из функции составные структуры. Легче и целесообразней что ли потом их разбирать снаружи? По сигнатуре определения функции видно, что переменная передается по ссылке - и пользователю функции нет проблем понять что к чему. |
Цитата:
Цитата:
|
preg_match, preg_match_all , desu
|
Цитата:
а вообще, это язык, который произвел на меня наибольшее впечатление (положительное, естественно), хотя я на практике его, можно сказать, не использовал |
Часовой пояс GMT +3, время: 21:35. |