В чем разница между функцией и подпрограммой? - PullRequest
35 голосов
/ 18 мая 2011

В чем разница между функцией и подпрограммой? Мне сказали, что разница между функцией и подпрограммой следующая:

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

Это правда? Или нет никакой разницы, просто два термина обозначают одно?

Ответы [ 8 ]

9 голосов
/ 18 мая 2011

Я не согласен.Если вы передадите параметр по ссылке в функцию, вы сможете изменить это значение вне области действия функции.Кроме того, функции не должны возвращать значение.Рассмотрим void some_func() в C. Итак, предпосылки в OP недействительны.

На мой взгляд, разница между подпрограммой function и семантическая.То есть некоторые языки используют различную терминологию.

8 голосов
/ 01 июня 2014

Если мы говорим на C, C ++, Java и другом родственном языке высокого уровня:

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

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

8 голосов
/ 18 мая 2011

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

Вот мое определение их; -)

4 голосов
/ 09 декабря 2013

С точки зрения Visual Basic подпрограмма - это набор инструкций, которые выполняют четко определенную задачу.Инструкции помещаются в операторы Sub и End Sub.

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

3 голосов
/ 27 апреля 2012

Функция и подпрограмма возвращают значение, но в то время как функция не может изменить значение аргументов, поступающих IN на своем пути OUT, подпрограмма может. Кроме того, вам нужно определить имя переменной для исходящего значения, где для функции вам нужно только определить входящие переменные. Например, функция:

double multi(double x, double y) 
{
  double result; 
  result = x*y; 
  return(result)
}

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

double mult(double x, double y, double result) 
{
  result = x*y; 
  x=20; 
  y = 2; 
  return()
}

Это будет делать то же самое, что и функция, то есть возвращать произведение x и y, но в этом случае вы (1) должны определить результат как переменную и (2) вы можете изменить значения x и у на обратном пути.

1 голос
/ 20 сентября 2017

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

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

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

0 голосов
/ 05 октября 2016

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

0 голосов
/ 19 ноября 2013

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

Например: обычная функция vlookup в Excel не может искать значения> 256 символов.Поэтому я использовал эту функцию:

Function MyVlookup(Lval As Range, c As Range, oset As Long) As Variant
  Dim cl As Range
  For Each cl In c.Columns(1).Cells
  If UCase(Lval) = UCase(cl) Then
  MyVlookup = cl.Offset(, oset - 1)
  Exit Function
  End If
  Next
End Function

Это не мой код.Получил из другого поста в интернете.Он отлично работает.

Но реальное преимущество в том, что теперь я могу звонить из любой ячейки в Excel.Если бы написал подпрограмму, я бы не смог этого сделать.

...