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

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

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

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

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

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

Пример может быть оценен.

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

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

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

3.Procedures не может быть вызвана из функции.

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

Пример в C:

// functionint square( int n ) { return n * n;} // procedurevoid display( int n ) { printf( “The value is %d”, n );}

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

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

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

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

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

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

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

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

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

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

больше .. здесь … http://dotnet-developers-cafe.blogspot.in/2013/08/difference-between-stored-procedure-and.html

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

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

Функция не только любой старый метод , который возвращает значение. Не так: Для того , чтобы метод , чтобы быть действительная функция должна возвращать то же значение всегда дается определенный вклад. Пример метода , который не является функцией является 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 machineas a procedure is to a recipeas attributes are to ingredientsas output is to product

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

Пример в C:

// functionint square( int n ) { return n * n;} // procedurevoid display( int n ) { printf( “The value is %d”, n );}

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

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

В Pascal-подобные языки, функции и процедуры являются различными объектами, отличающихся, делают ли они или не возвращают значение. Они ведут себя иначе WRT. синтаксис языка (.

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

Поэтому, Паскаль воспитанные программисты различать их.

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

В функциональных языках, не существует, как правило, нет такого понятия, как процедура – все функции.

Пример в C:

// functionint square( int n ) { return n * n;} // procedurevoid display( int n ) { printf( “The value is %d”, n );}

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

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

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

  • Функции могут иметь только входные параметры для него, в то время как процедуры могут иметь параметры ввода / вывода.

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

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

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

В SQL:

  • Это процедура позволяет SELECTкак DML ( INSERT, UPDATE, DELETE) отчетности в нем, в то время как функция позволяет только SELECTзаявление в нем.
  • Процедуры не могут быть использованы в SELECTзаявлении, в то время как функции могут быть встроены в SELECTзаявлении.

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

  • Функции Инлайн можно рассматривать как представления , которые принимают параметры и могут быть использованы в JOINблоках и других операций набора строк.

Пример в C:

// functionint square( int n ) { return n * n;} // procedurevoid display( int n ) { printf( “The value is %d”, n );}

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

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

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

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

Здесь е та же функция, как г, но это другая процедура.

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

Таким образом, рандов () или печать ( «Привет») и т.д., не являются функциями, но процедуры. В то время как SQRT (2,0) должна быть функция: нет наблюдаемого эффекта или изменения состояния независимо от того, как часто называет его, и он всегда возвращает 1,41 и некоторые из них.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

С точки зрения С # / 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.”); }

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

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

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

    Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.