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



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



Итак, мой вопрос:




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




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

3354   17  

17 ответов:

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

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

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

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

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

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

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

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

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

например, в C:

// function
int square( int n ) {
   return n * n;
}

// procedure
void display( int n ) {
   printf( "The value is %d", n );
}

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

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

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

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

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

  • функция должна возвращать значение, но в хранимых процедурах это необязательно: процедура может возвращать 0 или n значения.
  • функции могут иметь только входные параметры для него, в то время как процедуры могут иметь параметры ввода/вывода.
  • для функции обязательно принимать один входной параметр, но хранимая процедура может принимать от 0 до n параметры ввода.
  • функции могут быть вызывается из процедуры, в то время как процедуры не могут быть вызваны из функции.

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

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

в SQL:

  • процедура позволяет SELECT а также DML (INSERT, UPDATE,DELETE) операторы в нем, тогда как функция позволяет только SELECT заявление в ней.
  • процедуры не могут быть использованы в режиме SELECT заявление, в то время как функции могут быть встроены в SELECT заявление.
  • хранимые процедуры не могут использоваться в операторах SQL нигде в WHERE (или HAVING или SELECT) блок, тогда как функции могут.
  • функции, возвращающие таблицы, можно рассматривать как другой набор строк. Это может быть использовано в JOIN блок с другими столами.
  • встроенные функции можно рассматривать как представления, которые принимают параметры и может использоваться в JOIN блоки и другие операции набора.

более строго, функция 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, но в функции мы можем использовать.

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

дополнительные.. щелчок here...http://dotnet-developers-cafe.blogspot.in/2013/08/difference-between-stored-procedure-and.html

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

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

f(x)=(1+x)
g(x)=.5*(2+x/2)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// The following is pseudo code:
g(x) = {
  if (morning()) {
     g = 2 * x;
  }
  else {
   g = x;
  }
  return g;
}

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

// We can immediately translate this definition into a recursive procedure 
// for computing Fibonacci numbers:

(define (fib n)
  (cond ((= n 0) 0)
        ((= n 1) 1)
        (else (+ (fib (- n 1))
                 (fib (- n 2))))))

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

Ну другой способ мышления функции (помимо упомянутого выше значения) - это абстрактное представление идеала, такого как число 1. Процедура - это фактическая реализация этой вещи. Я лично считаю, что они взаимозаменяемы.

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

аналогом для процедур являются рецепты. Например; предположим, что у вас есть машина с именем make-pies эта машина принимает ингредиенты (fruit, milk, flower, eggs, sugar, heat) и эта машина возвращает pie.

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

make-pies (fruit, milk, flower, eggs, sugar, heat) = {
   return (heat (add fruit (mix eggs flower milk)))
}

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

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

A       function     is to a     machine
as a    procedure    is to a     recipe
as      attributes   are to      ingredients
as      output       is to       product

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

в контексте db: Хранимая процедура-это precompiled план выполнения, где as функции не являются.

в терминах С# / Java,функции - это блок кода, который возвращает определенное значение, но процедура - это блок кода, который возвращает пустота (ничего). В C#/Java и функции и процедуры чаще всего называются просто методы.

    //This is a function
    public DateTime GetCurrentDate()
    {
        return DateTime.Now.Date;
    }

    //This is a procedure(always return void)
    public void LogMessage()
    {
        Console.WriteLine("Just an example message.");
    }

порядок: 1.Процедуры-это коллекции операторов, которые определяют параметризованные вычисления. 2.Процедуры не могут возвращать значения.

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

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

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

Comments

    Ничего не найдено.