함수는 인수 값 집합에서 단일 값으로의 매핑을 나타내는 값입니다. 함수는 입력 값 집합(인수 값)을 제공하여 호출되고 단일 출력 값(반환 값)을 생성합니다.
함수 작성
함수는 함수 식을 사용하여 작성됩니다.
function-expression:
(
parameter-listopt)return-typeopt=>function-body
function-body:
식
parameter-list:
fixed-parameter-list
fixed-parameter-list,optional-parameter-list
optional-parameter-list
fixed-parameter-list:
parameter
parameter,fixed-parameter-list
parameter:
parameter-name parameter-typeopt
parameter-name:
식별자
parameter-type:
primitive-or-nullable-primitive-type-assertion
return-type:
primitive-or-nullable-primitive-type-assertion
primitive-or-nullable-primitive-type-assertion:
as
primitive-or-nullable-primitive-type
optional-parameter-list:
optional-parameter
optional-parameter,optional-parameter-list
optional-parameter:
optional
매개 변수
primitive-or-nullable-primitive-type:
nullable
opt primitive-type
다음은 정확히 두 개의 값이 필요하고 x해당 값 y 에 연산자를 적용한 + 결과를 생성하는 함수의 예입니다. 함수의 x 매개 변수 목록y일부이며 함수 본문인 매개 변수입니다.x + y
(x, y) => x + y
함수 식을 계산한 결과는 함수-본문을 계산하지 않고 함수 값을 생성하는 것입니다. 이 문서의 규칙으로 함수 값(함수 식과 반대)은 매개 변수 목록과 함께 표시되지만 함수 본문 대신 줄임표(...)가 표시됩니다. 예를 들어 위의 함수 식이 평가되면 다음 함수 값으로 표시됩니다.
(x, y) => ...
다음 연산자는 함수 값에 대해 정의됩니다.
| 연산자 | 결과 |
|---|---|
x = y |
같음 |
x <> y |
같지 않음 |
함수 값의 네이티브 형식은 매개 변수 이름을 나열하고 모든 매개 변수 형식과 반환 function형식을 지정하는 사용자 지정 함수 형식(내장 형식any에서 파생됨)입니다. (이동 함수 형식 에 대한 세부 정보를 위한 함수 형식입니다.)
함수 호출
함수의 함수 본문은 invoke 식을 사용하여 함수 값을 호출하여 실행됩니다. 함수 값을 호출하면 함수 값의 함수 본문 이 평가되고 값이 반환되거나 오류가 발생합니다.
invoke-expression:
primary-expression(argument-listopt)
argument-list:
expression-list
함수 값이 호출될 때마다 값 집합은 함수에 대한 인수라고 하는 인수 목록으로 지정됩니다.
인수 목록은 고정된 수의 인수를 식 목록으로 직접 지정하는 데 사용됩니다. 다음 예제에서는 필드에 함수 값이 있는 레코드를 정의한 다음 레코드의 다른 필드에서 함수를 호출합니다.
[
MyFunction = (x, y, z) => x + y + z,
Result1 = MyFunction(1, 2, 3) // 6
]
함수를 호출할 때 다음이 유지합니다.
함수의 함수 본문을 평가하는 데 사용되는 환경에는 매개 변수와 이름이 같은 각 매개 변수에 해당하는 변수가 포함됩니다. 각 매개 변수의 값은 매개 변수에 정의된 대로 invoke 식의 인수 목록에서 생성된 값에 해당합니다.
함수-본문이 평가되기 전에 함수 인수에 해당하는 모든 식이 평가됩니다.
식 목록 또는 함수 본문의 식을 평가할 때 발생하는 오류가 전파됩니다.
인수 목록에서 생성된 인수 수는 함수의 매개 변수와 호환되어야 합니다. 그렇지 않으면 이유 코드
"Expression.Error"와 함께 오류가 발생합니다. 호환성을 결정하는 프로세스는 매개 변수에 정의되어 있습니다.
매개 변수
매개 변수 목록에는 다음과 같은 두 가지 종류의 매개 변수가 있을 수 있습니다.
필수 매개 변수는 함수가 호출될 때 매개 변수에 해당하는 인수를 항상 지정해야 임을 나타냅니다. 매개 변수 목록에서 먼저 필수 매개 변수를 지정해야 합니다. 다음 예제의 함수는 필수 매개 변수
x를 정의하고y다음을 수행합니다.[ MyFunction = (x, y) => x + y, Result1 = MyFunction(1, 1), // 2 Result2 = MyFunction(2, 2) // 4 ]선택적 매개 변수는 함수가 호출될 때 매개 변수에 해당하는 인수를 지정할 수 있지만 지정할 필요는 없음을 나타냅니다. 함수가 호출될 때 선택적 매개 변수에 해당하는 인수를 지정하지 않으면 값
null이 대신 사용됩니다. 선택적 매개 변수는 매개 변수 목록의 필수 매개 변수 앞에 나타나야 합니다. 다음 예제의 함수는 고정 매개 변수와 선택적 매개x변수y를 정의합니다.[ MyFunction = (x, optional y) => if (y = null) x else x + y, Result1 = MyFunction(1), // 1 Result2 = MyFunction(1, null), // 1 Result3 = MyFunction(2, 2), // 4 ]
함수가 호출될 때 지정된 인수의 수는 매개 변수 목록과 호환되어야 합니다. 함수 A 에 대한 인수 F 집합의 호환성은 다음과 같이 계산됩니다.
값 N이 인수 목록에서
A인수 수를 나타내도록 합니다. 예시:MyFunction() // N = 0 MyFunction(1) // N = 1 MyFunction(null) // N = 1 MyFunction(null, 2) // N = 2 MyFunction(1, 2, 3) // N = 3 MyFunction(1, 2, null) // N = 3 MyFunction(1, 2, {3, 4}) // N = 3필요한 값이 고정 매개 변수의
F수를 나타내고 선택적으로 의 선택적 매개 변수F수를 나타내도록 합니다. 예시:() // Required = 0, Optional = 0 (x) // Required = 1, Optional = 0 (optional x) // Required = 0, Optional = 1 (x, optional y) // Required = 1, Optional = 1A인수는 다음이 true인 경우 함수F와 호환됩니다.- (N >= 고정) 및 (N <= (고정 + 선택적))
- 인수 형식은 '의 해당 매개 변수 형식과
F호환됩니다.
함수에 선언된 반환 형식이 있는 경우 함수 본문의
F결과 값은 다음이 true이면 '의 반환 형식과F호환됩니다.- 함수 매개 변수에 대해 제공된 인수를 사용하여 함수 본문을 평가하여 생성되는 값에는 반환 형식과 호환되는 형식이 있습니다.
함수 본문이 함수의 반환 형식과 호환되지 않는 값을 생성하면 이유 코드
"Expression.Error"에 오류가 발생합니다.
재귀 함수
재귀 함수 값을 작성하려면 범위 지정 연산자(@)를 사용하여 범위 내에서 함수를 참조해야 합니다. 예를 들어 다음 레코드에는 함수를 정의하는 필드와 함수를 Factorial 호출하는 다른 필드가 포함됩니다.
[
Factorial = (x) =>
if x = 0 then 1 else x * @Factorial(x - 1),
Result = Factorial(3) // 6
]
마찬가지로 액세스해야 하는 각 함수에 이름이 있는 한 상호 재귀 함수를 작성할 수 있습니다. 다음 예제에서는 함수의 Factorial 일부가 두 번째 Factorial2 함수로 리팩터링되었습니다.
[
Factorial = (x) => if x = 0 then 1 else Factorial2(x),
Factorial2 = (x) => x * Factorial(x - 1),
Result = Factorial(3) // 6
]
폐쇄
함수는 다른 함수를 값으로 반환할 수 있습니다. 이 함수는 원래 함수에 대한 하나 이상의 매개 변수에 따라 달라질 수 있습니다. 다음 예제에서 필드 MyFunction 와 연결된 함수는 지정된 매개 변수를 반환하는 함수를 반환합니다.
[
MyFunction = (x) => () => x,
MyFunction1 = MyFunction(1),
MyFunction2 = MyFunction(2),
Result = MyFunction1() + MyFunction2() // 3
]
함수가 호출될 때마다 매개 변수 값이 호출될 때 매개 변수 값이 반환되도록 매개 변수 값을 유지하는 새 함수 값이 반환됩니다.
함수 및 환경
매개 변수 외에도 함수 식의 함수 본문은 함수가 초기화될 때 환경에 있는 변수를 참조할 수 있습니다. 예를 들어 필드에 MyFunction 정의된 함수는 바깥쪽 레코드C의 필드에 A 액세스합니다.
[
A =
[
MyFunction = () => C,
C = 1
],
B = A[MyFunction]() // 1
]
MyFunction 호출되면 변수C가 포함되지 않은 환경(B)에서 호출되더라도 변수C의 값에 액세스합니다.
간소화된 선언
각 식은 명명 _ 된 단일 매개 변수(밑줄)를 사용하여 형식화되지 않은 함수를 선언하기 위한 구문 약식입니다.
각 식:
each
each-expression-body
each-expression-body:
function-body
간소화된 선언은 일반적으로 상위 함수 호출의 가독성을 향상시키는 데 사용됩니다.
예를 들어 다음 선언 쌍은 의미상 동일합니다.
each _ + 1
(_) => _ + 1
each [A]
(_) => _[A]
Table.SelectRows( aTable, each [Weight] > 12 )
Table.SelectRows( aTable, (_) => _[Weight] > 12 )