【プログラミング初心者】Swift基礎~演算子~

# はじめに
プログラミングで何かを処理する場合は計算を行ないます。
今回は計算を行うための方法を紹介します。

## 演算子
計算をするとき、数学と同様に式が用いられます。
この式の中で`+`などの記号を使って計算しますが、この記号を**演算子(Operator)**と呼びます。
一方で演算子に計算される値を**被演算子(Operand)**と呼びます。

例えば`let val = 1 + 2`の場合、`=`と`+`が演算子で1、2が被演算子です。
オペランドの型は全て同じ必要があり、`let val = 1 + 0.9`などは許容されません。

演算子には色々種類があるので代表的なものを紹介していきます。

### 代入演算子
#### =
変数を値を格納するときに使用します。

```swift
let val = 1
```
数学で使う`=`は等価を意味しますがプログラム上では代入を意味します。

### 算術演算子
値の数値計算を行うための演算子です。
計算された値の型はオペランドと同じ型になります。
#### +
左右のオペランドを加算した結果を返します。

```swift
let val = 1 + 2  // 3 
```
`+`の場合は文字列など他の型にも対応できる場合があります。

```swift
let val = "文字列を" + "結合"  // "文字列を結合"
```
#### -
左のオペランドから右のオペランドを減算した値を返します。

```swift
let val = 1 - 2  // -1 
```
#### *
左右のオペランドを乗算した値を返します。

```swift
let val = 2 * 3  // 6 
```

#### /
左のオペランドから右のオペランドを除算します。

```swift
let val = 4 / 2  // 2
```
注意が必要なのは先述したように計算された値の型はオペランドと同じ型になります。
つまりオペランドが`Int`型の場合は結果も`Int`型となり整数となります。
割り切れない場合は少数部が切り捨てられます。

```swift
let val = 5 / 2      // 2
let val = 5.0 / 2.0  // 2.5
```

#### %
左のオペランドから右のオペランドを除算した余りを返します。

```swift
let val = 5 / 2  // 1
```

#### +=
変数に右辺の値を加算します。

```swift
var val = 1
val += 9  // val: 10
// val = val + 9 と同義
```

#### -=
変数から右辺の値を減算します。

```swift
var val = 10
val -= 8  // val: 2
// val = val - 8 と同義
```

### 比較演算子
比較演算子は等号、不等号など、左右のオペランドを比較した結果を返します。
結果は真偽値を表す`Bool`型となります。
`Bool`は`true`と`false`２つの値しか取らず、それぞれ真、偽を表します。

#### ==
左右のオペランドが等価か比較します。

```swift
let val1 = 1 == 1 // true
let val2 = 1 == 2 // false
let val3 = "文字列" == "文字列" // true
```

#### !=
左右のオペランドが等価ではないかを比較します。

```swift
let val1 = 1 != 1 // false
let val2 = 1 != 2 // true
let val3 = "文字列" != "文字列" // false
```

#### >
大なりを表し、左右のオペランドを比較した結果を返します。

```swift
let val1 = 1 > 0 // true
let val2 = 1 > 2 // false
let val3 = 1 > 1 // false
```

#### <
小なりを表し、左右のオペランドを比較した結果を返します。

```swift
let val1 = 1 < 0 // false
let val2 = 1 < 2 // true
let val3 = 1 < 1 // false
```

#### >=
大なりイコールを表し、左右のオペランドを比較した結果を返します。

```swift
let val1 = 1 >= 0 // true
let val2 = 1 >= 2 // false
let val3 = 1 >= 1 // true
```

#### <=
小なりイコールを表し、左右のオペランドを比較した結果を返します。

```swift
let val1 = 1 <= 0 // false
let val2 = 1 <= 2 // true
let val3 = 1 <= 1 // true
```

### 論理演算子
ANDやORなどの論理演算を行ないます。
オペランドは`Bool`で結果も`Bool`を返します。

#### !
否定(NOT)を意味します。

```swift
let value1 = true
let result1 = !value // false

let value2 = false
let result2 = !value // true
```

<img width="270" alt="NOT.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326173/e001a82e-1287-ff14-fff4-d563a0e4ed19.png">

|Aの値  |演算結果  |
|---|---|
|true  |false  |
|false  |true  |

#### &&
論理積(AND)を意味します。つまり「AかつB」です。

```swift
let leftValue1 = true
let rightValue1 = true
let result1 = leftValue1 && rightValue1 // true

let leftValue2 = true
let rightValue2 = false
let result2 = leftValue2 && rightValue2 // false
```
<img width="270" alt="AND.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326173/a32c95e7-1c89-34ac-4a88-fe263fcc2835.png">

|Aの値  |Bの値  |演算結果  |
|---|---|---|
|true  |true  |true  |
|true  |false  |false  |
|false  |true  |false  |
|false  |false  |false  |

#### ||
論理和(OR)を意味します。つまり「AまたはB」です。

```swift
let leftValue1 = true
let rightValue1 = false
let result1 = leftValue1 || rightValue1 // true

let leftValue2 = false
let rightValue2 = false
let result2 = leftValue2 || rightValue2 // false
```
<img width="270" alt="OR.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326173/d80c03e5-2fd1-76a3-70da-24fe76cb9439.png">

|Aの値  |Bの値  |演算結果  |
|---|---|---|
|true  |true  |true  |
|true  |false  |true  |
|false  |true  |true  |
|false  |false  |false  |

# 組み合わせる
演算子を１つの式の中に複数入れることも可能です。
算術演算子の場合は数学と同じで乗算、除算から計算されます。
また`()`で括ると括った部分から計算されます。

```swift
let val1 = 1 + 2 - 3 * 4 / 5    // 1
let val2 = (1 + 2 - 3) * 4 / 5  // 0
```

論理演算子も同様に組み合わせることができます。
たとえば「1 < x < 10」を判定する場合以下のメソッドで判定することができます。

```swift
func validate(x: Int) -> Bool {
     return x > 1 && x < 10
}

let result1 = validate(x: 5)   // true
let result2 = validate(x: 15)  // false
```
プログラムではこのように様々な演算子を組み合わせて演算していき、処理を処理を制御します。

# 最後に
今回は代表的な演算子について紹介しました。
紹介した演算子はプログラミング言語において基本的なもので、Swift以外の多言語でもほぼ同様の書き方ができます。
このあたりはかなりの頻度で使うので覚えていきましょう。

今回の内容は以上です。
本記事とは別でプログラミング未経験からiOSアプリ開発が行えるようになることを目的とした記事を連載しています。
連載は以下にまとめていますのでそちらも是非もご覧ください。
http://naoyalog.com/