문제

일반적으로 말하자면,우리 모두에 대해 듣 기능절차 에서 프로그래밍 언어입니다.그러나 나는 내가 사용하는 이러한 조건이 거의 같은 의미로(아마도 아주 잘못된).

그래서 제 질문은:

의 차이점은 무엇입 관점에서의 그들의 기능,그들의 목적과 사용합니까?

예를 감사하겠습니다.

도움이 되었습니까?

해결책

함수는 값을 반환하고 절차는 명령을 실행합니다.

이름 함수는 수학에서 나옵니다. 입력에 따라 값을 계산하는 데 사용됩니다.

절차는 순서대로 실행할 수있는 명령 집합입니다.

대부분의 프로그래밍 언어에서는 기능조차도 일련의 명령을 가질 수 있습니다. 따라서 차이는 값 부분을 반환하는 데만 있습니다.

그러나 기능을 깨끗하게 유지하려면 (기능 언어를보십시오) 함수에 부작용이 없는지 확인해야합니다.

다른 팁

이것은 상황에 따라 다릅니다.

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 (나 HAVINGSELECT)을 차단하는 반면,기능을 할 수 있습니다.
  • 를 반환하는 함수이블로 처리할 수 있는 다른 행 집합입니다.이에 사용할 수 있는 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. 기능을 절차에서 호출 할 수 있습니다.

절차와 기능은 둘 다 서브 루틴입니다 그들 사이의 차이점은 절차가 반환된다는 것입니다 다수의 (또는 최소한 할 수 있음) 값 반면 함수는 반환 할 수 있습니다. 하나 값 (이것은 함수 표기법이 수학에 사용되는 이유는 일반적으로 한 번만 주어진 시간에 하나의 값 만 발견되므로 일부 프로그래밍 언어는이 규칙을 따르지 않지만 이것이 진정한 정의입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top