명명된 매개 변수

Named parameter

컴퓨터 프로그래밍에서 명명된 매개 변수, 명명된 인수 또는 키워드 인수는 함수 호출 내에서 각 매개 변수의 이름을 명확하게 기술하는 함수 호출에 대한 컴퓨터 언어의 지원을 말한다.

개요

명명된 파라미터를 사용하는 함수 호출은 순서가 지정된 값 목록을 제공하는 대신 각 파라미터를 파라미터 이름과 연결함으로써 값이 전달된다는 점에서 일반 함수 호출과 다르다.

예를 들어 명명된 매개 변수를 사용하지 않는 Java 또는 C# 메서드 호출을 고려해 보십시오.

창문의.addNewControl("제목", 20, 50, 100, 50, 진실의); 

Python에서 명명된 매개 변수를 사용하여 통화는 다음과 같이 기록될 수 있다.

창문의.addNewControl(칭호를 붙이다="제목",                      xPosition=20,                      이포지션=50,                      너비=100,                      높이=50,                      드로잉나우=진실의) 

PHP에서 명명된 매개 변수를 사용하여 통화는 다음과 같이 기록될 수 있다.

달러화->addNewControl(칭호를 붙이다: "제목",                        xPosition: 20,                        이포지션: 50,                        너비: 100,                        높이: 50,                        드로잉나우: 진실의); 

위치적 논거가 있는 버전은 더 암시적이다.명명된 인수가 있는 버전은 더 명확하다.주어진 예에 따라 프로그래머는 한 가지 또는 다른 하나를 읽는 것이 더 쉽다고 생각할 수 있다.

프로그래밍 언어에 사용

명명된 매개 변수는 여러 언어로 명시적으로 지원된다.예들의 비 소모품 선택 Ada,[1]C#4.0+,[2]Ceylon[표창 필요한], 콜드 퓨전 생성 언어(CFML)[표창 필요한], 공통 Lisp,[3]Fortran[표창 필요한], IDL[표창 필요한], Kotlin,[4]Mathematica[표창 필요한], PL[표창 필요한], PowerShell[표창 필요한], Python,[5]R,[6]PHP,[7]Ruby,[8]Scala,[9]Sm을 포함한다.Alltalk[표창 필요한], Swift[10]및 VisualBasic.[11]목표-C에는 명명된 매개 변수가 없다는 점에 유의하십시오(메서드 이름의 일부가 명명된 매개 변수처럼 보일 수 있음).[12]

매개변수 순서

명명된 매개 변수가 없는 언어에서는, 언어가 어떤 값을 어떤 목적으로 사용하려고 하는가를 식별할 수 있는 유일한 방법이기 때문에, 함수 호출에서 매개 변수의 순서는 반드시 고정되어 있다.

명명된 매개 변수를 사용하면 일반적으로 각 값에 첨부된 이름이 그 목적을 식별하기 때문에 임의의 순서로 값을 제공할 수 있다.이것은 프로그램의 부분들 사이의 조화를 감소시킨다.몇몇 언어는 명명된 매개 변수를 사용하지만 여전히 특정 순서로 매개 변수를 제공해야 한다.

선택적 파라미터 및 위치 파라미터

명명된 매개변수는 종종 선택적 매개변수와 함께 사용된다.명명된 매개변수가 없으면 선택적 매개변수가 매개변수 목록의 끝에만 나타날 수 있는데, 이는 어떤 값이 누락되었는지 확인할 수 있는 다른 방법이 없기 때문이다.그러나 명명된 선택적 매개변수를 지원하는 언어에서 프로그램은 사용 가능한 매개변수의 하위 집합을 제공할 수 있으며, 이름은 제공된 값을 결정하는 데 사용된다.

옵션 명명된 파라미터와 부분 적용을 모두 지원하는 OCaml과 같은 언어에서 추가적인 복잡성이 발생한다.부분적으로 적용된 함수와 매개변수의 하위 집합이 제공된 함수를 구별하는 것은 일반적으로 불가능하다.OCaml은 모든 선택적 명명된 매개변수 뒤에 위치 매개변수를 요구하여 이러한 모호성을 해결한다. 위치 매개변수의 존재 여부는 함수가 완전히 또는 부분적으로 적용되었는지 여부를 결정하는 데 사용된다.모든 매개변수가 선택사항인 경우, 구현자는 형식 단위의 더미 위치 매개변수를 추가하여 문제를 해결할 수 있다.

MediaWiki에서 코드(변수){{{1}}},{{{2}}}템플릿 등에서, 이름 없는 파라미터(또는 명명된 파라미터의 값)에 대해 첫 번째, 두 번째 등으로 대체된다.1,2, 등; 이것들은 s라고 알려져 있다.

에뮬레이션

명명된 매개 변수가 없는 언어에서, 동일한 이익의 일부는 다른 방법으로 달성될 수 있다.

설명서 포함

문서화로서의 가치는 Java와 같은 언어의 통합 개발 환경(IDE)에서 툴팁을 통해 또는 코멘트(C):

MyFunctionCall(     20,  /* x 좌표 */     50,  /* y 좌표 */     100, /* 폭 */     5,   /* 높이 */     진실의 /* 지금 그림 그리기?*/ ); 

그러나 이것은 견제를 제공하지 않으며, 논쟁의 순서는 여전히 중요하다.

데이터 구조 포함

인수 순서 제한과 일부 값을 지정하지 않은 상태로 두는 기능은 레코드연관 배열을 통과함으로써 달성할 수 있다.

예를 들어, JavaScript에서 이 두 통화는 동등하다.

MyFunctionCall({ xPosition: 20, 이포지션: 50, 너비: 100, 높이: 5,                  드로잉나우: 진실의 }); 
MyFunctionCall({ 너비: 100, 높이: 5, xPosition: 20, 이포지션: 50,                  드로잉나우: 진실의 }); 

C99와 비교:[13]

구조상의 MyParam {     인트로 xPosition;     인트로 이포지션;     인트로 너비;     인트로 높이;     서명이 없는 마를 뜨다 드로잉나우; };  MyParam 매개변수 = { .xPosition = 20, .이포지션 = 50,         .너비 = 100, .높이 = 5, .드로잉나우  = 진실의 }; MyFunctionCall(&매개변수); 

특별 지원

Perl과 2.0 이전 Ruby에는 유사한 관습(일반적으로 해시 또는 옵션 해시라고[14] 함)이 존재하며, 함수 호출 내에서 구분자를 생략하는 것을 특별히 지원한다.예를 들어, 코어 모듈의 Net:FTP 새 함수는 선택적 인수의 해시를 허용한다.[15]

연결된 메서드 호출 포함

객체 지향 프로그래밍 언어에서, 유창한 인터페이스의 한 형태로 명명된 매개변수를 시뮬레이션하기 위해 메서드 체인을 사용하는 것이 가능하다.명명된 각 매개변수는 매개변수 객체를 수정한 다음 객체를 반환하는 매개변수 객체의 메서드로 대체된다.C++에서는 이것을 명명된 매개 변수 숙어라고 부른다.[16]그런 다음 개체는 포함된 매개 변수를 사용하는 함수에 전달될 수 있다.

메서드 체인은 종종 빌더 클래스에서 제공하는 기본값을 재정의하는 방법으로 빌더 패턴과 함께 사용된다.

참고 항목

참조

  1. ^ Reference Manual for the Ada Programming Language. United States Department of Defense. 1983.
  2. ^ BillWagner. "Named and Optional Arguments - C# Programming Guide". docs.microsoft.com. Retrieved 2021-06-16.
  3. ^ "Functions". lispcookbook.github.io. Retrieved 2021-10-28.
  4. ^ "Functions Kotlin". Kotlin Help. Retrieved 2021-06-16.
  5. ^ "8. Compound statements". docs.python.org. Retrieved 2021-10-28.
  6. ^ "10.3 Named arguments and defaults". An Introduction to R. Retrieved 2021-10-28.
  7. ^ "PHP: Function arguments - Manual". www.php.net. Retrieved 2021-06-16.
  8. ^ "Ruby 2 Keyword Arguments". thoughtbot.com. 21 July 2014. Retrieved 2021-10-28.
  9. ^ "Named Arguments". Scala Documentation. Retrieved 2021-06-16.
  10. ^ "Functions — The Swift Programming Language (Swift 5.1)". docs.swift.org. Retrieved 2020-01-27.
  11. ^ KathleenDollard. "Passing Arguments by Position and by Name - Visual Basic". docs.microsoft.com. Retrieved 2021-06-16.
  12. ^ 개발자 라이브러리 - 클래스의 내부 동작을 제공하는 클래스 구현
  13. ^ "Designated Inits (Using the GNU Compiler Collection (GCC))".
  14. ^ Perl 2.9 프로그래밍: 해시
  15. ^ Perl 코어 모듈 Net:FTP
  16. ^ C++ FAQ, 10.20 "이름 매개변수 숙어"란?

외부 링크