基本的な演算子

トップページ » 基本的な演算子

17 Jun 2014 05:36公開

Swiftの基本な演算子は代入演算子 = 、算数演算子 + - * / などがあります。

用語

  • 単項演算子は、単一の値を操作する演算子です。単項前置演算子(-a、!b)、単項後置演算子(i++)があります。
  • 二項演算子は、2つの値を操作する演算子(例えば、2 + 3)で、2つの値の間に置く、中置スタイルです。
  • 三項演算子は、3つの値を操作します。Swiftにおける三項演算子は、三項条件演算子( a ? b : c )のみです。

代入演算子 =

値を初期化または更新します。

let b = 10
var a = 5
a = b // aは10になります

代入の右辺が複数の値を持つタプルである場合、その要素は複数の定数や変数に分解することができます。

let (x, y) = (1, 2) // xは1, yは2になります

エラーを回避するため、Swiftの代入演算子は値を返しません。次の文は無効です。(C言語とObjective-Cの代入演算子とは異なります)

if x = y {
// 無効です。x = y 値を返しません。
}

算術演算子 + - * /

Swiftは、すべての数値タイプの4つの標準算術演算子をサポートしています。

  • 加算(+)
  • 減算(-)
  • 乗算(*)
  • 除算(/)
1 + 2 // equals 3
5 - 3 // equals 2
2 * 3 // equals 6
10.0 / 2.5 // equals 4.0

C言語とObjective-Cでの算術演算子とは異なり、Swift算術演算子は、値のオーバーフローを許しません。オーバーフローさせるために、オーバーフロー演算子をつけることができます。

a &+ b

Swiftの+演算子は文字列と文字の連結操作をサポートします。

"hello, " + "world" // equals "hello, world"
 
let dog: Character = ""
let cow: Character = ""
let dogCow = dog + cow
// dogCow は "犬牛"

剰余演算子 %

剰余演算子( a % b )は、bの整数倍のうち、aよりも絶対値が小さく且つaに最も近い値を、aから引いた値(剰余と呼ばれる)を返します。

注意:
Swiftの剰余演算子( % )において、負数を除数または被乗数に指定した場合の結果には注意してください。
剰余演算子の返す値は、下記の式における [reminder] に当たる値です。

a = (b × some multiplier) + remainder
9 % 4 // equals 1
// 9 = (4 × 2) + 1
 
-9 % 4 // equals -1
// -9 = (4 × -2) + -1

bの符号は無視されます 。つまり、a % bとa % -bは常に同じ結果になります。

浮動小数点の剰余の計算 %

C言語やObjective-Cでの剰余演算子とは異なり、Swiftの剰余演算子は、浮動小数点数を操作することができます。

8 % 2.5 // equals 0.5

インクリメントとデクリメント演算子 + + - -

C言語と同じ定義です。

var i = 0
++i // i は 1
 
var a = 0
let b = ++a // a も b も 1
let c = a++ // a は 2, c は 1

++i と —i は典型的な動作であるため、特別な理由がなければ、++i と —i が推奨されます。

単項プラス演算子 + -

let minusSix = - 6
let alsoMinusSix = + minusSix // alsoMinusSix equals -6

複合代入演算子

var a = 1
a += 2
// a is now equal to 3

比較演算子 == != > < >= <=

Swiftは、すべて標準Cの比較演算子をサポートしています。

  • 等しい( a == b )
  • 等しくない( a != b )
  • 大なり( a > b )
  • 小なり( a < b )
  • ( a >= b )
  • ( a <= b )

Swiftで同一インスタンスの参照であるかどうかを判定するには、=== と !== を使用します。

比較演算子の結果はBool型です。また、多くの場合のような条件文if文と一緒に使用されます。
詳細についてはif文の項を参照してください。

1 == 1 // true, because 1 is equal to 1
2 != 1 // true, because 2 is not equal to 1
2 > 1 // true, because 2 is greater than 1
1 < 2 // true, because 1 is less than 2
1 > = 1 // true, because 1 is greater than or equal to 1
2 <= 1 // false, because 2 is not less than or equal to 1
 
let name = "world"
if name == "world" {
 println("hello, world")
  {1}}{/1} {/
 println("I'm sorry \(name), but I don't recognize you")
}
// prints "hello, world", because name is indeed equal to "world"

三項条件演算子

C言語と同じように、Swiftは三項条件演算子(?:)を使用できます。

condition ? answer1 : answer2

意味は

if condition {
  answer1
} else {
  answer2
}

と同じです。

サンプル

let contentHeight = 40
let hasHeader = true
let rowHeight = contentHeight + ( hasHeader ? 50 : 20 )
// rowHeight is equal to 90

上記コードは下記コードの省略です。

let contentHeight = 40
let hasHeader = true
var rowHeight = contentHeight
if hasHeader {
 rowHeight = rowHeight + 50
} else {
 rowHeight = rowHeight + 20
}
// rowHeight is equal to 90

区間演算子

Swiftには、値の区間を表現するための区間演算子があります。

閉区間演算子 …

閉区間演算子 a…b は、a~b の区間を定義します。

for index in 1...5 {
  println(" \(index) times 5 is \(index * 5)")
}
// 1 times 5 is 5
// 2 times 5 is 10
// 3 times 5 is 15
// 4 times 5 is 20
// 5 times 5 is 25

半開区間演算子 ..

半開区間演算子である a..b は、a~b-1の区間を定義します。

このような区間は、リストの長さまでカウントするループを定義する際、特にゼロオリジンのリストを操作する時に有用です。

let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..count {
  println("Person \(i + 1) is called \(names[i])")
}
// Person 1 is called Anna
// Person 2 is called Alex
// Person 3 is called Brian
// Person 4 is called Jack

論理演算子 ! && ||

Swiftは、C言語の標準論理演算子をサポートしています。

  • 論理否定(!a)
  • 論理積(a && b)
  • 論理和(a || b)

論理否定演算子 !

//
let allowedEntry = false
if !allowedEntry {
  println("ACCESS DENIED")
}
// prints "ACCESS DENIED"

論理積演算子 &&

let enteredDoorCode = true
let passedRetinaScan = false
if enteredDoorCode && passedRetinaScan {
  println("Welcome!")
} else {
  println("ACCESS DENIED")
}
// prints "ACCESS DENIED"

論理和演算子 ||

let hasDoorKey = false
let knowsOverridePassword = true
if hasDoorKey || knowsOverridePassword {
  println("Welcome!")
} else {
  println("ACCESS DENIED")
}
// prints "Welcome!"

論理演算子の組み合わせ

if enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword {
  println("Welcome!")
} else {
  println("ACCESS DENIED")
}
// prints "Welcome!"

明示的な括弧 ()

if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword {
  println("Welcome!")
} else {
  println("ACCESS DENIED")
}
// prints "Welcome!"

シリーズ

記事のリスト

  • 基本的な演算子

レーティング

rating: 0+x

コメント

Add a New Comment
当サイトコンテンツライセンスについて個別な指定がなければCreative Commons Attribution-ShareAlike 3.0 Licenseをベースします。転載や引用は大歓迎です。但し、転載・引用・二次利用の場合は当サイト記事へのURLをリンクし出典を明記してください。各作品を大切にして下さい。 また、記事及びコメントを投稿する皆さまも上記のライセンスを理解した上投稿して下さい。 当サイトのコンテンツは皆さまの投稿で作成されますから、当サイトの意思を反映しておりませんが、第三者の知的財産権などの侵害がある場合、当サイトの運営担当にご連絡ください。