Функция и процедура в чем разница

Разница между процедурой и функцией в программировании

Пользователи, далекие от программирования в принципе, сталкиваются с понятиями функции и процедуры редко, и ассоциируются они с чем-то математическим и бюрократическо-медицинским. В программировании же этими понятиями оперирует множество языков, правда, даже специалисты порой не могут четко осознать разницу между функцией и процедурой. Как с тем сусликом: он есть, но его никто не видит. Посмотрим, настолько ли невидимы отличия.

Определение

Функция в программировании — подпрограмма, вызываемая из других подпрограмм необходимое число раз.

Процедура — поименованная часть программы (подпрограмма), многократно вызываемая из последующих частей программы необходимое число раз.

Сравнение

Основная разница между функцией и процедурой — в возвращаемом результате. По сути, и функции, и процедуры представляют собой логически неделимые блоки, из которых складывается код программы. Функция возвращает значение, процедура в большинстве языков программирования — нет, либо (в Си, например) возвращает пустое значение. В последнем случае (в Си) процедура считается подчиненной разновидностью функции.

Функция и процедура в чем разница. Смотреть фото Функция и процедура в чем разница. Смотреть картинку Функция и процедура в чем разница. Картинка про Функция и процедура в чем разница. Фото Функция и процедура в чем разница

Заголовок функции содержит слово “function”, идентификатор (собственное имя функции), вариативно список параметров и обязательно — тип результата. В теле функции обязательно прописывается оператор, присваивающий значение имени функции, которое она вернет в качестве результата. Заголовок процедуры содержит слово “procedure”, идентификатор (имя процедуры) и вариативно список параметров. Вызов функции осуществляется в составе выражений там, где эти выражения применяются, вызов процедуры требует отдельного оператора. Вызов процедуры осуществляется только по имени, имя функции же связано с ее значением. На схемах алгоритмов вызов функции изображается в блоке вывода или в блоке процесса, вызов процедуры — в специальном блоке “предопределенный процесс”.

Источник

В чем разница между «функцией» и «процедурой»?

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

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

Был бы признателен за пример.

18 ответов

Функция возвращает значение, а процедура просто выполняет команды.

Функция имени происходит от математики. Он используется для вычисления значения на основе ввода.

В большинстве языков программирования даже функции могут иметь набор команд. Следовательно, разница только в возврате значения.

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

Функцию можно использовать в операторе sql, тогда как процедуру нельзя использовать в операторе sql.

Операторы Insert, Update и Create не могут быть включены в функцию, но процедура может иметь эти операторы.

Процедура поддерживает транзакции, но функции не поддерживают транзакции.

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

Планы выполнения функций и процедур кэшируются, поэтому производительность в обоих случаях одинакова.

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

Вот еще один пример метода, который не является функцией, но в противном случае все равно будет возвращать значение.

Слышали ли вы в последнее время о рекурсивных процедурах? Они говорят о рекурсивной функции (реальной функции), которая возвращает значение, и они используют слово «процедура». Так в чем же тогда разница?

Изображение этой машины может выглядеть как

Конечно, это не единственный способ приготовить пирог.

В этом случае мы видим, что:

Эта аналогия допустима, но она не работает, если принять во внимание, что когда вы имеете дело с компьютерной программой, все является абстракцией. Итак, в отличие от рецепта для машины, мы сравниваем две вещи, которые сами по себе являются абстракциями; две вещи, которые могут быть одним и тем же. И я считаю, что они (для всех намерений и целей) одно и то же.

3. Процедуры не могут быть вызваны из функции.

Функции 1. Функции структурно напоминают процедуры, но семантически моделируются на основе математических функций. 2.Он может возвращать значения 3. Функцию можно вызывать из процедур.

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

Это зависит от контекста.

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

Хотя вы должны заметить, что стандарт C не говорит о процедурах, а только о функциях.

Функции и процедуры являются их реализациями. Обычно функции возвращают значения, а процедуры ничего не возвращают.

Основные отличия

Расширенные различия

В SQL:

Более строго, функция f подчиняется свойству f (x) = f (y), если x = y, т.е. она вычисляет тот же результат каждый раз, когда вызывается с тем же аргументом (и, следовательно, она не меняет состояние системы.)

Таким образом, rand () или print («Hello») и т. Д. Являются не функциями, а процедурами. В то время как sqrt (2.0) должен быть функцией: нет наблюдаемого эффекта или изменения состояния, независимо от того, как часто вы его вызываете, и он всегда возвращает 1,41 и некоторые из них.

Это хорошо известный старый вопрос, но я хотел бы поделиться некоторыми мыслями об исследованиях и дизайне современных языков программирования.

Основной ответ

Однако, если результат вызова функции не нужен, его можно просто (по крайней мере, логически) проигнорировать, и таким образом определения функций / вызовы функций должны согласовываться с определениями процедур / вызовами процедур. Алголоподобные языки, такие как C, C ++ и Java, предоставляют возможность «функции» следующим образом: кодируя тип результата void как особый случай функций, похожих на традиционные процедуры, нет необходимости предоставлять особенность «процедур» отдельно. Это предотвращает раздувание языкового дизайна.

Теоретически функция может быть указана с указанным типом модуля в качестве типа результата вызова функции, чтобы указать, что результат особенный. Это отличает традиционные процедуры (когда результат вызова не интересен) от других. В дизайне языка есть разные стили:

Дальнейшее чтение

Согласно традиционной концепции, полученной из математики, существует тонны черной магии, о которых большинство людей не беспокоится. знать. Строго говоря, вы вряд ли все проясните в своих учебниках по математике. Книги по CS тоже могут не сильно помочь.

Что касается языков программирования, есть несколько предостережений:

В контексте функционального программирования (где все функции возвращают значения) функция является абстрактным объектом:

Внутри процедуры мы можем использовать операторы DML (Insert / Update / Delete), но внутри функции мы не можем использовать операторы DML.

У процедуры могут быть как входные, так и выходные параметры, а у функции может быть только входной параметр.

Мы можем использовать блок Try-Catch в хранимой процедуре, но в функции мы не можем использовать блок Try-Catch.

Мы не можем использовать хранимую процедуру в операторе Select, но в функции мы можем использовать в операторе Select.

Хранимая процедура может возвращать 0 или n значений (макс. 1024), но функция может возвращать только 1 обязательное значение.

Хранимая процедура не может быть вызвана из функции, но мы можем вызвать функцию из хранимой процедуры.

Мы можем использовать транзакцию в хранимой процедуре, но в функции мы не можем использовать транзакцию.

Мы не можем использовать хранимую процедуру в инструкции Sql где-либо в разделе Where / Have / select, но мы можем использовать функцию In.

Мы не можем присоединиться к хранимой процедуре, но мы можем присоединиться к функции.

Функция возвращает значение, а процедура просто выполняет команды.

Функция имени происходит от математики. Он используется для вычисления значения на основе ввода.

В большинстве языков программирования даже функции могут иметь набор команд. Следовательно, разница только в возвращении части значения.

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

Источник

Процедуры и функции (бесплатная статья по Программированию 1С)
из цикла статей «Первые шаги в разработке на 1С»

О чем эта статья

Эта статья продолжает цикл статей «Первые шаги в разработке на 1С». В ней будут рассмотрены следующие вопросы:

Применимость

Материал полностью актуален для платформы «1С:Предприятие 8» редакций 8.2. и 8.3.

Процедуры и функции

В отдельные процедуры и функции можно выносить общие алгоритмы. Одинаковый программный код из разных модулей (какой-то общий алгоритм) разумно выносить в процедуру или функцию какого-нибудь модуля и обращаться к ней.

При этом мы избавляемся от дублирования кода, заменив его вызовом процедуры (функции). Если возникает потребность внести изменения в алгоритм, то эти изменения будет достаточно внести в одном месте.

Кроме того, процедуры и функции повышают читаемость программного кода. Гораздо проще просмотреть, что выполняет данный код, особенно, если вызовы процедур имеют осмысленные названия.

В итоге облегчается сопровождение прикладного решения.

Следует отметить, что начинающие разработчики иногда для названия процедуры или функции пытаются использовать зарезервированное слово Выполнить.

Зарезервированные слова использовать для этих целей нельзя, и, естественно, в этом случае система будет сообщать об ошибке.

Функция, в отличии от процедуры, может иметь возвращаемое значение. В теле функции для того, чтобы вернуть значение, нужно использовать оператор Возврат и указать то значение, которое будет возвращаться.

Процедура, в отличии от функции, не может иметь возвращаемое значение. Она просто вызывается и выполняет какие-то действия.

Если функция не будет иметь ключевого слова Возврат, то она вернет несуществующее значение, т.е. значение типа данных Неопределено. Вместе с тем, ключевое слово Возврат можно использовать и в процедуре, но в этом случае возвращаемое значение не указывается, а само ключевое слово будет означать: прекратить выполнение процедуры.

Процедура или функция начинает описываться со слова Процедура (Функция). Далее следует Имя процедуры (функции). После имени обязательно указываются круглые скобки. Внутри скобок могут находиться описываемые параметры.

Данные параметры нужно будет передавать при вызове (при обращении к процедуре). После круглых скобок может стоять слово Экспорт (экспортная функция).

Потом следует тело процедуры (функции), т.е. последовательность из любого количества операторов.

В теле могут находиться вызовы других процедур и функций данного модуля или других модулей, которые доступны из текущего программного модуля. Обязательным является наличие заключительного слова КонецПроцедуры (КонецФункции).

После описания процедуры или функции точку с запятой ставить не нужно. При этом Платформа не считает ошибкой, если точка с запятой стоит после последней процедуры (функции) в модуле.

Однако со временем эта процедура (функция) в результате действий программиста может стать не последней, и тогда будет выдаваться сообщение об ошибке. Примерный вид процедуры и функции представлен на рисунке.

Функция и процедура в чем разница. Смотреть фото Функция и процедура в чем разница. Смотреть картинку Функция и процедура в чем разница. Картинка про Функция и процедура в чем разница. Фото Функция и процедура в чем разница

Параметры, переданные в процедуру (функцию) при ее вызове, могут быть использованы при формировании возвращаемого результата функцией или при выборе используемого алгоритма в процедуре.

При описании процедуры или функции мы можем указать, что для какого-либо параметра по умолчанию должно использоваться некоторое значение. Для этого справа от параметра через знак равенства указывается требуемое значение.

В том случае, если при вызове процедуры (функции) значение параметра будет не задано, то оно примет значение, используемое по умолчанию.

Таким образом, параметры, для которых указано значение по умолчанию, являются необязательными для указания при вызове. В описании процедуры(функции) вначале следуют обязательные параметры, а потом необязательные.

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

При передаче по ссылке система сообщает, что нужно обратиться к переменной, которая хранится в данной области памяти. В том случае, если значение параметра изменяется, оно меняется именно в указанной области памяти.

Т.е. при вызове процедуры (функции) мы передавали параметр с одним значением, а после отработки вызываемой процедуры (функции) значение параметра изменилось.

В случае передачи по значению указывается, что параметр нужно передавать по значению.

В этом случае вызывается новая область памяти, отличная от предыдущей, и меняется именно она. Исходное значение параметра не меняется.

По умолчанию все параметры передаются по ссылке. Чтобы передать параметр по значению, в описании процедуры перед параметром нужно поставить ключевое слово Знач.

Следует сказать, что в некоторые процедуры-обработчики передается такой параметр, как Отказ. Значение данного параметра по умолчанию – Ложь.

Если в теле процедуры-обработчика установить данному параметру значение Истина, то процедура не отработает.

Порядок следования процедур и функций в модуле 1С:Предприятие 8 значения не имеет. Из любой процедуры (функции) модуля можно вызывать любую другую процедуру или функцию данного модуля.

Чтобы обратиться к списку процедур текущего модуля в панели конфигуратора можно нажать на кнопку в виде лупы с надписью «PROC» или использовать горячие клавиши (Ctrl+Alt+P).

Откроется диалоговое окно, в котором описаны функции F(x) и процедуры P( ). К ним возможно обращаться.

Список может быть отсортирован в алфавитном порядке (для этого устанавливается галочка «Сортировка»).

При снятой галочке процедуры и функции в списке размещены в соответствии с их следованием в модуле.

Функция и процедура в чем разница. Смотреть фото Функция и процедура в чем разница. Смотреть картинку Функция и процедура в чем разница. Картинка про Функция и процедура в чем разница. Фото Функция и процедура в чем разница

Кроме процедур и функций в списке для разных модулей будут доступны разные стандартные обработчики. При выборе обработчика двойным кликом мыши в модуле создается шаблон соответствующей процедуры (обработчика события).

Если в диалоговом окне «Процедуры и функции» выбрать процедуру и нажать на кнопку Перейти, то мы окажемся в начале выбранной процедуры (функции).

Справа от кнопки с надписью «PROC» располагается поле. В этом поле указано имя текущей процедуры (функции).

Первичное знакомство с процедурами и функциями будем считать завершенным. Однако отметим, что платформа содержит множество стандартных процедур и функций, логику которых вам не нужно писать самостоятельно. Достаточно только в случае необходимости вызвать их в нужном месте вашего программного кода. Изучением этих стандартных функций мы и займемся в нашей следующей статье 🙂

Функция и процедура в чем разница. Смотреть фото Функция и процедура в чем разница. Смотреть картинку Функция и процедура в чем разница. Картинка про Функция и процедура в чем разница. Фото Функция и процедура в чем разница

PDF-версия статьи

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

Функция и процедура в чем разница. Смотреть фото Функция и процедура в чем разница. Смотреть картинку Функция и процедура в чем разница. Картинка про Функция и процедура в чем разница. Фото Функция и процедура в чем разница

Статья в PDF-формате

Вы можете скачать эту статью в формате PDF по следующей ссылке:
Ссылка доступна для зарегистрированных пользователей)

Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)

Комментарии / обсуждение (4):

Все хорошо, можно бы добавить про передачу параметра Отказ.

Функция и процедура в чем разница. Смотреть фото Функция и процедура в чем разница. Смотреть картинку Функция и процедура в чем разница. Картинка про Функция и процедура в чем разница. Фото Функция и процедура в чем разница

Функция и процедура в чем разница. Смотреть фото Функция и процедура в чем разница. Смотреть картинку Функция и процедура в чем разница. Картинка про Функция и процедура в чем разница. Фото Функция и процедура в чем разница

Для новичков статья полезная. Многие делали ошибку изменяя значение входящего параметра, а потом удивляясь почему в вызываемом коде значение тоже изменилось.

Источник

В чем разница между «функцией» и «процедурой»?

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

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

пример был бы признателен.

17 ответов

функция возвращает значение, а процедура просто выполняет команды.

функция name происходит от math. Он используется для вычисления значения на основе входных данных.

процедура-это набор команд, которые могут быть выполнены по порядку.

в большинстве языков программирования, даже функции могут иметь набор команд. Следовательно, разница заключается только в возврате части значения.

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

Это зависит от контекста.

в языках, подобных Pascal, функции и процедуры являются различными сущностями, различающимися тем, возвращают они значение или нет. Они ведут себя по-разному. синтаксис языка (например. процедура вызывает операторы формы; вы не можете использовать вызов процедуры внутри выражения, а вызовы функций не формируют операторы, вы должны использовать их в других операторах). Поэтому программисты, воспитанные на Паскале, различают их.

В C-подобных языки и многие другие современные языки это различие исчезло; в статически типизированных языках процедуры-это просто функции со смешным типом возврата. Вероятно, поэтому они взаимозаменяемы.

хотя вы должны отметить, что стандарт C не говорит о процедурах, только о функциях.

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

есть термин подпрограмма или подпрограмма что означает параметризованный фрагмент кода, который можно вызвать из разных мест.

функции и процедуры реализации этих. Обычно функции возвращают значения, а процедуры ничего не возвращают.

Основные Различия

Дополнительные Различия

в SQL:

строго говоря, функция f подчиняется свойству, что f(x) = f (y), если x = y, т. е. вычисляет тот же результат каждый раз он вызывается с одним и тем же аргументом (и, таким образом, он не изменяет состояние системы.)

таким образом, rand() или print(«Hello») и т. д. не функции, а процедуры. В то время как sqrt(2.0) должен быть функцией: нет наблюдаемого эффекта или изменения состояния независимо от того, как часто его называют, и он всегда возвращает 1.41 и некоторые.

внутри процедуры мы можем использовать операторы DML (Insert /Update/Delete), но внутри функции мы не можем использовать операторы DML.

процедура может иметь оба входных\выходных параметра, но функция может иметь только входной параметр.

мы можем использовать блок Try-Catch в хранимой процедуре, но в функции мы не можем использовать блок Try-Catch.

мы не можем использовать хранимую процедуру в инструкции Select, но в функции мы можем использовать в инструкции Select.

сохраненные Процедура может возвращать 0 или n значений (максимум 1024), но функция может возвращать только 1 обязательное значение.

хранимая процедура не может быть вызовом из функции, но мы можем вызвать функцию из хранимой процедуры.

мы можем использовать транзакцию в хранимой процедуре, но в функции мы не можем использовать транзакцию.

мы не можем использовать хранимую процедуру в инструкции Sql в любом месте в разделе Where/Having/select, но в функции мы можем использовать.

мы не можем присоединиться Хранимая процедура, но мы можем присоединиться к функции.

в большинстве случаев: функция возвращает значение, а процедура нет. Оба куска кода сгруппированы вместе, чтобы сделать то же самое.

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

здесь f-та же функция, что и g, но это другая процедура.

Если мы здесь языковые агностики,процедура обычно указывает ряд действий, необходимых для надежного и идемпотентного достижения определенного результата. То есть процедура-это в основном алгоритм.

Functions, с другой стороны, является несколько независимым фрагментом кода в более крупной программе. Другими словами, функция-это реализация процедуры.

функция возвращает значение, а процедура просто выполняет команды.

функция name происходит от math. Он используется для вычисления значения на основе входных данных.

процедура-это набор команд, которые могут быть выполнены по порядку.

в большинстве языков программирования, даже функции могут иметь набор команд. Следовательно, разница заключается только в возврате части значения.

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

функция может использоваться в инструкции sql, тогда как процедура не может использоваться в инструкции sql.

инструкции Insert, Update и Create не могут быть включены в функцию, но процедура может иметь эти операторы.

процедура поддерживает транзакции, но функции не поддерживают транзакции.

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

планы выполнения как функций, так и процедур кэшируются, поэтому производительность одинакова в обоих случаях.

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

функция-это не просто метод, который возвращает значение. Не так: чтобы метод был реальной функцией, он должен возвращать одно и то же значение, всегда заданное определенным входом. Примером метода, который не является функцией, является random метод в большинстве языков, потому что, хотя он возвращает значение, значение не всегда тот же.

вот еще один пример метода, который не является функцией, но в противном случае будет возвращать значение.

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

вы много слышали о рекурсивных процедурах в последнее время? Они говорят о рекурсивной функции (реальной функции), и она возвращает значение, и они используют слово «процедура». Тогда какая разница?

(Примечание, Если вы прочитали эту главу из ссылки, которую я предоставляю, вы можете найти, что сложнее разобраться не разница между функцией и процедурой, а процесс и процедура. Знаете ли вы, что рекурсивная процедура может иметь итеративный процесс?)

представление этой машины может выглядеть как

конечно, это не единственный способ сделать пирог.

в этом случае мы видим, что:

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *