의 차이점은 무엇입니"기능"및"절차"?
-
05-09-2019 - |
문제
일반적으로 말하자면,우리 모두에 대해 듣 기능 나 절차 에서 프로그래밍 언어입니다.그러나 나는 내가 사용하는 이러한 조건이 거의 같은 의미로(아마도 아주 잘못된).
그래서 제 질문은:
의 차이점은 무엇입 관점에서의 그들의 기능,그들의 목적과 사용합니까?
예를 감사하겠습니다.
해결책
함수는 값을 반환하고 절차는 명령을 실행합니다.
이름 함수는 수학에서 나옵니다. 입력에 따라 값을 계산하는 데 사용됩니다.
절차는 순서대로 실행할 수있는 명령 집합입니다.
대부분의 프로그래밍 언어에서는 기능조차도 일련의 명령을 가질 수 있습니다. 따라서 차이는 값 부분을 반환하는 데만 있습니다.
그러나 기능을 깨끗하게 유지하려면 (기능 언어를보십시오) 함수에 부작용이 없는지 확인해야합니다.
다른 팁
이것은 상황에 따라 다릅니다.
Pascal과 같은 언어에서 기능 및 절차는 값을 반환하는지 여부에 따라 다른 개체입니다. 그들은 다르게 행동합니다. 언어 구문 (예 : 절차 호출 양식 문; 당신은 표현식 내에서 절차 호출을 사용할 수 없다. 따라서 파스칼-사육 프로그래머는이를 차별화합니다.
C와 같은 언어와 다른 많은 현대 언어 로이 차이는 사라졌습니다. 정적으로 입력 한 언어에서 절차는 재미있는 반환 유형의 기능 일뿐입니다. 이것이 아마도 그들이 상호 교환 적으로 사용되는 이유 일 것입니다.
기능적 언어에는 일반적으로 절차와 같은 것이 없습니다. 모든 것이 기능입니다.
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 입력 매개 변수가 있습니다.
- 함수를 호출할 수 있에서 절차를 반면 절차에 호출할 수 없는 함수.
고급 차이
- 예외로 처리할 수 있도-catch 블록 절차를 반면,try-catch 블록에 사용할 수 없습니다 기능.
- 우리가 갈 수 있는 트랜잭션 관리를 위한 절차에서,반면에서 함수는 우리는 할 수 없습니다.
에서 SQL:
- 절차 허용
SELECT
뿐만 아니라 DML(INSERT
,UPDATE
,DELETE
)문서에서 그는 반면,기능만 허용SELECT
문습니다. - 절차를 수 있는지에서 활용
SELECT
문는 반면,기능에 포함할 수 있습니다SELECT
문입니다. - 저장 프로시저를 사용할 수 없습에서 SQL 문을 어디에서
WHERE
(나HAVING
나SELECT
)을 차단하는 반면,기능을 할 수 있습니다. - 를 반환하는 함수이블로 처리할 수 있는 다른 행 집합입니다.이에 사용할 수 있는
JOIN
와 블록 기타 테이블이 있습니다. - 인라인 기능으로 생각할 수 있습망을 매개변수에 사용할 수 있습니다
JOIN
블록고 다른 행 작업입니다.
더 엄격하게, 함수 f는 x = y 인 경우 f (x) = f (y)의 속성에 순종합니다. 동일한 결과 마다 동일한 인수로 호출 될 때마다 시스템의 상태를 변경하지 않습니다.)
따라서 Rand () 또는 Print ( "Hello") 등은 기능이 아니라 절차입니다. SQRT (2.0)는 기능이어야합니다. 얼마나 자주 전화를 걸든지 관찰 가능한 효과 나 상태 변화는 없습니다. 항상 1.41과 일부는 반환됩니다.
내부 절차는 DML (삽입 /업데이트 /삭제) 문을 사용할 수 있지만 내부 기능은 DML 문을 사용할 수 없습니다.
프로 시저는 입력 출력 매개 변수를 모두 가질 수 있지만 함수에는 입력 매개 변수 만 가질 수 있습니다.
저장 프로 시저에서 Try-Catch 블록을 사용할 수 있지만 기능에서는 Try-Catch 블록을 사용할 수 없습니다.
Select 문에서 저장된 절차를 사용할 수는 없지만 기능적으로 SELECT 문에 사용할 수 있습니다.
저장 프로 시저는 0 또는 N 값 (최대 1024)을 반환 할 수 있지만 함수는 필수 1 값 만 반환 할 수 있습니다.
저장 프로 시저는 기능에서 호출 할 수 없지만 저장 프로 시저에서 기능을 호출 할 수 있습니다.
저장 프로 시저에서 트랜잭션을 사용할 수 있지만 기능에서는 거래를 사용할 수 없습니다.
Where/Hown/Select 섹션의 어느 곳에서나 SQL 문으로 저장된 절차를 사용할 수는 없지만 기능적으로 사용할 수 있습니다.
저장 프로 시저에 가입 할 수는 없지만 기능에 가입 할 수 있습니다.
자세한 내용은 .. 여기를 클릭하십시오 ...http://dotnet-developers-cafe.blogspot.in/2013/08/difference-bet-ween-stored-procedure-and.html
대부분의 상황에서 : 함수는 값을 반환하고 프로 시저는 그렇지 않습니다. 둘 다 같은 일을하기 위해 함께 그룹화 된 코드 조각입니다.
기능적 프로그래밍 컨텍스트 (모든 함수가 값을 반환하는 경우)에서 함수는 추상 객체입니다.
f(x)=(1+x)
g(x)=.5*(2+x/2)
여기서 F는 G와 동일한 기능이지만 다른 절차입니다.
우리가 여기 언어에 대한 언어가 있다면 절차 일반적으로 특정 결과를 신뢰할 수 있고 신속하게 달성하는 데 필요한 일련의 행위를 지정합니다. 즉, 절차는 기본적으로 알고리즘입니다.
반면에 함수는 더 큰 프로그램 내에서 다소 독립적 인 코드입니다. 다시 말해, 기능은 절차의 구현입니다.
함수는 값을 반환하고 절차는 명령을 실행합니다.
이름 함수는 수학에서 나옵니다. 입력에 따라 값을 계산하는 데 사용됩니다.
절차는 순서대로 실행할 수있는 명령 집합입니다.
대부분의 프로그래밍 언어에서는 기능조차도 일련의 명령을 가질 수 있습니다. 따라서 차이는 값 부분을 반환하는 데만 있습니다.
그러나 기능을 깨끗하게 유지하려면 (기능 언어를보십시오) 함수에 부작용이 없는지 확인해야합니다.
함수는 SQL 문 내에서 사용할 수 있지만 SQL 문 내에서 절차를 사용할 수 없습니다.
삽입, 업데이트 및 제작 진술은 기능에 포함될 수 없지만 절차에는 이러한 진술을 가질 수 있습니다.
절차는 거래를 지원하지만 기능은 거래를 지원하지 않습니다.
함수는 하나의 값 만 반환해야하지만 (다른 하나는 변수로 나갈 수 있음) 프로 시저는 많은 데이터 세트와 반환 값을 반환합니다.
기능과 절차의 실행 계획이 캐시되므로 두 경우 모두 성능이 동일합니다.
나는이 답변의 대부분에서 계속해서 계속보고있는 것으로 반대합니다. 함수를 함수로 만드는 것은 값을 반환한다는 것입니다.
함수는 값을 반환하는 오래된 방법이 아닙니다. 그렇지 않습니다 : 메소드가 실제 함수가 되려면 항상 특정 입력이 주어진 동일한 값을 반환해야합니다. 함수가 아닌 메소드의 예는 다음과 같습니다. random
대부분의 언어로 된 방법은 값을 반환하지만 값이 항상 동일하지 않기 때문입니다.
따라서 함수는지도와 더 유사합니다 (예 : x -> x'
1 차원 함수의 경우). 이것은 실제 기능을 다룰 때 타이밍과 평가 대상 순서가 항상 비 기능의 경우가 아닌 곳이 어디에도 중요하지 않기 때문에 규칙적인 방법과 기능 사이의 매우 중요한 차이점입니다.
다음은 함수가 아니지만 여전히 값을 반환하는 메소드의 또 다른 예입니다.
// 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)
그리고이 기계는 a 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: 저장된 절차입니다 사전 컴파일 함수가 아닌 실행 계획.
с#/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. 값을 반환 할 수 있습니다. 3. 기능을 절차에서 호출 할 수 있습니다.
절차와 기능은 둘 다 서브 루틴입니다 뿐 그들 사이의 차이점은 절차가 반환된다는 것입니다 다수의 (또는 최소한 할 수 있음) 값 반면 함수는 반환 할 수 있습니다. 하나 값 (이것은 함수 표기법이 수학에 사용되는 이유는 일반적으로 한 번만 주어진 시간에 하나의 값 만 발견되므로 일부 프로그래밍 언어는이 규칙을 따르지 않지만 이것이 진정한 정의입니다.