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

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

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

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

Пример будет оценен.

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

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

Ответ 3

Пример в C:

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

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

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

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

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

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

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

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

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

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

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

для более.. нажмите здесь... http://dotnet-developers-cafe.blogspot.in/2013/08/difference-between-stored-procedure-and.html

Ответ 8

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

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

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

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

В SQL:

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

Ответ 9

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

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

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

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

Ответ 10

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

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

Ответ 11

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

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

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

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

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

Ответ 12

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

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

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

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

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

Ответ 13

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

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

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

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

// 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

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

Ответ 14

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

Ответ 15

В терминах С#/Java функция - это блок кода, возвращающий определенное значение, но procedure - это блок кода, который возвращает void (ничего). В С#/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.");
    }

Ответ 16

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

3.Процедуры нельзя вызывать из функции.

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

Ответ 17

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