今回は、guard文について学習したので、アウトプットしていきます
※以下の内容は、学習内容のアウトプット用のため、誤りがある場合があります。予めご了承ください。
guard文とは?
guard文を一言でいうと、条件不成立のときに早期退出を行なうための条件分岐文。
基本的な書き方は以下の通りです。
guard 条件式 else{
条件式がfalseの場合に実行される文
guard文が記述されているスコープ外に退出する必要がある
(つまり、returnを記述する必要がある)
}
※{}←スコープ
では、基本的な例を見ていきましょう!
では、基本的な例を見ていきましょう!
func someFunction(){
let value = 99
guard value >= 100 else{
print("100未満の値です")//値が100未満だったので実行される
return
}
someFunction()
実行結果:100未満の値です
guard文で宣言された変数や定数へのアクセス
guard文は、if文と同様にguard-let文が利用できます。
if文を復習したい人は下記のURLをチェック!!
if文とは?("https://qiita.com/syunta061689/items/65d54a58936a5849a67a")
if-let文との違いは、guard-let文で宣言された変数や定数はguard-let文以降でも利用可能ということです。
次の例ではguard-let文で宣言した定数intにアクセスしています。
func someFunction(){
let a: Any = 1 //Any型
guard let int= a as? Int //aをInt型にダウンキャストできますか?
else{//そうでないなら以下を実行してください
print("aはInt型ではありません")
return
}
print("値はInt型の\(int)です")//intはguard文以降でも使用可能!
}
someFunction()
実行結果:値はInt型の1です。
if文との使い分け
では、今度は具体的な例を用いて、if文との使い分けを深堀りしていきましょう.
次の例では、if文とguard文で、2つのInt型を受け取り、両方の値を持っていればその和を返し、どちらかが値を持っていなければnilを返すという処理をしていきます。
if文の例
func add(_ optionalA: Int?,_ optionalB: Int?)-> Int?{
let a: Int
if let unwrappedA = optionalA{
a = unwrappedA
}else{
print("第一引数に値が入っていません")
return nil
}
let b: Int
if let unwrappedB = optionalB{
b = unwrappedB
}else{
print("第引数に値が入っていません")
return nil
}
return a+b
}
add(optional(3)optional(2))//5
guard文の例
func add(_ optionalA: Int?, _ optionalB: Int?)-> Int?{
guard let a = optionalA else{
print("第1引数に値が入っていません")
return nil
}
guard let b = optionalB else{
print("第2引数に値が入っていません")
return nil
}
return a+b
}
add(Optional(3),Optional(2))//5
このように、条件に応じて早期退出するコードは、 guard文を使用して実装した方がシンプルとなります
また、guard文では退出処理を書き忘れた場合にエラーになるため、単純ミスを未然に防げます!