학습
연산자 동작
이 섹션에서는 다양한 M 연산자의 동작을 정의합니다.
식에 여러 연산자가 포함되어 있으면 연산자의 우선 순위에 따라 개별 연산자가 계산되는 순서가 제어됩니다. 예를 들어 식 x + y * z
은 연산자가 x + (y * z)
이진 *
연산자보다 우선 순위가 높기 때문에 계산 +
됩니다. 연산자의 우선 순위는 연결된 문법 프로덕션의 정의에 의해 설정됩니다. 예를 들어 가산 식은 곱하기 식의 시퀀스 또는 +
연산자를 구분 -
하여 +
연산자 및 -
연산자보다 *
우선 순위가 /
낮습니다.
괄호 식 프로덕션을 사용하여 기본 우선 순위 순서를 변경할 수 있습니다.
parenthesized-expression:
(
식)
예시:
1 + 2 * 3 // 7
(1 + 2) * 3 // 9
다음 표에서는 M 연산자를 요약하여 연산자 범주를 우선 순위에서 가장 높은 순서에서 가장 낮은 순서로 나열합니다. 동일한 범주의 연산자는 우선 순위가 같습니다.
범주 | 식 | 설명 |
---|---|---|
주 |
i @ i |
식별자 식 |
(x) | 괄호로 착색된 식 | |
x[i] | 조회 | |
x{y} | 항목 액세스 | |
x(...) | 함수 호출 | |
{x, y, ...} | 목록 초기화 | |
[ i = x, ... ] | 레코드 초기화 | |
... | 구현되지 않음 | |
단항 | + x | ID |
- x | 부정 | |
not
x |
논리적 부정 | |
메타데이터 |
xmeta y |
메타데이터 연결 |
곱하기 | x * y | 곱하기 |
x / y | 과 | |
더하기 | x + y | 더하기 |
x - y | 빼기 | |
관계 | x< y | 보다 작음 |
x > y | 보다 큼 | |
x<= y | 작거나 같음 | |
x >= y | 크거나 같음 | |
등호 | x = y | 같음 |
x<> y | 같지 않음 | |
형식 어설션 |
xas y |
호환되는 nullable-primitive 형식 또는 오류 |
형식 규칙 |
xis y |
호환되는 nullable-primitive 형식 테스트 |
논리적 AND |
xand y |
단락 연결 |
논리적 OR |
xor y |
단락 분리 |
Coalesce |
x?? y |
null 병합 연산자 |
모든 값에는 값에 대한 추가 정보를 전달할 수 있는 연결된 레코드 값이 있습니다. 이 레코드를 값의 메타데이터 레코드 라고 합니다. 메타데이터 레코드는 모든 종류의 값 null
과 연결할 수 있습니다. 이러한 연결의 결과는 지정된 메타데이터가 포함된 새 값입니다.
메타데이터 레코드는 일반 레코드일 뿐이며 일반 레코드가 할 수 있는 모든 필드와 값을 포함할 수 있으며 그 자체에는 메타데이터 레코드가 있습니다. 메타데이터 레코드를 값과 연결하면 "비 침입적"입니다. 메타데이터 레코드를 명시적으로 검사하는 경우를 제외하고 평가에서 값의 동작은 변경되지 않습니다.
모든 값에는 지정되지 않은 경우에도 기본 메타데이터 레코드가 있습니다. 기본 메타데이터 레코드는 비어 있습니다. 다음 예제에서는 표준 라이브러리 함수를 사용하여 텍스트 값의 메타데이터 레코드에 액세스하는 것을 Value.Metadata
보여 줍니다.
Value.Metadata( "Mozart" ) // []
메타데이터 레코드는 일반적으로 값이 새 값을 생성하는 연산자 또는 함수와 함께 사용될 때 유지 되지 않습니다. 예를 들어 연산자를 사용하여 &
두 텍스트 값이 연결된 경우 결과 텍스트 값의 메타데이터는 빈 레코드 []
입니다. 다음 식은 동일합니다.
"Amadeus " & ("Mozart" meta [ Rating = 5 ])
"Amadeus " & "Mozart"
표준 라이브러리는 값 Value.RemoveMetadata
Value.ReplaceMetadata
에서 모든 메타데이터를 제거하고 값의 메타데이터를 대체하는 데 사용할 수 있습니다(메타데이터를 기존 메타데이터로 병합하는 대신).
메타데이터를 전달하는 결과를 반환하는 유일한 연산자는 메타 연산자입니다.
값은 주기적일 수 있습니다. 예시:
let l = {0, @l} in l
// {0, {0, {0, ... }}}
[A={B}, B={A}]
// [A = {{ ... }}, B = {{ ... }}]
M은 레코드, 목록 및 테이블의 생성을 지연 상태로 유지하여 순환 값을 처리합니다. 교차된 지연 구조화된 값의 이점을 얻지 못하는 순환 값을 생성하려고 시도하면 오류가 발생합니다.
[A=B, B=A]
// [A = Error.Record("Expression.Error",
// "A cyclic reference was encountered during evaluation"),
// B = Error.Record("Expression.Error",
// "A cyclic reference was encountered during evaluation"),
// ]
M의 일부 연산자는 구조적 재귀에 의해 정의됩니다. 예를 들어 레코드와 목록의 같음은 각각 해당 레코드 필드와 항목 목록의 결합된 같음으로 정의됩니다.
비순환 값의 경우 구조적 재귀 를 적용하면 값이 유한하게 확장 됩니다. 공유 중첩 값은 반복적으로 트래버스되지만 재귀 프로세스는 항상 종료됩니다.
순환 값은 구조적 재귀를 적용할 때 무한 확장 됩니다. M의 의미 체계는 해당 무한 확장을 특별히 수용하지 않습니다. 예를 들어 같음의 순환 값을 비교하려고 시도하면 일반적으로 리소스가 부족해지고 해당 시도는 예외적으로 종료됩니다.
선택 및 프로젝션 연산자를 사용하면 목록 및 레코드 값에서 데이터를 추출할 수 있습니다.
항목 액세스 식을 사용하여 해당 목록 또는 테이블 내의 0부터 시작하는 위치에 따라 목록이나 테이블에서 값을 선택할 수 있습니다.
item-access-expression:
item-selection
optional-item-selection
item-selection:
primary-expression{
item-selector}
optional-item-selection:
primary-expression{
item-selector} ?
item-selector:
expression
item-access-expressionx{y}
다음을 반환합니다.
목록
x
및 숫자y
의 경우 위치x
의 목록y
항목입니다. 목록의 첫 번째 항목은 서수 인덱스가 0인 것으로 간주됩니다. 요청된 위치가 목록에 없으면 오류가 발생합니다.테이블
x
및 숫자y
의 경우 위치에x
있는 테이블y
의 행입니다. 테이블의 첫 번째 행은 서수 인덱스가 0인 것으로 간주됩니다. 테이블에 요청된 위치가 없으면 오류가 발생합니다.테이블
x
및 레코드y
의 경우 해당 테이블x
열 이름과 일치하는 필드 이름이 있는 필드에 대한 레코드y
의 필드 값과 일치하는 테이블 행입니다. 테이블에 일치하는 고유한 행이 없으면 오류가 발생합니다.
예시:
{"a","b","c"}{0} // "a"
{1, [A=2], 3}{1} // [A=2]
{true, false}{2} // error
#table({"A","B"},{{0,1},{2,1}}){0} // [A=0,B=1]
#table({"A","B"},{{0,1},{2,1}}){[A=2]} // [A=2,B=1]
#table({"A","B"},{{0,1},{2,1}}){[B=3]} // error
#table({"A","B"},{{0,1},{2,1}}){[B=1]} // error
항목 액세스 식은 목록이나 테이블에 x{y}?
위치(또는 일치 항목) null
가 없을 때 반환 y
되는 폼x
도 지원합니다. 일치하는 항목 y
이 여러 대인 경우 오류가 계속 발생합니다.
예시:
{"a","b","c"}{0}? // "a"
{1, [A=2], 3}{1}? // [A=2]
{true, false}{2}? // null
#table({"A","B"},{{0,1},{2,1}}){0}? // [A=0,B=1]
#table({"A","B"},{{0,1},{2,1}}){[A=2]}? // [A=2,B=1]
#table({"A","B"},{{0,1},{2,1}}){[B=3]}? // null
#table({"A","B"},{{0,1},{2,1}}){[B=1]}? // error
항목 액세스는 액세스되는 항목 이외의 목록 또는 테이블 항목을 강제로 평가하지 않습니다. 예시:
{ error "a", 1, error "c"}{1} // 1
{ error "a", error "b"}{1} // error "b"
다음은 항목 액세스 연산 x{y}
자를 평가할 때 유지됩니다.
식을
x
평가하는 동안 발생하거나y
전파되는 오류입니다.식
x
은 목록 또는 테이블 값을 생성합니다.식
y
은 숫자 값을 생성하거나 테이블 값을 생성하는 경우x
레코드 값을 생성합니다.숫자 값을 생성하고 값이 음수
y
이면y
이유 코드"Expression.Error"
와 함께 오류가 발생합니다.숫자 값을 생성하고 값
y
이 개수y
보다 크거나 같으면x
선택적 연산자 폼"Expression.Error"
을 사용하지 않는 한 이유 코드x{y}?
오류가 발생합니다. 이 경우 값null
이 반환됩니다.테이블 값을 생성하고
x
레코드 값을 생성하고 일치하는y
y
항목이 없는 경우x
선택적 연산자 폼"Expression.Error"
을 사용하지 않는 한 이유 코드x{y}?
오류가 발생합니다. 이 경우 값null
이 반환됩니다.테이블 값을 생성하고
x
레코드 값을 생성하고 일치하는 항목이 여러y
y
개인 경우x
이유 코드"Expression.Error"
오류가 발생합니다.
항목 x
선택 과정에서 해당 위치 y
이외의 항목이 평가되지 않습니다. (스트리밍 목록 또는 테이블의 경우 해당 위치 y
앞에 있는 항목 또는 행을 건너뛰어 목록 또는 테이블의 원본에 따라 평가를 발생시킬 수 있습니다.)
필드 액세스 식은 레코드에서 값을 선택하거나 레코드 또는 테이블을 각각 필드나 열이 적은 값으로 프로젝트하는 데 사용됩니다.
field-access-expression:
field-selection
implicit-target-field-selection
프로젝션(projection)
implicit-target-projection
field-selection:
primary-expression field-selector
field-selector:
required-field-selector
optional-field-selector
required-field-selector:
[
field-name]
optional-field-selector:
[
field-name] ?
field-name:
generalized-identifier
quoted-identifier
implicit-target-field-selection:
field-selector
projection:
primary-expression required-projection
primary-expression optional-projection
required-projection:
[
required-selector-list]
선택적 프로젝션:
[
required-selector-list] ?
required-selector-list:
required-field-selector
required-selector-list,
required-field-selector
implicit-target-projection:
required-projection
optional-projection
필드 액세스의 가장 간단한 형태는 필수 필드 선택입니다. 연산 x[y]
자를 사용하여 레코드의 필드를 필드 이름으로 조회합니다. 필드 y
가 없 x
으면 오류가 발생합니다. 양식 x[y]?
은 선택적 필드 선택을 수행하는 데 사용되며 요청된 필드가 레코드에 없는 경우 반환 null
됩니다.
예시:
[A=1,B=2][B] // 2
[A=1,B=2][C] // error
[A=1,B=2][C]? // null
여러 필드의 집합적 액세스는 필요한 레코드 프로젝션 및 선택적 레코드 프로젝션에 대해 연산자가 지원합니다. 연산 x[[y1],[y2],...]
자는 필드 수가 적은 새 레코드에 레코드를 프로젝트합니다(,, <y1
a0/>에서 선택y2
). 선택한 필드가 없으면 오류가 발생합니다. 연산 x[[y1],[y2],...]?
자는 레코드를 선택한 필드가 있는 새 레코드에 y1
y2
...
투영합니다. 필드가 누락 null
된 경우 대신 사용됩니다.
예시:
[A=1,B=2][[B]] // [B=2]
[A=1,B=2][[C]] // error
[A=1,B=2][[B],[C]]? // [B=2,C=null]
양식 [y]
이며 식별자 [y]?
(밑줄)에 대한 약식 참조로 _
지원됩니다. 다음 두 식은 동일합니다.
[A]
_[A]
다음 예제에서는 필드 액세스의 약식 형식을 보여 줍니다.
let _ = [A=1,B=2] in [A] //1
양식 [[y1],[y2],...]
은 [[y1],[y2],...]?
약식으로도 지원되며 다음 두 식도 마찬가지로 동일합니다.
[[A],[B]]
_[[A],[B]]
약식 형식은 짧은 형식과 each
함께 특히 유용합니다. 이 방법은 명명된 _
단일 매개 변수의 함수를 도입하는 방법입니다(자세한 내용은 간체 선언 참조). 두 약식은 함께 일반적인 상위 순서 함수 식을 간소화합니다.
List.Select( {[a=1, b=1], [a=2, b=4]}, each [a] = [b])
// {[a=1, b=1]}
위의 식은 다음과 같은 더 비밀스러운 긴 손과 같습니다.
List.Select( {[a=1, b=1], [a=2, b=4]}, (_) => _[a] = _[b])
// {[a=1, b=1]}
필드 액세스는 액세스 중인 필드 이외의 필드를 강제로 평가하지 않습니다. 예시:
[A=error "a", B=1, C=error "c"][B] // 1
[A=error "a", B=error "b"][B] // error "b"
다음은 필드 액세스 연산x[y]
자, x[y]?
또는 x[[y]]
x[[y]]?
평가될 때 유지됩니다.
식을
x
평가하는 동안 발생한 오류는 전파됩니다.필드를 평가할 때 발생하는 오류는 필드
y
y
와 영구적으로 연결된 다음 전파됩니다. 나중에 필드에y
액세스하면 동일한 오류가 발생합니다.식
x
은 레코드 또는 테이블 값을 생성하거나 오류가 발생합니다.식별자가 존재하지
y
않는 필드의 이름을 지정하면 선택적 연산자x
폼"Expression.Error"
을 사용하지 않는 한 이유 코드...?
오류가 발생합니다. 이 경우 값null
이 반환됩니다.
필드 액세스 프로세스 중에 명명된 x
필드 이외의 필드는 y
평가되지 않습니다.
값에 대한 메타데이터 레코드는 메타 연산자(x meta y
)를 사용하여 수정됩니다.
metadata-expression:
unary-expression
단항식meta
단항식
다음 예제에서는 연산자를 사용하여 메타데이터 레코드를 사용하여 텍스트 값을 생성한 다음 다음을 사용하여 meta
결과 값의 메타데이터 레코드에 Value.Metadata
액세스합니다.
Value.Metadata( "Mozart" meta [ Rating = 5 ] )
// [Rating = 5 ]
Value.Metadata( "Mozart" meta [ Rating = 5 ] )[Rating]
// 5
다음은 메타데이터 결합 연산 x meta y
자를 적용할 때 유지됩니다.
또는
x
식을 평가할y
때 발생하는 오류는 전파됩니다.식은
y
레코드이거나 이유 코드"Expression.Error"
가 있는 오류가 발생해야 합니다.결과 메타데이터 레코드는
x
'와 병합된y
메타데이터 레코드입니다. (레코드 병합의 의미 체계는 다음을 참조하세요 .레코드 병합.)결과 값은 새로 계산된 메타데이터 레코드가
x
연결된 메타데이터 없이 식의 값입니다.
표준 라이브러리는 값 Value.RemoveMetadata
Value.ReplaceMetadata
에서 모든 메타데이터를 제거하고 값의 메타데이터를 대체하는 데 사용할 수 있습니다(메타데이터를 기존 메타데이터로 병합하는 대신). 다음 식은 동일합니다.
x meta y
Value.ReplaceMetadata(x, Value.Metadata(x) & y)
Value.RemoveMetadata(x) meta (Value.Metadata(x) & y)
같음 연산=
자는 두 값이 같은지 확인하는 데 사용됩니다.
같지 않음 연산<>
자는 두 값이 같지 않은지 확인하는 데 사용됩니다.
equality-expression:
relational-expression
relational-expression=
equality-expression
relational-expression<>
equality-expression
예시:
1 = 1 // true
1 = 2 // false
1 <> 1 // false
1 <> 2 // true
null = true // false
null = null // true
메타데이터는 같음 또는 같지 않음 비교의 일부가 아닙니다. 예시:
(1 meta [ a = 1 ]) = (1 meta [ a = 2 ]) // true
(1 meta [ a = 1 ]) = 1 // true
같음 연산 x = y
자를 적용할 때 다음이 유지되며 x <> y
,
또는
x
식을 평가할y
때 발생하는 오류는 전파됩니다.=
연산자에는 값이 같은지,true
그렇지 않으면 결과가false
발생합니다.<>
연산자에는 값이 같은지,false
그렇지 않으면 결과가true
발생합니다.메타데이터 레코드는 비교에 포함되지 않습니다.
및
x
식을 계산하여y
생성된 값이 같은 종류의 값이 아니면 값이 같지 않습니다.및
x
식을 평가하여y
생성되는 값이 동일한 종류의 값인 경우 아래에 정의된 대로 값이 같은지 확인하기 위한 특정 규칙이 있습니다.다음은 항상 true입니다.
(x = y) = not (x <> y)
같음 연산자는 다음 형식에 대해 정의됩니다.
- 값은
null
자체와만 같습니다.
null = null // true
null = true // false
null = false // false
- 논리적 값
true
이며false
자신과만 같습니다. 예시:
true = true // true
false = false // true
true = false // false
true = 1 // false
숫자는 지정된 정밀도를 사용하여 비교됩니다.
두 숫자
#nan
중 하나가 있으면 숫자가 동일하지 않습니다.두 숫자
#nan
모두 없는 경우 숫자 값의 비트 단위 비교를 사용하여 숫자를 비교합니다.#nan
는 자체와 같지 않은 유일한 값입니다.예시:
1 = 1, // true
1.0 = 1 // true
2 = 1 // false
#nan = #nan // false
#nan <> #nan // true
동일한 수의 100나노초 틱을 나타내는 경우 두 기간은 같습니다.
해당 부분의 크기(시간, 분, 초)가 같으면 두 번 같습니다.
해당 부분의 크기(연도, 월, 일)가 같으면 두 날짜가 같습니다.
해당 부분의 크기(연도, 월, 일, 시간, 분, 초)가 같으면 두 날짜/시간이 같습니다.
해당하는 UTC 날짜/시간이 같으면 두 datetimezone이 같습니다. 해당 UTC 날짜/시간에 도달하려면 datetimezone의 datetime 구성 요소에서 시간/분 오프셋을 뺍니다.
서수, 대/소문자 구분, 문화권을 구분하지 않는 비교를 사용하면 두 텍스트 값이 같으며 해당 위치에서 길이가 같고 문자가 같습니다.
다음이 모두 true이면 두 목록 값이 같습니다.
두 목록 모두 동일한 수의 항목을 포함합니다.
목록에서 각 위치에 해당하는 항목의 값은 같습니다. 즉, 목록에 동일한 항목이 포함되어야 할 뿐만 아니라 항목 순서가 같아야 합니다.
예시:
{1, 2} = {1, 2} // true {2, 1} = {1, 2} // false {1, 2, 3} = {1, 2} // false
다음이 모두 true이면 두 레코드가 같습니다.
필드 수가 동일합니다.
한 레코드의 각 필드 이름도 다른 레코드에 있습니다.
한 레코드의 각 필드 값은 다른 레코드의 같은 이름의 필드와 같습니다.
예시:
[ A = 1, B = 2 ] = [ A = 1, B = 2 ] // true [ B = 2, A = 1 ] = [ A = 1, B = 2 ] // true [ A = 1, B = 2, C = 3 ] = [ A = 1, B = 2 ] // false [ A = 1 ] = [ A = 1, B = 2 ] // false
다음이 모두 true이면 두 테이블이 같습니다.
열 수가 동일합니다.
한 테이블의 각 열 이름도 다른 테이블에 있습니다.
행 수는 동일합니다.
각 행의 값은 해당 셀에 있습니다.
예시:
#table({"A","B"},{{1,2}}) = #table({"A","B"},{{1,2}}) // true #table({"A","B"},{{1,2}}) = #table({"X","Y"},{{1,2}}) // false #table({"A","B"},{{1,2}}) = #table({"B","A"},{{2,1}}) // true
함수 값은 자체와 같지만 다른 함수 값과 같거나 같지 않을 수 있습니다. 두 함수 값이 같은 것으로 간주되면 호출될 때 동일하게 동작합니다.
지정된 두 함수 값은 항상 동일한 같음 관계를 갖습니다.
형식 값은 자체와 같지만 다른 형식 값과 같거나 같지 않을 수 있습니다. 두 형식 값이 같은 것으로 간주되면 준수를 쿼리할 때 동일하게 동작합니다.
지정된 두 형식 값은 항상 같은 같음 관계를 갖습니다.
<
, >
및 <=
>=
연산자를 관계형 연산자라고 합니다.
relational-expression:
additive-expression
additive-expression<
관계형 식
additive-expression>
관계형 식
additive-expression<=
관계형 식
additive-expression>=
관계형 식
이러한 연산자는 다음 표와 같이 두 값 간의 상대 순서 관계를 결정하는 데 사용됩니다.
연산 | 결과 |
---|---|
x < y |
true if x is less than y , false 그렇지 않으면 |
x > y |
true 이보다 x 크면 y false 그렇지 않으면 |
x <= y |
true 가 작거나 같으면 x false 그렇지 않으면 |
x >= y |
true 이보다 크거나 같으면 x false 그렇지 않으면 |
예시:
0 <= 1 // true
null < 1 // null
null <= null // null
"ab" < "abc" // true
#nan >= #nan // false
#nan <= #nan // false
다음은 관계형 연산자가 포함된 식을 평가할 때 유지됩니다.
또는
x
피연산자 식을 평가할y
때 발생하는 오류가 전파됩니다.식과
x
식을 모두y
평가하여 생성되는 값은 이진, 날짜, 날짜/시간, datetimezone, 기간, 논리, 숫자, null, 텍스트 또는 시간 값이어야 합니다. 그렇지 않으면 이유 코드"Expression.Error"
와 함께 오류가 발생합니다.두 피연산자 모두 동일한 종류의 값 또는
null
.이어야 합니다. 그렇지 않으면 이유 코드"Expression.Error"
와 함께 오류가 발생합니다.피연산자
null
중 하나 또는 둘 다인 경우 결과는 값입니다null
.바이트 바이트 바이트와 비교되는 바이트
두 날짜는 연도 부분을 비교하여 비교하고, 같으면 월 부분과 같은 경우 일 부분을 비교합니다.
두 날짜/시간은 연도 부분을 비교하여 비교하고, 같으면 월 부분과, 같으면 해당 날짜 부분과, 같으면 시간 부분과, 같으면 분 부분과 두 번째 파트를 비교합니다.
두 datetimezone은 시간/분 오프셋을 빼고 날짜/시간 구성 요소를 비교하여 UTC로 정규화하여 비교됩니다.
두 기간은 나타내는 100나노초 틱의 총 수에 따라 비교됩니다.
두 논리를 비교
true
하여 보다false
큰 것으로 간주됩니다.두 개의
x
숫자와y
IEEE 754 표준의 규칙에 따라 비교됩니다.피연산자 중
#nan
하나가면 모든 관계형 연산자의 결과가false
됩니다.두 피연산자가 모두 없는 경우 연산자는
#nan
min과 max가 나타낼 수 있는 가장 작고 가장 큰 양의 유한 값인 순서 지정-∞ < -max < ... < -min < -0.0 = +0.0 < +min < ... < +max < +∞
과 관련하여 두 부동 소수점 피연산자의 값을 비교합니다. -∞ 및 +∞ M 이름은 다음과 같습니다-#infinity
#infinity
.이 순서 지정의 주목할 만한 효과는 다음과 같습니다.
음수 및 양수 0은 같은 것으로 간주됩니다.
-#infinity
값은 다른 모든 숫자 값보다 작지만 다른-#infinity
숫자 값과 같은 것으로 간주됩니다.#infinity
값은 다른 모든 숫자 값보다 크지만 다른#infinity
숫자 값과 같은 것으로 간주됩니다.
두 텍스트는 문자별 서수, 대/소문자 구분, 문화권을 구분하지 않는 비교를 사용하여 비교됩니다.
두 번은 시간 부분을 비교하여 비교하고, 같으면 분 부분과 같은 경우 두 번째 부분을 비교합니다.
and
및 or
연산자를 조건부 논리 연산자라고 합니다.
logical-or-expression:
논리 및 식
논리 및 식or
논리 또는 식
logical-and-expression:
is-expression
is-expressionand
논리 및 식
연산자는 or
피연산자 중 하나 이상이면 반환 true
됩니다 true
. 오른쪽 피연산자는 왼쪽 피연산자가 아닌 true
경우에만 평가됩니다.
연산자는 and
피연산자 중 하나 이상이면 반환 false
됩니다 false
. 오른쪽 피연산자는 왼쪽 피연산자가 아닌 false
경우에만 평가됩니다.
세로 축에서 or
and
왼쪽 피연산자 식을 계산한 결과와 가로 축에서 오른쪽 피연산자 식을 계산한 결과와 연산자의 진리 테이블이 아래에 나와 있습니다.
and |
true |
false |
null |
error |
---|---|---|---|---|
true |
true |
false |
null |
error |
false |
false |
false |
false |
false |
null |
null |
false |
null |
error |
error |
error |
error |
error |
error |
or |
true |
false |
null |
error |
---|---|---|---|---|
or |
true |
false |
null |
error |
true |
true |
true |
true |
true |
false |
true |
false |
null |
error |
null |
true |
null |
null |
error |
error |
error |
error |
error |
error |
다음은 조건부 논리 연산자가 포함된 식을 평가할 때 유지됩니다.
또는
x
식을 평가할y
때 발생하는 오류는 전파됩니다.조건부 논리 연산자는 형식
logical
및null
에 대해 정의됩니다. 피연산자 값이 이러한 형식이 아니면 이유 코드"Expression.Error"
오류가 발생합니다.결과는 논리적 값입니다.
식
x
에서 식y
은y
계산되지 않는 경우에만x
계산true
됩니다.식
x
에서 식은y
계산되지 않는 경우에만y
계산x
됩니다.false
마지막 두 속성은 조건부 논리 연산자의 "조건부" 한정을 제공합니다. 속성을 "단락"이라고도 합니다. 이러한 속성은 압축 보호 조건자를 작성하는 데 유용합니다. 예를 들어 다음 식은 동일합니다.
d <> 0 and n/d > 1 if d <> 0 then n/d > 1 else false
+
, -
*
및 /
연산자는 산술 연산자입니다.
additive-expression:
multiplicative-expression
additive-expression+
multiplicative-expression
additive-expression-
multiplicative-expression
multiplicative-expression:
metadata- expression
multiplicative-expression*
메타데이터 식
multiplicative-expression/
메타데이터 식
M의 숫자는 다양한 표현을 사용하여 저장되어 다양한 소스에서 들어오는 숫자에 대해 가능한 한 많은 정보를 유지합니다. 숫자는 필요에 따라 한 표현에서 다른 표현으로만 변환됩니다. M에서 두 개의 정밀도가 지원됩니다.
Precision | 의미 체계 |
---|---|
Precision.Decimal |
±1.0 x 10-28에서 ±7.9 x 1028 및 28-29 유효 숫자까지 범위의 128비트 10진수 표현입니다. |
Precision.Double |
가수 및 지수를 사용하는 과학적 표현; 는 64비트 이진 배정밀도 IEEE 754 산술 표준 IEEE 754-2008을 준수합니다. |
산술 연산은 정밀도를 선택하고, 두 피연산자를 해당 정밀도(필요한 경우)로 변환한 다음, 실제 연산을 수행하고, 마지막으로 선택한 정밀도로 숫자를 반환하여 수행됩니다.
기본 제공 산술 연산자(+
, -
, ,*
/
)는 배정밀도를 사용합니다. 표준 라이브러리 함수(Value.Add
, Value.Subtract
, Value.Multiply
, Value.Divide
)를 사용하여 특정 정밀도 모델을 사용하여 이러한 작업을 요청할 수 있습니다.
숫자 오버플로는 불가능
#infinity
합니다. 또는-#infinity
크기가 너무 커서 나타낼 수 없는 값을 나타냅니다.숫자 언더플로는 불가능
0
합니다-0
. 크기가 너무 작아서 나타낼 수 없는 값을 나타냅니다.IEEE 754 특수 값
#nan
(NaN—숫자가 아님)은 0으로 0 나누기와 같은 잘못된 사례를 산술적으로 처리하는 데 사용됩니다.10진수에서 배정밀도로의 변환은 소수 자릿수를 가장 가까운 이중 값으로 반올림하여 수행됩니다.
Double에서 10진수로의 전체 자릿수 변환은 이중 숫자를 가장 가까운 10진수 값으로 반올림하고 필요한 경우 값으로
#infinity
-#infinity
오버플로하여 수행됩니다.
더하기 연산자(x + y
)의 해석은 다음과 같이 계산된 식 x 및 y의 값 종류에 따라 달라집니다.
x | y | 결과 | 해석 |
---|---|---|---|
type number |
type number |
type number |
숫자 합계 |
type number |
null |
null |
|
null |
type number |
null |
|
type duration |
type duration |
type duration |
크기의 숫자 합계 |
type duration |
null |
null |
|
null |
type duration |
null |
|
type
datetime |
type duration |
type
datetime |
기간별 날짜/시간 오프셋 |
type duration |
type
datetime |
type
datetime |
|
type
datetime |
null |
null |
|
null |
type
datetime |
null |
테이블에서 type
datetimetype time
기간 및 일부 형식 datetime의 값을 추가할 때 결과 값은 동일한 형식입니다.
테이블에 나열된 값과 다른 값 조합의 경우 이유 코드 "Expression.Error"
와 함께 오류가 발생합니다. 각 조합은 다음 섹션에서 다룹니다.
두 피연산자 중 하나를 평가할 때 발생하는 오류가 전파됩니다.
두 숫자의 합계는 더하기 연산자를 사용하여 계산되어 숫자를 생성합니다.
예시:
1 + 1 // 2
#nan + #infinity // #nan
숫자에 대한 더하기 연산 +
자는 배정밀도를 사용합니다. 표준 라이브러리 함수 Value.Add
를 사용하여 10진수 정밀도를 지정할 수 있습니다. 다음은 숫자의 합계를 계산할 때 유지됩니다.
배정밀도의 합계는 64비트 이진 더블프레시션 IEEE 754 산술 IEEE 754-2008 규칙에 따라 계산됩니다. 다음 표에서는 0이 아닌 유한 값, 0, 무한대 및 NaN의 가능한 모든 조합의 결과를 나열합니다. 테이블에서
x
y
0이 아닌 유한 값이며z
, 의 결과x + y
입니다.x
크기가 동일하지만 반대 기호y
가 있는 경우z
양수 0입니다. 너무 커서 대상 형식x + y
으로 나타낼 수 없는 경우z
부호x + y
가 같은 무한대입니다.+ y +0 -0 +∞ -∞ NaN x z x x +∞ -∞ NaN +0 y +0 +0 +∞ -∞ NaN -0 y +0 -0 +∞ -∞ NaN +∞ +∞ +∞ +∞ +∞ NaN NaN -∞ -∞ -∞ -∞ NaN -∞ NaN NaN NaN NaN NaN NaN NaN NaN 10진 정밀도의 합계는 정밀도를 잃지 않고 계산됩니다. 결과의 배율은 두 피연산자의 배율보다 큽니다.
두 기간의 합계는 기간으로 표시되는 100nanosecond 틱 수의 합계를 나타내는 기간입니다. 예시:
#duration(2,1,0,15.1) + #duration(0,1,30,45.3)
// #duration(2, 2, 31, 0.4)
날짜/시간x
및 기간을 y
추가하여 x + y
선형 타임라인에서 의 거리가 정확히 크기x
인 새 y
계산할 수 있습니다.
여기서 datetime은 모든 Date
, DateTime
또는 DateTimeZone
Time
null이 아닌 결과를 의미하며 동일한 형식이 됩니다. 기간별 날짜/시간 오프셋은 다음과 같이 계산될 수 있습니다.
epoch 값 이후 날짜/시간을 지정한 경우 다음 정보 요소를 사용하여 새 datetime을 생성합니다.
24시간 동안 y의 크기를 100나노초 틱 수로 나누고 결과의 소수 부분을 잘라내고 epoch 이후 x의 일에 이 값을 추가하는 것과 동일한 epoch 이후의 새 일을 계산합니다.
자정 이후 x의 틱에 y의 크기를 추가하는 것과 동등한 자정 이후 새 틱을 계산하고, 24시간 동안 100나노초 틱 수를 모듈로합니다. x가 자정 이후 틱 값을 지정하지 않으면 값이 0으로 간주됩니다.
변경되지 않은 UTC에서 분 오프셋에 대한 x 값을 복사합니다.
epoch 값 이후의 datetime의 날짜가 지정되지 않은 경우 다음 정보 요소를 지정하여 새 datetime을 생성합니다.
자정 이후 x의 틱에 y의 크기를 추가하는 것과 동등한 자정 이후 새 틱을 계산하고, 24시간 동안 100나노초 틱 수를 모듈로합니다. x가 자정 이후 틱 값을 지정하지 않으면 값이 0으로 간주됩니다.
epoch 이후 며칠 동안 x의 값을 복사하고 UTC에서 분 오프셋을 변경하지 않고 복사합니다.
다음 예제에서는 datetime이 epoch 이후의 일을 지정하는 경우 절대 임시 합계를 계산하는 방법을 보여 줍니다.
#date(2010,05,20) + #duration(0,8,0,0)
//#datetime( 2010, 5, 20, 8, 0, 0 )
//2010-05-20T08:00:00
#date(2010,01,31) + #duration(30,08,0,0)
//#datetime(2010, 3, 2, 8, 0, 0)
//2010-03-02T08:00:00
#datetime(2010,05,20,12,00,00,-08) + #duration(0,04,30,00)
//#datetime(2010, 5, 20, 16, 30, 0, -8, 0)
//2010-05-20T16:30:00-08:00
#datetime(2010,10,10,0,0,0,0) + #duration(1,0,0,0)
//#datetime(2010, 10, 11, 0, 0, 0, 0, 0)
//2010-10-11T00:00:00+00:00
다음 예제에서는 지정된 시간 동안 날짜/시간 오프셋을 기간별로 계산하는 방법을 보여줍니다.
#time(8,0,0) + #duration(30,5,0,0)
//#time(13, 0, 0)
//13:00:00
빼기 연산자(x - y
)의 해석은 다음과 같이 계산된 식 x
y
의 값 종류에 따라 달라집니다.
x | Y | 결과 | 해석 |
---|---|---|---|
type number |
type number |
type number |
숫자 차이 |
type number |
null |
null |
|
null |
type number |
null |
|
type duration |
type duration |
type duration |
크기의 숫자 차이 |
type duration |
null |
null |
|
null |
type duration |
null |
|
type
datetime |
type
datetime |
type duration |
날짜/시간 사이의 기간 |
type
datetime |
type duration |
type
datetime |
무효화된 기간별 날짜/시간 오프셋 |
type
datetime |
null |
null |
|
null |
type
datetime |
null |
테이블에서 type
datetimetype time
일부 형식 datetime의 값에서 기간을 빼면 결과 값은 동일한 형식입니다.
테이블에 나열된 값과 다른 값 조합의 경우 이유 코드 "Expression.Error"
와 함께 오류가 발생합니다. 각 조합은 다음 섹션에서 다룹니다.
두 피연산자 중 하나를 평가할 때 발생하는 오류가 전파됩니다.
두 숫자의 차이는 빼기 연산자를 사용하여 계산되어 숫자를 생성합니다. 예시:
1 - 1 // 0
#nan - #infinity // #nan
숫자에 대한 빼기 연산 -
자는 배정밀도를 사용합니다. 표준 라이브러리 함수 Value.Subtract
를 사용하여 10진수 정밀도를 지정할 수 있습니다. 다음은 숫자 차이를 계산할 때 유지됩니다.
배정밀도의 차이는 64비트 이진 배정밀도 IEEE 754 산술 IEEE 754-2008의 규칙에 따라 계산됩니다. 다음 표에서는 0이 아닌 유한 값, 0, 무한대 및 NaN의 가능한 모든 조합의 결과를 나열합니다. 테이블에서
x
y
0이 아닌 유한 값이며z
, 의 결과x - y
입니다.x
같y
으면z
양수 0입니다. 너무 커서 대상 형식x - y
으로 나타낼 수 없는 경우z
부호x - y
가 같은 무한대입니다.- y +0 -0 +∞ -∞ NaN x z x x -∞ +∞ NaN +0 -y +0 +0 -∞ +∞ NaN -0 -y -0 +0 -∞ +∞ NaN +∞ +∞ +∞ +∞ NaN +∞ NaN -∞ -∞ -∞ -∞ -∞ NaN NaN NaN NaN NaN NaN NaN NaN NaN 10진 정밀도의 차이는 정밀도를 잃지 않고 계산됩니다. 결과의 배율은 두 피연산자의 배율보다 큽니다.
두 기간의 차이는 각 기간이 나타내는 100나노초 틱 수의 차이를 나타내는 기간입니다. 예시:
#duration(1,2,30,0) - #duration(0,0,0,30.45)
// #duration(1, 2, 29, 29.55)
날짜/시간 및 기간을 새 날짜/x
시간을x - y
여기서 datetime은 date
, datetime
또는 datetimezone
time
. 결과 날짜/시간은 선형 타임라인에서 x
정확히 크기 y
(부호 y
반대 방향)에서의 거리를 가집니다. 양수 기간을 빼면 시간을 기준으로 x
역방향 결과를 생성하고 음수 값을 빼면 정시에 전달되는 결과가 생성됩니다.
#date(2010,05,20) - #duration(00,08,00,00)
//#datetime(2010, 5, 19, 16, 0, 0)
//2010-05-19T16:00:00
#date(2010,01,31) - #duration( 30,08,00,00)
//#datetime(2009, 12, 31, 16, 0, 0)
//2009-12-31T16:00:00
두 날짜/시간을t
u
빼 t - u
서 둘 사이의 기간을 계산할 수 있습니다. 여기서 datetime은 date
, datetime
또는 datetimezone
time
. 를 빼서 u
t
생성되는 기간은 에 추가할 t
때 생성 u
되어야 합니다.
#date(2010,01,31) - #date(2010,01,15)
// #duration(16,00,00,00)
// 16.00:00:00
#date(2010,01,15)- #date(2010,01,31)
// #duration(-16,00,00,00)
// -16.00:00:00
#datetime(2010,05,20,16,06,00,-08,00) -
#datetime(2008,12,15,04,19,19,03,00)
// #duration(521,22,46,41)
// 521.22:46:41
음수 t - u
기간이 발생하는 경우 u > t
빼기:
#time(01,30,00) - #time(08,00,00)
// #duration(0, -6, -30, 0)
다음은 다음을 사용하여 두 t - u
- u + (t - u) = t
곱하기 연산자(x * y
)의 해석은 다음과 같이 계산된 식 x 및 y의 값 종류에 따라 달라집니다.
X | Y | 결과 | 해석 |
---|---|---|---|
type number |
type number |
type number |
숫자 제품 |
type number |
null |
null |
|
null |
type number |
null |
|
type duration |
type number |
type duration |
기간의 배수 |
type number |
type duration |
type duration |
기간의 배수 |
type duration |
null |
null |
|
null |
type duration |
null |
테이블에 나열된 값과 다른 값 조합의 경우 이유 코드 "Expression.Error"
와 함께 오류가 발생합니다. 각 조합은 다음 섹션에서 다룹니다.
두 피연산자 중 하나를 평가할 때 발생하는 오류가 전파됩니다.
두 숫자의 곱은 곱하기 연산자를 사용하여 계산되어 숫자를 생성합니다. 예시:
2 * 4 // 8
6 * null // null
#nan * #infinity // #nan
숫자에 대한 곱셈 연산 *
자는 배정밀도를 사용합니다. 표준 라이브러리 함수 Value.Multiply
를 사용하여 소수 자릿수를 지정할 수 있습니다. 다음은 숫자의 곱을 계산할 때 유지됩니다.
배정밀도의 제품은 64비트 이진 배정밀도 IEEE 754 산술 IEEE 754-2008의 규칙에 따라 계산됩니다. 다음 표에서는 0이 아닌 유한 값, 0, 무한대 및 NaN의 가능한 모든 조합의 결과를 나열합니다. 테이블에서
x
y
양수 유한 값입니다.z
의 결과x * y
입니다. 결과가 대상 형식z
에 비해 너무 크면 무한대입니다. 결과가 대상 형식z
에 비해 너무 작으면 0입니다.* +y -y +0 -0 +∞ -∞ NaN +x +z -z +0 -0 +∞ -∞ NaN -x -z +z -0 +0 -∞ +∞ NaN +0 +0 -0 +0 -0 NaN NaN NaN -0 -0 +0 -0 +0 NaN NaN NaN +∞ +∞ -∞ NaN NaN +∞ -∞ NaN -∞ -∞ +∞ NaN NaN -∞ +∞ NaN NaN NaN NaN NaN NaN NaN NaN NaN 10진 정밀도의 제품은 정밀도를 잃지 않고 계산됩니다. 결과의 배율은 두 피연산자의 배율보다 큽니다.
기간 및 숫자의 곱은 기간 피연산자에서 숫자 피연산자의 시간을 나타내는 100nanosecond 틱의 수를 나타내는 기간입니다. 예시:
#duration(2,1,0,15.1) * 2
// #duration(4, 2, 0, 30.2)
나누기 연산자(x / y
)의 해석은 다음과 같이 계산된 식 x
y
의 값 종류에 따라 달라집니다.
X | Y | 결과 | 해석 |
---|---|---|---|
type number |
type number |
type number |
숫자 몫 |
type number |
null |
null |
|
null |
type number |
null |
|
type duration |
type number |
type duration |
기간의 비율 |
type duration |
type duration |
type number |
기간의 숫자 몫 |
type duration |
null |
null |
|
null |
type duration |
null |
테이블에 나열된 값과 다른 값 조합의 경우 이유 코드 "Expression.Error"
와 함께 오류가 발생합니다. 각 조합은 다음 섹션에서 다룹니다.
두 피연산자 중 하나를 평가할 때 발생하는 오류가 전파됩니다.
두 숫자의 몫은 나누기 연산자를 사용하여 계산되어 숫자를 생성합니다. 예시:
8 / 2 // 4
8 / 0 // #infinity
0 / 0 // #nan
0 / null // null
#nan / #infinity // #nan
숫자에 대한 나누기 연산 /
자는 배정밀도를 사용합니다. 표준 라이브러리 함수 Value.Divide
를 사용하여 10진수 정밀도를 지정할 수 있습니다. 다음은 숫자의 몫을 계산할 때 유지됩니다.
배정밀도의 몫은 64비트 이진 배정밀도 IEEE 754 산술 IEEE 754-2008 규칙에 따라 계산됩니다. 다음 표에서는 0이 아닌 유한 값, 0, 무한대 및 NaN의 가능한 모든 조합의 결과를 나열합니다. 테이블에서
x
y
양수 유한 값입니다.z
의 결과x / y
입니다. 결과가 대상 형식z
에 비해 너무 크면 무한대입니다. 결과가 대상 형식z
에 비해 너무 작으면 0입니다./ +y -y +0 -0 +∞ -∞ NaN +x +z -z +∞ -∞ +0 -0 NaN -x -z +z -∞ +∞ -0 +0 NaN +0 +0 -0 NaN NaN +0 -0 NaN -0 -0 +0 NaN NaN -0 +0 NaN +∞ +∞ -∞ +∞ -∞ NaN NaN NaN -∞ -∞ +∞ -∞ +∞ NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 10진 정밀도의 합계는 정밀도를 잃지 않고 계산됩니다. 결과의 배율은 두 피연산자의 배율보다 큽니다.
두 기간의 몫은 기간이 나타내는 100nanosecond 틱 수의 몫을 나타내는 숫자입니다. 예시:
#duration(2,0,0,0) / #duration(0,1,30,0)
// 32
기간 및 숫자의 몫은 기간 x
및 y
숫자 x
로 표현되는 100나노초 틱 수의 몫을 나타내는 기간 y
입니다. 예시:
#duration(2,0,0,0) / 32
// #duration(0,1,30,0)
조합 연산자(x & y
)는 다음과 같은 종류의 값에 대해 정의됩니다.
X | Y | 결과 | 해석 |
---|---|---|---|
type text |
type text |
type text |
Concatenation |
type text |
null |
null |
|
null |
type text |
null |
|
type date |
type time |
type datetime |
Merge |
type date |
null |
null |
|
null |
type time |
null |
|
type list |
type list |
type list |
Concatenation |
type record |
type record |
type record |
Merge |
type table |
type table |
type table |
Concatenation |
을 사용하여 x & y
텍스트 2개, 목록 2개 또는 테이블 값 2개를 연결할 수 있습니다.
다음 예제에서는 텍스트 값을 연결하는 방법을 보여 줍니다.
"AB" & "CDE" // "ABCDE"
다음 예제에서는 목록을 연결하는 방법을 보여 줍니다.
{1, 2} & {3} // {1, 2, 3}
다음은 다음을 사용하여 x & y
두 값을 연결하는 경우 유지합니다.
또는
x
식을 평가할y
때 발생하는 오류는 전파됩니다.오류가 있거나 오류가 있는 항목이
x
y
있으면 오류가 전파되지 않습니다.두 텍스트 값을 연결한 결과는 x 값과 y가 바로 뒤에 있는 텍스트 값입니다. 피연산자 중 하나가 null이고 다른 피연산자 중 하나가 텍스트 값인 경우 결과는 null입니다.
두 목록을 연결한 결과는 뒤에 있는 모든 항목
x
y
이 포함된 목록입니다.두 테이블을 연결한 결과는 두 피연산자 테이블의 열이 결합된 테이블입니다. 열 순서가
x
유지되고 열이 뒤에만 표시되어y
상대 순서가 유지됩니다. 피연산자 중 하나에만 나타나는 열의 경우 다른 피연null
산자의 셀 값을 채우는 데 사용됩니다.
두 레코드를 사용하여 x & y
병합할 수 있으며, 두 레코드의 필드가 모두 x
포함된 레코드를 생성합니다 y
.
다음 예제에서는 레코드 병합을 보여 줍니다.
[ x = 1 ] & [ y = 2 ] // [ x = 1, y = 2 ]
[ x = 1, y = 2 ] & [ x = 3, z = 4 ] // [ x = 3, y = 2, z = 4 ]
다음은 다음을 사용하여 x + y
두 레코드를 병합할 때 유지합니다.
또는
x
식을 평가할y
때 발생하는 오류는 전파됩니다.필드가 둘 다
x
에 표시되고y
값이y
사용됩니다.결과 레코드의 필드 순서는 해당 필드의 순서이며
x
, 그 다음에는 해당 필드의 일부가y
아닌 필드x
가 표시되는y
순서와 같습니다.레코드를 병합해도 값이 평가되지는 않습니다.
필드에 오류가 포함되어 있으므로 오류가 발생하지 않습니다.
결과는 레코드입니다.
날짜를 x
사용하여 y
시간과 x & y
병합할 수 있으며, 둘 다 x
y
의 파트를 결합하는 datetime을 생성합니다.
다음 예제에서는 날짜와 시간을 병합하는 방법을 보여 줍니다.
#date(2013,02,26) & #time(09,17,00)
// #datetime(2013,02,26,09,17,00)
다음은 다음을 사용하여 x + y
두 레코드를 병합할 때 유지합니다.
또는
x
식을 평가할y
때 발생하는 오류는 전파됩니다.결과는 datetime입니다.
+
, -
및 not
연산자는 단항 연산자입니다.
unary-expression:
type-expression
+
단항 식
-
단항 식
not
단항 식
단항 더하기 연산자(+x
)는 다음 종류의 값에 대해 정의됩니다.
X | 결과 | 해석 |
---|---|---|
type number |
type number |
단항 더하기 |
type duration |
type duration |
단항 더하기 |
null |
'null |
다른 값의 경우 이유 코드 "Expression.Error"
오류가 발생합니다.
단항 더하기 연산자를 +
사용하면 숫자, datetime 또는 null 값에 기호를 적용할 수 있습니다. 결과는 동일한 값입니다. 예시:
+ - 1 // -1
+ + 1 // 1
+ #nan // #nan
+ #duration(0,1,30,0) // #duration(0,1,30,0)
단항 더하기 연산 +x
자를 평가할 때 다음이 유지됩니다.
평가할
x
때 발생하는 오류는 전파됩니다.평가
x
결과가 숫자 값이 아니면 이유 코드"Expression.Error"
와 함께 오류가 발생합니다.
단항 빼기 연산자(-x
)는 다음 종류의 값에 대해 정의됩니다.
X | 결과 | 해석 |
---|---|---|
type number |
type number |
부정 |
type duration |
type duration |
부정 |
null |
null |
다른 값의 경우 이유 코드 "Expression.Error"
오류가 발생합니다.
단항 빼기 연산자는 숫자 또는 기간의 기호를 변경하는 데 사용됩니다. 예시:
- (1 + 1) // -2
- - 1 // 1
- - - 1 // -1
- #nan // #nan
- #infinity // -#infinity
- #duration(1,0,0,0) // #duration(-1,0,0,0)
- #duration(0,1,30,0) // #duration(0,-1,-30,0)
단항 빼기 연산 -x
자를 평가할 때 다음이 유지됩니다.
평가할
x
때 발생하는 오류는 전파됩니다.식이 숫자이면 해당 기호가 변경된 식
x
의 숫자 값이 결과입니다. 값이 NaN이면 결과도 NaN입니다.
논리 부정 연산자(not
)는 다음 종류의 값에 대해 정의됩니다.
X | 결과 | 해석 |
---|---|---|
type logical |
type logical |
부정 |
null |
null |
이 연산자는 지정된 논리 값에 대한 논리 not
연산을 계산합니다. 예시:
not true // false
not false // true
not (true and true) // false
다음은 논리 부정 연산 not x
자를 평가할 때 유지됩니다.
평가할
x
때 발생하는 오류는 전파됩니다.식 x를 계산하여 생성된 값은 논리 값이거나 이유 코드
"Expression.Error"
가 있는 오류가 발생해야 합니다. 값이true
면 결과는 .입니다false
. 피연산자인false
경우 결과는 .입니다true
.
결과는 논리적 값입니다.
연산 is
자이며 as
형식 연산자로 알려져 있습니다.
형식 호환성 연산자 x is y
는 다음 종류의 값에 대해 정의됩니다.
X | Y | 결과 |
---|---|---|
type any |
nullable-primitive-type | type logical |
식 x is y
은 지정된 형식 true
이 호환x
되는지를 반환 y
하고, 지정된 형식 false
이 .와 x
호환되지 않는 경우 반환 y
합니다.
y
은 nullable-primitivetype이어야 합니다.
is-expression:
as-expression
is-expressionis
nullable-primitive-type
nullable-primitive-type:
nullable
opt primitive-type
연산자가 지원하는 is
형식 호환성은 일반 형식 호환성의 하위 집합이며 다음 규칙을 사용하여 정의됩니다.
null이면
x
형식, 형식 또는 nullable 형식y
any
인 경우null
호환됩니다.null이 아닌 경우
x
기본 형식x
y
이 .
식을 x is y
계산할 때 다음이 유지됩니다.
- 식을
x
평가할 때 발생하는 오류입니다.
형식 어설션 연산 x as y
자는 다음 형식의 값에 대해 정의됩니다.
X | Y | 결과 |
---|---|---|
type any |
nullable-primitive-type | type any |
식 x as y
은 값 x
이 연산자에 따라 호환 y
된다는 것을 어설션합니다 is
. 호환되지 않으면 오류가 발생합니다.
y
은 nullable-primitive-type이어야 합니다.
as-expression:
equality-expression
as-expressionas
nullable-primitive-type
x as y
식은 다음과 같이 평가됩니다.
형식 호환성 검사가
x is y
수행되고 해당 테스트가 성공하면 어설션이 변경되지 않은 상태로 반환x
됩니다.호환성 검사가 실패하면 이유 코드
"Expression.Error"
와 함께 오류가 발생합니다.
예:
1 as number // 1
"A" as number // error
null as nullable number // null
식을 x as y
계산할 때 다음이 유지됩니다.
- 식을
x
평가할 때 발생하는 오류입니다.
병합 연산자 ??
는 null이 아닌 경우 왼쪽 피연산자의 결과를 반환하고, 그렇지 않으면 오른쪽 피연산자의 결과를 반환합니다. 오른쪽 피연산자는 왼쪽 피연산자가 null인 경우에만 평가됩니다.