[function] “기능”과“절차”의 차이점은 무엇입니까?

일반적으로 우리 는 프로그래밍 언어 의 기능 이나 절차 에 대해 듣습니다 . 그러나 나는이 용어를 거의 상호 교환 가능하게 사용한다는 것을 알았습니다 (아마도 매우 잘못되었을 수 있습니다).

그래서 내 질문은 :

기능, 목적 및 사용 측면에서 차이점은 무엇입니까?

예를 들어 주시면 감사하겠습니다.



답변

함수는 값을 반환하고 프로시 저는 명령을 실행합니다.

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

프로시 저는 순서대로 실행될 수있는 명령 세트입니다.

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

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


답변

상황에 따라 다릅니다.

파스칼과 같은 언어에서 함수와 프로시 저는 값을 반환하는지 아닌지에 따라 다른 엔티티입니다. 그들은 다르게 행동한다. 언어 구문 (예 : 프로시 저는 양식 문을 호출합니다. 표현식 내에서는 프로 시저 호출을 사용할 수 없습니다. 함수 호출은 문을 구성하지 않습니다. 다른 문에서 사용해야합니다). 따라서 파스칼 품종 프로그래머는 이들을 구별합니다.

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 개의 입력 매개 변수 를 사용할 수 있습니다 .
  • 함수는 프로 시저에서 호출 할 수 있지만 프로시 저는 함수에서 호출 할 수 없습니다.

고급 차이점

  • 프로 시저에서 try-catch 블록으로 예외를 처리 할 수있는 반면 try-catch 블록은 함수에서 사용할 수 없습니다.
  • 트랜잭션 관리는 프로 시저에서 할 수 있지만 기능에서는 할 수 없습니다.

SQL에서 :

  • 프로 시저가 있습니다 SELECTDML (뿐만 아니라 INSERT, UPDATE, DELETE기능 만 허용하는 반면, 거기에) 문 SELECT안에 문을.
  • SELECT명령문에는 프로 시저를 사용할 수 없지만 명령문에는 함수를 임베드 할 수 있습니다 SELECT.
  • 저장 프로시 저는 WHERE(또는 a HAVING또는 SELECT) 블록의 어느 곳에서나 SQL 문에서 사용할 수 없지만 함수는 사용할 수 있습니다.
  • 테이블을 반환하는 함수는 다른 행 집합으로 취급 될 수 있습니다. JOIN다른 테이블과 함께 블록에 사용할 수 있습니다 .
  • 인라인 함수는 매개 변수를 사용하는 뷰로 생각할 수 있으며 JOIN블록 및 기타 행 집합 작업에 사용할 수 있습니다 .

답변

더 엄격하게, 함수 f는 x = y 인 경우 f (x) = f (y)라는 속성을 따릅니다. 즉 , 동일한 인수로 호출 될 때마다 동일한 결과를 계산 하므로 (따라서 상태를 변경하지 않습니다. 체계.)

따라서 rand () 또는 print ( “Hello”) 등은 함수가 아니라 절차입니다. sqrt (2.0)는 함수 여야하지만, 호출 횟수와 상관없이 관찰 가능한 효과 나 상태 변경은 없으며 항상 1.41과 일부를 반환합니다.