| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Философия программирования > Функция должна возвращать значение? |
| Автор: Шухарт 25.10.2011, 21:59 |
| Здравствуйте! Такой теоретический вопрос. Любая функция (метод) должна возвращать значение? Возможно вопрос наивный, но т.к. по образованию не связан с IT, хочу уточнить. С опытом прихожу к выводу что да, любая функция должна возвращать хоть что-то, это как правило хорошего тона, позволяет часто сделать выполнение алгоритма логичней и манипулировать ходом выполнения удобнее. Может в некоторых языках так и есть? Заранее благодарен. Так же не буду рад какой-нибудь литературе общего толка которая бы навела порядок в голове относительно подобных вопросов, а то практических знаний и опыта хватает, а базовые теоретические хромают. PS: про Кнута в 3 томах , но пока слишком фундаментально для меня. |
| Автор: newbee 25.10.2011, 22:12 |
| Да, во многих языках не только функция как таковая, а вообще любая конструкция, возвращает некоторое значение. Это чертовскиудобно. Для примеров и понимания поковыряй всякие лиспы, в частности книгу SICP. |
| Автор: Шухарт 25.10.2011, 22:17 |
| newbee, спасибо за наводку на SICP. |
| Автор: Данкинг 25.10.2011, 23:04 |
| Если функция не возвращает значения - то это процедура. |
| Автор: htoit 28.10.2011, 19:26 | ||
У отдельной вызываемой структурной единицы в программировании различают возвращаемое значение и сторонний эффект (разные изменения в памяти компьютера). Присоединяюсь к уже сказанному: если есть возвращаемое значение -- это функция, если нет -- процедура. хороший терминологический on-line словарь компьютерных терминов: http://foldoc.org/ |
| Автор: $дмитрий 30.10.2011, 14:42 | ||
Зависит от области применения. К примеру, если результатом вызова функции является вывод текста, то она и не будет ничего возвращать |
| Автор: rfq 3.11.2011, 11:45 | ||
Не соглашусь. Сначала вы вводите возвращаемое значение просто так, затем кто-то решит придать ему смысл (напрмер, успех/неуспех), затем его будут игнорировать и тем самым внесут ошибку. И вообще, увидев "return 1", будут терять время на выяснение вопроса "а что значит 1"?, и выяснив, что 1 здесь не значит ничего, поймут, что напрасно потратили время, и сочтут такой стиль за дурной тон. |
| Автор: baldina 3.11.2011, 12:06 |
| традиционно подпрограммы по способу назначения, организации и использования делят на функции и процедуры. в чистом виде можно считать, что функция суть производит вычисления и возвращает значение (очень похоже на функцию в математике), а процедура генерирует побочные эффекты (в том числе, возможно, путем изменения значений аргументов, переданных по ссылке). во многих языках есть лишь одна конструкция для организации подпрограмм. например, в С/С++, php, javascript все подпрограммы называются функциями, однако они не обязательно должны возвращать значение. возврат значения не имеет смысла, если единственное назначение подпрограммы - сгенерировать побочный эффект. например в подпрограммах вывода (типа echo, alert, print). "хоть что-то" никому не нужно, нужно "что-то конкретное" |
| Автор: newbee 6.11.2011, 13:47 |
| Господа, вот вы все про print, про побочные эффекты... А почему бы print-у не вернуть сгенерированную им строку? Вообще представления о побочных эффектах сильно разнятся от того, как и на каком языке думает программист. |
| Автор: $дмитрий 6.11.2011, 16:00 | ||
Рассмотрим символическую функцию showError(), из названия понятно ее предназначение. Что эта функция должна возвращать? |
| Автор: $дмитрий 6.11.2011, 18:47 | ||||
Вероятнее всего на устройство вывода
Префикс show как раз и говорит о том что текст отображается, зачем же ему еще и возвращать его? |
| Автор: newbee 6.11.2011, 19:13 | ||
Интереснее всего, в блокирующем режиме показываем или нет, еще было интересно, что функция получает на вход.
|
| Автор: Shaggie 6.11.2011, 20:21 | ||
Не все языки обязывают что-либо возвращать. Зачем возвращать nil, если ничего возвращать не нужно в принципе? Мне в этом смысле импонирует тот же Хаскель. Базовая часть выполнена в функциональном стиле, и всегда есть какое-либо возвращаемое значение. А для работы с сайд-эффектами есть два типа функций, можно вернуть получившиеся значения, а можно их отбросить (если упрощённо). Это более корректно семантически, и при чтении кода сразу понятно, чего именно хотел автор. А по теме - учите Пролог. Там все функции выполнены как предикаты и возвращают исключительно истину либо ложь, а остальные результаты есть побочный эффект их вычисления |
| Автор: baldina 7.11.2011, 02:31 | ||
имеются в виду языки программирования, верно? я и не утверждал, какие именно представления должны быть. однако имхо если программист думает на английском, то printString печатает строку (побочный эффект), а getString строку возвращает. на любом языке программирования. Добавлено через 2 минуты и 57 секунд хотя вообще конечно Вы правы. припоминаю, приходилось мне видеть функцию bolshoyeOkno(), вся работа которой заключалась в возврате ширины окна))) |