함수
함수는 인수 값 집합에서 단일 값으로의 매핑을 나타내는 값입니다. 함수는 입력 값 집합(인수 값)을 제공하여 호출되고 단일 출력 값(반환 값)을 생성합니다.
함수는 함수 식을 사용하여 작성됩니다.
function-expression:
(
parameter-listopt)
function-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:
assertion
function-return-type:
assertion
assertion:
as
nullable-primiitve-type
optional-parameter-list:
optional-parameter
optional-parameter ,
optional-parameter-list
optional-parameter:
optional
매개 변수
nullable-primitve-type
nullable
opt primitive-type
다음은 정확히 두 개의 값이 필요하고 y
해당 값 x
에 연산자를 적용한 +
결과를 생성하는 함수의 예입니다. 함수의 x
매개 변수 목록의 일부이며 x + y
함수 본문인 매개 변수입니다.y
(x, y) => x + y
함수 식을 계산한 결과는 함수-본문을 계산하지 않고 함수 값을 생성하는 것입니다. 이 문서의 규칙으로 함수 값(함수 식과 반대)은 매개 변수 목록과 함께 표시되지만 함수 본문 대신 줄임표(...
)가 표시됩니다. 예를 들어 위의 함수 식이 평가되면 다음 함수 값으로 표시됩니다.
(x, y) => ...
다음 연산자는 함수 값에 대해 정의됩니다.
연산자 | 결과 |
---|---|
x = y |
같음 |
x <> y |
같지 않음 |
함수 값의 네이티브 형식은 매개 변수 이름을 나열하고 모든 매개 변수 형식과 반환 any
형식을 지정하는 사용자 지정 함수 형식(내장 형식function
에서 파생됨)입니다. (이동 함수 형식 에 대한 세부 정보를 위한 함수 형식입니다.)
함수의 함수 본문은 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 ]
함수가 호출될 때 지정된 인수의 수는 매개 변수 목록과 호환되어야 합니다. 함수 F
에 대한 인수 A
집합의 호환성은 다음과 같이 계산됩니다.
값 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 = 1
A
인수는 다음이 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
정의된 함수는 바깥쪽 레코드A
의 필드에 C
액세스합니다.
[
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 )