Comments 21
Программа на Руби, которая читает из стандартного ввода числа, перечисленные через пробел, и выводит на стандартный вывод в обратном порядке только четные из них. Как видите, здесь широко использована методика, которую вы описываете :)
#!/usr/bin/ruby
puts gets.chomp.gsub(/(|\d+)(1|3|5|7|9)( |$)/, '').split(' ').reverse.join(' ')
вы не написали чем эта функция плоха, а написали лиш один и очень маленький пример, который может понадобиться 1 раз в стопицот раз применений. Всякая функция должна возвращать то, или не возвращать ничего, что ей положено по смыслу. Просто так возвращать объект тоже глупо.
Кто сказал, что объект возвращается просто так? Он возвращается для того, чтобы была возможность минимизировать код и сделать его нагляднее (за счет построения логической цепочки действий).
Допускаю, что функции, которым по смыслу ничего не нужно возвращать, существуют. Хотя очень в этом сомневаюсь, любая функция что-то да возвращает, другой вопрос каким способом (например используя механизм исключений). Поэтому любая функция которая ничего не возвращает - плоха, так как нельзя определить каков результат ее выполнения!
Допускаю, что функции, которым по смыслу ничего не нужно возвращать, существуют. Хотя очень в этом сомневаюсь, любая функция что-то да возвращает, другой вопрос каким способом (например используя механизм исключений). Поэтому любая функция которая ничего не возвращает - плоха, так как нельзя определить каков результат ее выполнения!
Любая функция которая ничего не возвращает - процедура. И вы только что все процедуры назвали плохими... Ну бывает. Вы вероятно написали пост под впечатлением - http://community.livejournal.com/ru_php/…. Но и там уже объяснили, что вовсе не обязательно.
Еще раз говорю - в вашем конкретном примере - да, зашибись конечно вернуть объект, что бы в строку написать несколько действий, но это ОЧЕНЬ частный случай.
Еще раз говорю - в вашем конкретном примере - да, зашибись конечно вернуть объект, что бы в строку написать несколько действий, но это ОЧЕНЬ частный случай.
Можете привести парочку примеров, где оправдано использовать процедуру, а не функцию.
Только обратите внимание, что речь идет о объектно ориентированном подходе, в виду этого хотелось бы особое ударение сделать на целесообразности ничего не вернуть, нежели вернуть сам объект. И собственно почему!?
Всегда думал, что как раз таки процедуры - частный случай!
Только обратите внимание, что речь идет о объектно ориентированном подходе, в виду этого хотелось бы особое ударение сделать на целесообразности ничего не вернуть, нежели вернуть сам объект. И собственно почему!?
Всегда думал, что как раз таки процедуры - частный случай!
Если нет смысле что-то возвращать, то целесообразнее как раз не писать строчку с "return this" ибо это увеличивает код = усложняет понимание.
А в каких случая смысла то нет? Я честно говоря сижу уже час пытаюсь найти такую ситуацию. Некоторые примеры приходят в голову, но получается как то искуственно, специально притянуто за уши.
Я пишу на C#, где тоже можно возвращать объект. И возвращаю - ни часто, ни редко.
Но просто так везде добавлять возврат объекта, если этого не нужно тоже считаю лишним. Я потом вернусь к этому методу, и буду лишний раз думать зачем я возвращаю объект, если нигде его не использую.
А если я просто хочу показать сообщение юзеру или написать "Hello, world!"? Вернуть класс где объявлен метод, или объект окна с сообщением, или помянутую строку? Зачем?
А вот если реально понадобится - сделать из процедуры функцию не сложно :)
Но просто так везде добавлять возврат объекта, если этого не нужно тоже считаю лишним. Я потом вернусь к этому методу, и буду лишний раз думать зачем я возвращаю объект, если нигде его не использую.
А если я просто хочу показать сообщение юзеру или написать "Hello, world!"? Вернуть класс где объявлен метод, или объект окна с сообщением, или помянутую строку? Зачем?
А вот если реально понадобится - сделать из процедуры функцию не сложно :)
Угу... Если выдернуть одну функцию из контекста, то всегда можно сказать, мол тут ничего возвращать не надо. А если посмотреть в динамике? У вас много классов с единственным методом?
Ни одного. И если все будут возвращать объект этого класса вместо полезных вещей или void'а - я боюсь буду путаться ничего взамен не получив.
Еще я задумался - возвращая объект(а фактически ссылку) я продлеваю его время жизни. Надо смотреть по внешнему методу - не будет ли он висеть в памяти, когда уже не нужен? Зачем лишний раз плодить ссылки?
И о рекурсивных функциях думаю...
В общем: не вижу пользы & вижу доп. путаницу => не буду использовать (имхо)
Еще я задумался - возвращая объект(а фактически ссылку) я продлеваю его время жизни. Надо смотреть по внешнему методу - не будет ли он висеть в памяти, когда уже не нужен? Зачем лишний раз плодить ссылки?
И о рекурсивных функциях думаю...
В общем: не вижу пользы & вижу доп. путаницу => не буду использовать (имхо)
То что подходит мне, не подходит Вам, и это абсолютно нормально. Давайте прекратим этот спор!
Миллион примеров: Всякие колбеки, ламбды, хотя бы
Самое элегантное, на мой взгляд, решение существует в Perl: функция wantarray и расширение Want (http://search.cpan.org/dist/Want/Want.pm) позволяют узнать, в каком контексте вызывается функция - и вернуть адекватное этому контексту значение. Если метод вызывается в цепочке вызовов a()->b(), то из a() имеет смысл вернуть обьект, если @result = a(), то массив и т.д. Если результат вызова никак не используется (a(); b();), то можно ничего и не возвращать (сэкономить память и немного процессорного времени).
Однако.
В языках, в которых нет отдельного синтаксиса для процедур и для функций, всё просто.
Если функция ничего не возвращает, можно считать её процедурой.
В языках, в которых нет отдельного синтаксиса для процедур и для функций, всё просто.
Если функция ничего не возвращает, можно считать её процедурой.
Насмотрелись всякой ереси и вперед восхвалять. Это - БАНАЛЬНО. Этот подход называется curry, а именно, prototype curry.
Вы недостаточно опытны и слишком импрессивны. Не надо собирать всякую билеберду и пытаться рассказать о ней людям.
P.S. Jquery тут не при чем.
Вы недостаточно опытны и слишком импрессивны. Не надо собирать всякую билеберду и пытаться рассказать о ней людям.
P.S. Jquery тут не при чем.
Sign up to leave a comment.
Что должна возвращать функция