English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Swift 运算子の優先順位と結合規則

この記事では、演算子と操作数を持つ式の計算規則について学びます。

Swift演算子の優先順位

演算子優先順位は、特定の数学式を計算するためのルールの集合です。複数の演算子を使用する単一の式において、各部分は演算子優先順位と呼ばれる特定の順序で計算されます。一部の演算子は他の演算子よりも高い優先順位を持ち、式の計算方法に影響を与えます。

演算子優先順位表

以下に、Swiftの演算子の優先順位。表に示されるほど高い順位です。

Swift標準ライブラリ優先順位グループ(高い順に)
演算子グループ
ビット変換優先順位>> &<< &>> >>
乗法演算優先順位&* % & * /
加法優先順位| &+ &- + –  ^
範囲形成優先..< …
型変換優先順位is as
空合演算子優先順位??
比較優先順位!= > < >= <= === ===
論理結合優先順位&&
論理和優先順位||
デフォルト優先順位~>
三元演算子優先順位?:
アロー関数優先順位( )
代入優先順位|= %= /= &<<= &>>= &= *= >>= <<= ^= += -=

例1:Swift演算子の優先順位

let x = 4 + 5 * 5
print(x)

上記のプログラムを実行すると、出力は以下のようになります:

29

上の例では、式を読み進める順序に従うと、出力が期待されるかもしれません45。しかし、乗法演算子の優先順位は加法演算子よりも高いため、式4 + 5 * 5計算されます4 + (5 * 5)。したがって、スクリーンに(x)を出力29。

実行ステップ
ステップ
演算子式から返される値
1*5 * 525
2+4 + 2529
3=print(x)29

例2:複雑な代入演算子を持つSwift演算子の優先順位

var y = 15
y += 10 - 2 * 3
print(y)

上記のプログラムを実行すると、出力は以下のようになります:

19

上の例では、変数 y の式 var y = 15に代入されます15。

次の式 y + = 10-2 * 3において、乗法演算子の優先順位は減法複合代入演算子(+ =)。

したがって、式 y + = 10-2 * 3 計算され y = y + (10-(2 * 3))。

実行ステップ
ステップ演算子式が返す値
1=var y = 1515
2*2 * 36
3--10-64
4+ =15 + 419

Swift演算子の関連性

演算子優先順位で定義された予測ルールがあるため、式を評価する際に複数の同じ優先順位の演算子がある場合に何が起こるかについて疑問に思うかもしれません。演算子の関連性は、同じ優先順位を持つ演算子をどう組み合わせるかを定義します。

Swiftでは、演算子は左結合、右結合または結合がないことができます。表現式中に順序に使用される場合、左結合演算子、操作数は文の左側からグループ化され、右結合演算子および無関係演算子は定義されていません。

演算子結合表

以下の表は、Swift演算子の結合性と優先順位を示しています。

Swift標準ライブラリ結合(優先順位が高い順に)
演算子グループ結合性
按位移位優先順位>>&<<&>> >>
乗法演算優先順位&*%&* /左結合
加法優先順位| &+&-+-^左結合

範囲形成優先順位

.. <...
型変換優先順位is a
空合演算子優先順位??右結合
比較優先順位!=> <> = <= === ===

論理積優先順位

&&左結合
論理和優先順位||左結合
デフォルト優先順位~>
三元演算子優先順位?:右結合
アロー関数優先順位()右結合
代入優先順位| =%= / =&<< =&>> =&= * = >> = << = ^ =右結合

例3:Swift演算子の結合規則

let x =  40  / 2 * 10
print(x)

上記のプログラムを実行すると、出力は以下のようになります:

200

上記のプログラムでは、演算子が左結合を持つ乗法優先グループに属しているため、左から右に計算が行われます。したがって、除法演算は前に実行され、結果は200。もし、まず乗法演算を実行したい場合は、以下のようにします:2 * 10表現を()大括号に括って、以下のように表示します:

let x =  40  / (2 * 10)
print(x)

上記のプログラムを実行すると、出力は以下のようになります:

2

優先順位と結合テーブルを覚える必要はありません。多くの場合、演算子の優先順位と結合規則は自明です。疑問がある場合は、このテーブルを参照してください。また、括弧を使用してコードをより理解しやすくするのが良いでしょう。