용어의 구체적인 의미는 무엇입니까 : 기능, 방법, 절차 및 서브 루틴?


11

관련 코드 부분을 그룹화하는 데 사용하는 용어의 특정 차이점이 무엇인지 궁금합니다. 나는 때때로 상호 교환 적으로 사용되는 용어를 보았습니다. 많은 OO 언어에서도 키워드 "function"을 사용하여 방법을 정의합니다. (왜?)

당신이 정확하기를 원한다면, 각각의 구체적인 의미는 무엇입니까? 아니면 각 언어가 그것을 부르기로 선택한 것입니까?


내가 알고있는 두 가지 언어 function는 JavaScript와 PHP입니다. 둘 다 메소드가 아닌 (무료 함수) 동일한 키워드를 사용하며 JavaScript의 경우 언어 레벨이 아닌 함수와 메소드가 실제로 구분되지 않습니다.

예 : VB.Net는에 SubA는 Function반환 값없이. 에서 Python어떤 클래스의 일부가 아닌 기능을 가질 수 있으므로이 방법이 아닙니다. 함수 내에서 함수를 선언 할 수도 있고 C #에서도 그렇게 할 수 있습니다. 때때로 그들은 사과와 파인애플과 같은 이유로 다른 이름을 가지고 있습니다. 왜냐하면 그들은 다르기 때문입니다.
Job

불일치가 있다고 생각하는 것을 지금까지 무엇을 발견 했습니까?
JeffO

답변:


20
  • 서브 프로그램, 서브 루틴
    "서브 루틴"은 아마도 어셈블리 언어에서 비롯된 것입니다. 일부 프로세서에는 코드를 구성하고 공통 코드 섹션을 재사용하는 방법으로 서브 루틴을 지원하는 명령이 포함되어 있습니다. 예를 들어, 6502 프로세서에는 JSR (점프에서 서브 루틴으로) 및 RTS (서브 루틴에서 복귀) 명령이있었습니다. 또한 프로그램이 서브 루틴 또는 서브 프로그램이라고도하는 코드 단위의 계층 구조 인 구조적 프로그래밍에 많이 사용되는 것을 기억합니다. IMO는 특정 작업을 완료하기 위해 제어가 일시적으로 전송되는 일부 코드 단위에 대한 가장 일반적인 용어입니다.

  • 기능, 절차
    이것들은 종종 상호 교환 적으로 사용되지만, 일부 언어에서는 구별이 있습니다. 파스칼에서 함수는 값을 반환하는 서브 프로그램이고, 프로시 저는 그렇지 않은 서브 프로그램입니다. C 및 관련 언어에서 모든 서브 프로그램에는 리턴 유형이 있지만 (그렇더라도 void) 구별이 없습니다.

  • method, member function
    두 가지 이름은 같은 것입니다. 기본적으로 주어진 클래스 나 객체와 관련된 함수입니다.

  • 연산자
    모든 언어에는 기본 제공 연산자 세트가 있습니다. C ++와 같은 일부 언어에서 연산자는 재정의 (즉 교체) 및 / 또는 과부하 (새 유형에 대해 정의) 할 수있는 함수입니다.

  • 익명 함수
    이름이없는 함수를 말합니다. 익명 함수는 본질적으로 변수에 지정되거나 후속 사용을 위해 매개 변수로 전달 될 수있는 코드 블록입니다 (예 : 완료 루틴).

  • 클로저, 람다 식, 블록
    클로저는 변수 집합에 바인딩 된 코드입니다. 클로저는 익명 함수와 컨텍스트로 생각합니다.


4
모든 언어가 내장 연산자와 함께 제공되는 것은 아닙니다. Scheme 및 Haskell과 같은 일부는 '+'또는 '>> ='와 같은 이름으로 함수를 정의 할 수 있습니다. 또한 Scheme과 같은 일부 언어에서 "함수"는 참조 투명성을 의미합니다 (예 : 항상 부작용없이 동일한 입력에 대해 동일한 값을 반환 함). 그렇지 않으면 큰 대답입니다.
Tikhon Jelvis 21

지금까지 나는 "연산자"가 2 개의 인수를 가진 함수에 주로 사용되었다는 것을 기억할 수 있습니다. 그것들은 삽입되었다 (인수들 사이의 연산자 :) 2 + 2. ++arg(접두사) 또는 arg++( 접두사) 와 같은 1-arg와 같은 작은 예외가 있습니다 . 나는 보지 못했지만, 비록 많은 후위 연산자 ..
Darek Nędza

-1

언어에 따라 할 수있는 일

  • 구별이 필요하니?
  • 구문에 차이가 있거나 코드에 대해 이야기 할 때 편리합니까?

AFAIK는 Basic에서 무언가를 호출하지 않고 아무것도 반환하지 않지만 인쇄, 파일 쓰기 또는 전역 변수 변경과 같은 부작용이있는 작업을 수행하는 경우이를 프로 시저라고합니다.

무언가를 반환하면 함수라고합니다.

Java와 같은 OOP- 언어에서 나는 '함수'라는 용어를 거의 만나지 않았고 '방법'이라고 말했으며, 함수는 전역 적이며 모든 사람이 호출 할 수있는 것임을 배웠다.

기능성 및 OOP 언어 스칼라에서 메소드를 함수라고 부르지는 않지만 다른 것을 메소드에 전달하면 함수가됩니다.

서브 루틴은 내가 이해하기 위해 다른 루틴에 의해 호출되는 루틴입니다.

요약하면, 나는 모든 언어에 대한 간결한 정의가 있다고 생각하지 않으며 더 패러다임이 있습니다. 이러한 용어를 사용하는 경우 특정 문화를 고려해야합니다. 정의를 먼저 소개해야합니다.


-1

문맥에 따라 모든 단어는 Caleb이 작성한 것과 같은 것과 같거나 매우 다른 것을 의미 할 수 있습니다 (그러나 연산자가 일류 함수 등의 언어가 더 있습니다). 따라서 특정 정의를 내리기가 어렵고 컨텍스트 (프로그래밍 언어)를 알지 않는 한 너무 많이 가정하지 않는 것이 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.