Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Возврат результата функции через её параметр (https://javascript.ru/forum/offtopic/8768-vozvrat-rezultata-funkcii-cherez-ejo-parametr.html)

x-yuri 12.04.2010 00:42

Возврат результата функции через её параметр
 
собственно, статья

я думаю
1) что красота - это, конечно, положительно, но если цель - добиться результата, то это не основной фактор
2) и соответственно, бывают случаи, когда функция иногда должна возвращать дополнительную информацию. Например, место действия - php, возвращаем массив, иногда может понадобться дополнительная информация. Чтобы вернуть ее не через параметр, нужно "усложнить" возвращаемое значение. Но это не всегда лучше

а что вы думаете?

Gvozd 12.04.2010 01:01

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

x-yuri 12.04.2010 03:00

речь не об объектах, это уже "усложненный" случай

допустим мы возвращаем массив объектов, и еще иногда нам нужно вернуть общее количество объектов (их больше, чем мы возвращаем). В php (в отличие от javascript) в массив дополнительную информацию добавить не получиться, это не объект. Нужно либо помещать наш массив в еще один массив, либо возвращать коллекцию (объект). С одной стороны, зачем нам возвращать объект, если можно массив. С другой, эта функция, очевидно, более общего плана (а не для конкретного специфического случая), не так уж и сложно объявить еще один класс (может это еще пригодится), так что можно и объект возвращать. Так что я теперь склоняюсь к тому, что красота спасет мир :)

p.s. по поводу "я считаю использование аргумента-ссылки оправдано, когда функция должна изменять уже существующий объект" я подумал, что если функция должна изменять существующий объект, получаемый по ссылке, она должна быть его методом. По-крайней мере, контраргументы мне в голову пока не пришли, кроме "бывает, что функция не может быть методом объекта"

e1f 12.04.2010 16:58

А в 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

Kolyaj 12.04.2010 17:21

Зато у перла грамматики нет :)

e1f 12.04.2010 18:00

Цитата:

Сообщение от Kolyaj (Сообщение 51312)
Зато у перла грамматики нет :)

Ня?

micscr 15.04.2010 20:31

Цитата:

Сообщение от x-yuri (Сообщение 51250)
собственно, статья
а что вы думаете?

да то же самое.
Я думаю тому автору нужно поменьше читать перед сном книги по LISP. Этот метод передачи параметра-переменной -- один из основных. В php например их только два - по ссылке и по значению. Странно смотрится на этом фоне решение возвращать из функции составные структуры. Легче и целесообразней что ли потом их разбирать снаружи?
По сигнатуре определения функции видно, что переменная передается по ссылке - и пользователю функции нет проблем понять что к чему.

x-yuri 15.04.2010 21:41

Цитата:

Сообщение от micscr
Этот метод передачи параметра-переменной -- один из основных. В php например их только два - по ссылке и по значению

один из основных или один из существующих? И речь не о методе передачи по ссылке а о возвращении результата через аргумент. Т.е. аргумент - это результат, т.е. чтобы узнать, что возвращает функция надо в идеале просмотреть код функции на предмет "возвращает ли она что-то через аргументы". Внимание, ключевая цитата:
Цитата:

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

Gvozd 15.04.2010 21:57

preg_match, preg_match_all , desu

x-yuri 15.04.2010 22:22

Цитата:

Сообщение от e1f
Зато у перла грамматики нет

(шутя) вот за это мы его и любим
а вообще, это язык, который произвел на меня наибольшее впечатление (положительное, естественно), хотя я на практике его, можно сказать, не использовал


Часовой пояс GMT +3, время: 21:53.