【Swift】三項演算子

三項演算子とは、オペランド(被演算子)を 3 つ必要とする演算子で、Bool値 ( true , false ) によって代入する値を分岐できる演算子です。
簡単な分岐であれば、1 行のコードで if文 と同じ処理をする事ができます。
if文 を使って分岐するほどではない時に使います。

前回は 構造体 について書きました。

今回は 三項演算子 について書いていこうと思います。

三項演算子とは

三項演算子とは、オペランド(被演算子)を 3 つ必要とする演算子で、Bool値 ( true , false ) によって代入する値を分岐できる演算子です。
簡単な分岐であれば、1 行のコードで if文 と同じ処理をする事ができます。
if文 を使って分岐するほどではない時に使います。

if文 についてはこちらの記事で紹介しています。

三項演算子の書式

条件式 ? trueだった場合の値 : falseだった場合の値

条件式 の後に ? マークを書きます。
その後に、
true だった場合の値 : false だった場合の値
を書きます。

条件式の結果が
true であれば左辺の値
false であれば右辺の値
が代入されます。

三項演算子を使った例

整数の大きさによって処理を分岐する例です。

var hp = 60
var strategy: String

//三項演算子の例
strategy = hp <= 50 ? "いのちだいじに" : "ガンガンいこうぜ"
print(strategy) //ガンガンいこうぜ

変数 hp には 60 が代入されています。
条件式は hp の値が 50 以下( 50 も含まれる)であれば true 、それ以外であれば false となります。
上の例では、hp の値が 50 以上なので false となり、右辺の値が 変数 strategy に代入されます。

比較演算子 についてはこちらの記事で紹介しています。

if文 で書いた場合

上のコードを if文 で書いた場合の例

var hp = 60
var strategy: String

//三項演算子の例
strategy = hp <= 50 ? "いのちだいじに" : "ガンガンいこうぜ"
print(strategy) //ガンガンいこうぜ

//上のコードをif文で書いた場合
if hp <= 50 {
    strategy = "いのちだいじに"
} else {
    strategy = "ガンガンいこうぜ"
}
print(strategy) //ガンガンいこうぜ

三項演算子を使った分岐は print関数 を抜かすと 1 行で書けるのに対し、同じ処理を if文 で書くと 5 行になってしまいます。
このぐらいの単純な分岐であれば三項演算子を使った方が可読性が高いかもしれません。

分岐を増やしたい場合

分岐を増やしたい場合の書式

条件式a ? trueだった場合の値a : 条件式b ? trueだった場合の値b : falseだった場合の値

条件式 a の後に ? true だった場合の値 a と書きます。
コロン : を書いて 条件式 b を書きます。
その後に ? trueだった場合の値 b : falseだった場合の値
を書きます。

コードが読まれていく順序

最初の 条件式 atrue であれば true だった場合の値 a が代入される。

false であれば次の 条件式 b に進む

条件式 btrue であれば true だった場合の値 b が代入される

false であれば false だった場合の値 が代入される

という流れになります。

三項演算子を使って分岐を増やしたい場合の例

var hp = 0
var strategy: String

//分岐を増やしたい場合の例
strategy = hp == 0 ? "ザオラル!" : hp <= 50 ? "いのちだいじに" : "ガンガンいこうぜ"
print(strategy) //ザオラル!

条件に 変数hp の値が 0 だった場合の処理を追加しました。

if文 で書いた場合

上のコードを if文 で書いた場合の例

var hp = 0
var strategy: String

//分岐を増やしたい場合の例
strategy = hp == 0 ? "ザオラル!" : hp <= 50 ? "いのちだいじに" : "ガンガンいこうぜ"
print(strategy) //ザオラル!

//上のコードをif文で書いた場合の例
if hp == 0 {
    strategy = "ザオラル!"
} else if hp <= 50 {
    strategy = "いのちだいじに"
} else {
    strategy = "ガンガンいこうぜ"
}
print(strategy) //ザオラル!
ternary-operatorコードimg

2 択の単純な分岐であれば三項演算子を使った分岐の方が短いし楽ですが、分岐が増えてくると 1 行とはいえ見づらいと思います。
分岐が増えるかもしれない場合は最初から if文switch文 を使った方がいいかもしれません。
以上 三項演算子 についてでした。

次回は タプル について書いていこうと思います。

実行環境

version
Xcode 14.2 (14C18)
Swift 5.2.4

公式ドキュメント

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/

【Swift】数値型の演算

数値型は大きく分類すると整数型、浮動小数点型に分けられます。
複数のデータを算術演算子を使って演算して、別のデータを生成できます。
演算子のことをオペレータ、演算するデータのことをオペランドとも言いますね。まずは算術演算子の種類を見ていきましょう。

前回は データ型 について記事を書きました。

今回は 数値型の演算 について書いていこうと思います。

数値型の演算とは

数値型は大きく分類すると整数型、浮動小数点型に分けられます。
複数のデータを算術演算子を使って演算して、別のデータを生成できます。
演算子のことをオペレータ、演算するデータのことをオペランドとも言いますね。まずは算術演算子の種類を見ていきましょう。

算術演算子の種類

演算子意味記号
+足し算(加算)プラス
引き算(減算)マイナス
*掛け算(乗算)アスタリスク
/割り算(除算)スラッシュ
%割り算の余り(剰余)パーセント

上記の記号を使って演算していきます。

演算例

+ (加算)

let one = 1 //Int
let two = 2
let three = 3
let four = 4
let five = 5
let six = 6
 
var answer = one + two //演算した結果をanswerに代入

print(answer) //3
print(type(of: answer)) //Int

Int型 の定数を宣言して、演算した結果を 変数 answer に代入しています。ただ 12 を足し算してるだけなので answer には 3 が代入されます。
定数 onetwo は型を定義していないので型推論によって Int型 となり、 Int型 同士の演算なので answer も型推論によって Int型 となります。

※ 演算する時は同一の型同士でなければ演算できないので注意。

(減算)

let one = 1 //Int
let two = 2
let three = 3
let four = 4
let five = 5
let six = 6

var answer2 = four - three

print(answer2) //1
print(type(of: answer2)) //Int

* (乗算)

let one = 1 //Int
let two = 2
let three = 3
let four = 4
let five = 5
let six = 6

var answer3 = five * six

print(answer3) //30
print(type(of: answer3)) //Int

/ (除算)

let one = 1 //Int
let two = 2
let three = 3
let four = 4
let five = 5
let six = 6

var answer4 = six / three

print(answer4) //2
print(type(of: answer4)) //Int

//Int型の演算する際、割り切れない割り算は少数が切り捨てられる
var answer5 = five / two

print(answer5) //2
print(type(of: answer5)) //Int

//小数点以下も扱う場合はFloat型かDouble型で宣言しましょう
let floatFive:Float = 5
let floatTwo:Float = 2

var answer6 = floatFive / floatTwo

print(answer6) //2.5
print(type(of: answer6)) //Float

% (剰余)

let one = 1 //Int
let two = 2
let three = 3
let four = 4
let five = 5
let six = 6

var answer7 = three % two
print(answer7) //1
print(type(of: answer7)) //Int
//3を2で割ると1余るので剰余は1になります
//剰余はInt型以外で演算しようとするとエラーになります

※ 除算 / をする時は型と、小数点以下も扱うのかどうかなど注意が必要です。
※ 剰余 %Int型 以外で演算しようとするとエラーになります。
以上 数値型の演算 についてでした。

次回は 文字列型と文字列の型変換 について書いていこうと思います。

実行環境

version
Xcode 14.2 (14C18)
Swift 5.2.4

公式ドキュメント

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/