[CH 5.2]演算子
5270 ワード
演算子の優先順位と連結方向
C言語などの既存言語のハイフネーションでは演算子の優先度がわかりにくい.
ただしswiftでは演算子の優先度が指定されているので、符号化時に混同に注意してください.
優先度の高い演算子は、優先度の低い演算子の前に実行されます.
プログラマが任意に定義したカスタム演算子も、このルールに基づいて実行順序を決定します.
また,演算子演算の結合方向も指定した.
連結方向は、同じ優先度の演算子の間にリストされたときにどの方向からグループ化されるかを示します.
たとえば、
1 + 2 + 3 + 4
という式がある場合、演算子+は同じ優先度を持ち、+の結合方向は左側であるため、(((1 + 2) + 3) + 4)
のように左側からグループ化される.// 스위프트 표준 라이브러리 연산자 정의 중 일부
infix operator === : ComparisonPrecedence
infix operator ~= : ComparisonPrecedence
infix operator &= : AssignmentPrecedence
infix operator % : MultiplicationPrecedence
基本演算子の優先度と結合方向については、swift標準ライブラリの演算子定義を参照してください.しかし,上記のコードをどう見ても,演算子の優先度と結合方向は分からない.これは、演算子の後にコロンを付け、次に書く演算子優先度グループ(prevencegroup)を指定したためです.
swift標準ライブラリには複数の優先度グループが存在します.
// 스위프트 표준 연산자 우선순위 그룹 중 일부
precedencegroup BitwiseShiftPrecedence {
higherThan: MultiplicationPrecedence
}
precedencegroup FunctionArrowPrecedence {
associativity: right
higherThan: AssignmentPrecedence
}
precedencegroup TernaryPrecedence {
associativity: right
higherThan: FunctionArrowPrecedence
}
precedencegroup LogicalDisjunctionPrecedence {
associativity: left
higherThan: TernaryPrecedence
}
上記のコードに示すように、演算子優先度グループには、高、低、相関などの優先度やマージ方向などが指定されていることがわかります.演算子優先度グループの定義から,swift演算子優先度は絶対値ではなく相対値である.
sweeft標準ライブラリの演算子は、優先度グループの優先度でソートされます(優先度が高い)
演算子の優先度が高いほど、同じ行の演算子で優先されます.
import Foundation
let intValue: Int = 1
let resultValue1: Int = intValue << 3 + 5 // 3 + 5 => 13
let resultValue2: Int = 1 * 3 + 5 // 3 + 5 => 8
上記のコードは<,+,*演算を用いてIntタイプのエピタキシャルを計算した.Intタイプの<<演算は
BitwiseShiftPrecedence
演算子優先度グループより優先される.AdditionPrecedence
演算子優先度グループを優先する.また、*演算は
MultiplicationPrecedence
演算子優先度グループよりも優先されるため、+演算が優先される.整理する
今日は5番目のユニットの2番目の演算子の優先度と結合方向を学びました.
Reference
この問題について([CH 5.2]演算子), 我々は、より多くの情報をここで見つけました https://velog.io/@kirri1124/CH5.2-연산자テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol