![]() |
Модераторы: Се ля ви |
![]() ![]() ![]() |
|
Шухарт |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 8.5.2010 Где: Хармонт, Канада Репутация: нет Всего: нет |
Здравствуйте!
Такой теоретический вопрос. Любая функция (метод) должна возвращать значение? Возможно вопрос наивный, но т.к. по образованию не связан с IT, хочу уточнить. С опытом прихожу к выводу что да, любая функция должна возвращать хоть что-то, это как правило хорошего тона, позволяет часто сделать выполнение алгоритма логичней и манипулировать ходом выполнения удобнее. Может в некоторых языках так и есть? Заранее благодарен. Так же не буду рад какой-нибудь литературе общего толка которая бы навела порядок в голове относительно подобных вопросов, а то практических знаний и опыта хватает, а базовые теоретические хромают. PS: про Кнута в 3 томах , но пока слишком фундаментально для меня. |
|||
|
||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: нет Всего: 19 |
Да, во многих языках не только функция как таковая, а вообще любая конструкция, возвращает некоторое значение. Это чертовскиудобно. Для примеров и понимания поковыряй всякие лиспы, в частности книгу SICP.
-------------------- You're face to face With man who sold the world |
|||
|
||||
Шухарт |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 8.5.2010 Где: Хармонт, Канада Репутация: нет Всего: нет |
newbee, спасибо за наводку на SICP.
|
|||
|
||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: нет Всего: 130 |
Если функция не возвращает значения - то это процедура.
![]() -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
htoit |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 27.8.2011 Репутация: нет Всего: нет |
У отдельной вызываемой структурной единицы в программировании различают возвращаемое значение и сторонний эффект (разные изменения в памяти компьютера). Присоединяюсь к уже сказанному: если есть возвращаемое значение -- это функция, если нет -- процедура. хороший терминологический on-line словарь компьютерных терминов: http://foldoc.org/ |
|||
|
||||
$дмитрий |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1037 Регистрация: 19.6.2004 Репутация: нет Всего: 45 |
Зависит от области применения. К примеру, если результатом вызова функции является вывод текста, то она и не будет ничего возвращать |
|||
|
||||
rfq |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 20.3.2007 Репутация: нет Всего: нет |
Не соглашусь. Сначала вы вводите возвращаемое значение просто так, затем кто-то решит придать ему смысл (напрмер, успех/неуспех), затем его будут игнорировать и тем самым внесут ошибку. И вообще, увидев "return 1", будут терять время на выяснение вопроса "а что значит 1"?, и выяснив, что 1 здесь не значит ничего, поймут, что напрасно потратили время, и сочтут такой стиль за дурной тон. |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: нет Всего: 101 |
традиционно подпрограммы по способу назначения, организации и использования делят на функции и процедуры. в чистом виде можно считать, что функция суть производит вычисления и возвращает значение (очень похоже на функцию в математике), а процедура генерирует побочные эффекты (в том числе, возможно, путем изменения значений аргументов, переданных по ссылке).
во многих языках есть лишь одна конструкция для организации подпрограмм. например, в С/С++, php, javascript все подпрограммы называются функциями, однако они не обязательно должны возвращать значение. возврат значения не имеет смысла, если единственное назначение подпрограммы - сгенерировать побочный эффект. например в подпрограммах вывода (типа echo, alert, print). "хоть что-то" никому не нужно, нужно "что-то конкретное" Это сообщение отредактировал(а) baldina - 3.11.2011, 12:08 |
|||
|
||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: нет Всего: 19 |
Господа, вот вы все про print, про побочные эффекты... А почему бы print-у не вернуть сгенерированную им строку?
Вообще представления о побочных эффектах сильно разнятся от того, как и на каком языке думает программист. -------------------- You're face to face With man who sold the world |
|||
|
||||
$дмитрий |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1037 Регистрация: 19.6.2004 Репутация: нет Всего: 45 |
Рассмотрим символическую функцию showError(), из названия понятно ее предназначение. Что эта функция должна возвращать? |
|||
|
||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: нет Всего: 19 |
Но в целом I/O - это достаточно исключительная ситуация в программировании, когда сайд эффект важнее возвращаемого значения. Про I/O вообще говорить не интересно, интересно говорить о вычислениях. -------------------- You're face to face With man who sold the world |
|||
|
||||
$дмитрий |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1037 Регистрация: 19.6.2004 Репутация: нет Всего: 45 |
Вероятнее всего на устройство вывода
Префикс show как раз и говорит о том что текст отображается, зачем же ему еще и возвращать его? ![]() |
||||
|
|||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: нет Всего: 19 |
Интереснее всего, в блокирующем режиме показываем или нет, еще было интересно, что функция получает на вход.
-------------------- You're face to face With man who sold the world |
|||
|
||||
Shaggie |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 570 Регистрация: 21.12.2006 Где: outer space Репутация: нет Всего: 72 |
Не все языки обязывают что-либо возвращать. Зачем возвращать nil, если ничего возвращать не нужно в принципе? Мне в этом смысле импонирует тот же Хаскель. Базовая часть выполнена в функциональном стиле, и всегда есть какое-либо возвращаемое значение. А для работы с сайд-эффектами есть два типа функций, можно вернуть получившиеся значения, а можно их отбросить (если упрощённо). Это более корректно семантически, и при чтении кода сразу понятно, чего именно хотел автор. А по теме - учите Пролог. Там все функции выполнены как предикаты и возвращают исключительно истину либо ложь, а остальные результаты есть побочный эффект их вычисления ![]() |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: нет Всего: 101 |
имеются в виду языки программирования, верно? я и не утверждал, какие именно представления должны быть. однако имхо если программист думает на английском, то printString печатает строку (побочный эффект), а getString строку возвращает. на любом языке программирования. Добавлено через 2 минуты и 57 секунд хотя вообще конечно Вы правы. припоминаю, приходилось мне видеть функцию bolshoyeOkno(), вся работа которой заключалась в возврате ширины окна))) |
|||
|
||||
![]() ![]() ![]() |
Правила раздела "Философия программирования": | |
|
Форум "Философия программирования" предназначен для обсуждения вопросов, так или иначе связанных с философскими аспектами разработки ПО: • вопросы перспективного развития методов написания ПО; • изменяющиеся языки и методологии программирования; Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Се ля ви. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Философия программирования | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |