読み込み中...

Swiftで三項演算子を使おう!初心者のための7つの完全ガイド

Swiftの三項演算子を解説するイラスト付きのガイドブック Swift
この記事は約11分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

三項演算子は、多くのプログラミング言語で利用される便利な演算子の一つです。Swiftも例外ではありません。

この記事を読むことで、Swiftの三項演算子の基本から応用までを学ぶことができるようになります。

初心者の方でも理解しやすいよう、具体的なサンプルコードを交えながら徹底的に解説します。

是非、最後までお付き合いください。

●三項演算子の基本

三項演算子は、名前の通り3つの項を持つ演算子です。その形式は「条件 ? 真の場合の値 : 偽の場合の値」となります。

この演算子を使用すると、if文をより簡潔に表現することができます。

○三項演算子の構文

三項演算子の基本的な使用方法を紹介します。

このコードでは、変数isSunnyを用いて、天気が晴れているかどうかを判定しています。

let isSunny = true
let weather = isSunny ? "晴れ" : "雨"

このコードを実行すると、isSunnytrueであるため、weatherには”晴れ”が格納されます。

それでは、三項演算子を使用せずに同じことを行うif文を見てみましょう。

let isSunny = true
var weather: String

if isSunny {
    weather = "晴れ"
} else {
    weather = "雨"
}

このコードを実行すると、同じくweatherには”晴れ”が格納されます。

しかし、三項演算子を使用した場合の方が簡潔に書けるのがわかりますね。

●三項演算子の使い方:実用的な7つのサンプルコード

Swiftの三項演算子を使うと、コードを簡潔に保つことができます。

ここでは、Swiftでの三項演算子の具体的な使い方を7つのサンプルコードで紹介します。

○サンプルコード1:基本的な条件分岐

三項演算子は、簡単な条件分岐を行う場面で非常に便利です。

下記のサンプルコードは、変数numberの値が10より大きいか小さいかを判定しています。

let number = 12
let result = number > 10 ? "10より大きい" : "10以下"
print(result)

このコードでは、numberの値が12であるため、resultには”10より大きい”という文字列が格納されます。

したがって、print(result)とすると、”10より大きい”という結果が出力されます。

○サンプルコード2:数値の大小比較

数字の大小を比較する際も、三項演算子を使用するとスマートに記述することができます。

下記のサンプルコードでは、abの2つの数字を比較し、大きい方の数字を取得しています。

let a = 5
let b = 8
let largerNumber = a > b ? a : b
print(largerNumber)

このコードでは、aが5で、bが8であるため、largerNumberには8という値が格納されます。

したがって、print(largerNumber)とすると、8という結果が出力されます。

○サンプルコード3:文字列の比較

Swiftにおいて、文字列の比較も三項演算子を使って簡潔に記述することができます。

下記のサンプルコードは、stringAstringBという2つの文字列を比較し、一致するかどうかを確認しています。

let stringA = "Swift"
let stringB = "swift"
let matchResult = stringA.lowercased() == stringB.lowercased() ? "一致しています" : "一致していません"
print(matchResult)

このコードでは、stringAの文字列とstringBの文字列の大文字小文字を無視した比較を行っています。

そのため、matchResultには”一致しています”という文字列が格納されます。

実行すると、”一致しています”という結果が出力されます。

このように三項演算子を使うことで、コードの簡潔性を保ちつつ、効率的な文字列の比較も行うことができます。

○サンプルコード4:Bool値の利用

Bool値の取得も三項演算子で効率的に行えます。

下記のサンプルコードは、変数isTrueがtrueの場合とfalseの場合で、異なるメッセージを取得しています。

let isTrue = true
let boolMessage = isTrue ? "真です" : "偽です"
print(boolMessage)

このコードの中で、isTrueの値がtrueなので、boolMessageには”真です”という文字列が格納されます。

したがって、実行すると”真です”という結果が出力されます。

三項演算子を使ったBool値の取得は、コードの可読性を上げるだけでなく、処理速度の向上にも寄与します。

○サンプルコード5:配列の要素の有無のチェック

Swiftでの配列の操作はとても直感的ですが、三項演算子を使用すると、配列に要素が存在するかどうかを簡単に確認することができます。

下記のサンプルコードは、配列numbersが空であるか、それとも要素を含んでいるかを確認するシンプルな例です。

let numbers = [1, 2, 3]
let message = numbers.isEmpty ? "配列は空です" : "配列には要素が含まれています"
print(message)

このコードでは、numbers配列には3つの数字が含まれています。

そのため、numbers.isEmptyの評価結果はfalseとなります。

この結果を元に、三項演算子が”配列には要素が含まれています”というメッセージをmessage変数に格納します。

結果として、”配列には要素が含まれています”が出力されることになります。

○サンプルコード6:辞書型のキーの存在確認

Swiftでの辞書型の操作も三項演算子で効率的に行うことができます。

下記のサンプルコードは、辞書型userDictionaryから特定のキー"age"が存在するかどうかをチェックする例です。

let userDictionary: [String: Any] = ["name": "Taro", "age": 25]
let ageCheck = userDictionary["age"] != nil ? "ageキーは存在します" : "ageキーは存在しません"
print(ageCheck)

このコードでは、userDictionary"name"キーと"age"キーが含まれています。

三項演算子を使用して、"age"キーが存在するかどうかをチェックし、その結果をageCheck変数に格納します。

実行すると、”ageキーは存在します”という結果が得られます。

○サンプルコード7:nilとの比較

Swiftにおいて、nilは変数や定数が何も値を持たないことを紹介します。

下記のサンプルコードは、userAgenilであるかどうかを三項演算子を使用して確認する例です。

let userAge: Int? = nil
let ageMessage = userAge != nil ? "\(userAge!)歳です" : "年齢情報は存在しません"
print(ageMessage)

このコードでは、userAgeはnilとして定義されているので、userAge != nilの評価結果はfalseとなります。

この結果に基づいて、三項演算子が”年齢情報は存在しません”というメッセージをageMessage変数に格納します。

したがって、実行結果として、”年齢情報は存在しません”が出力されます。

●三項演算子の応用例

Swiftの三項演算子は基本的な使い方だけでなく、さまざまな応用的なシチュエーションにも対応可能です。

ここでは、ネストした三項演算子の使用方法を中心に、その応用的な活用法を解説します。

○サンプルコード8:ネストした三項演算子

三項演算子は、条件に応じて異なる結果を返すのが基本ですが、より複雑な条件判定を行いたい場合には、三項演算子の中にさらに三項演算子を組み込むことができます。

これを「ネストした三項演算子」といいます。

下記のサンプルコードは、ある変数scoreの値に応じて、3つの異なるメッセージを返す例です。

let score = 85
let resultMessage = score >= 90 ? "優秀です" : (score >= 80 ? "良い成績です" : "頑張りましょう")
print(resultMessage) // 出力結果: 良い成績です

このコードでは、まずscoreが90以上であるかを確認します。もし90以上であれば「優秀です」というメッセージを返します。

90未満であれば、次に80以上であるかを確認し、「良い成績です」というメッセージを返します。

それ以外の場合、つまり80未満であれば、「頑張りましょう」というメッセージを返します。

このように、三項演算子をネストすることで、複数の条件を効率的に判定することが可能です。

ただし、ネストした三項演算子はコードの可読性を低下させる恐れがあるため、過度な使用は避けるように心がけましょう。

複数の条件が絡む複雑な判定を行う場合には、if文やswitch文の使用を検討すると良いでしょう。

●注意点と対処法

三項演算子はSwiftでのコードを簡潔に書くための非常に有用なツールです。しかしその利便性には、初心者が陥りやすいいくつかの落とし穴が伴います。

ここでは、三項演算子を使用する際の注意点と、それらの問題を回避するための対処法を詳しく解説します。

○過度なネストに注意

前述のセクションで触れたように、三項演算子をネストすることで複数の条件判定を行うことができます。

しかし、多くのネストを行うと、コードの可読性が低下し、バグの原因となる可能性が高まります。

例えば、次のサンプルコードを考えてみましょう。

let x = 10
let y = 15
let z = 5

let message = x > y ? "xはyより大きい" : (y > z ? "yはzより大きい" : "zが最も大きい")
print(message)

このコードは三項演算子を2回ネストしています。

これだけのネストであれば問題は少ないかもしれませんが、さらに多くの条件が絡む場合、読み手は混乱しやすくなります。

このような場合、if文やswitch文を使用して、条件分岐を明確に表すことが推奨されます。

それにより、他の開発者や、将来の自分がコードを読み返したときの理解が容易になります。

○コードの可読性を保つためのコツ

三項演算子の利点は、簡潔なコードを書けることです。しかし、その簡潔さが逆にコードの可読性を損なうこともあります。

特に、複雑な計算や多くの条件を組み合わせる場合、三項演算子の使用は慎重に検討する必要があります。

下記のサンプルコードは、値の範囲に応じて異なるメッセージを返す例です。

let value = 55
let description = value < 50 ? "低い" : value < 70 ? "中くらい" : "高い"
print(description) // 中くらい

このコードでは、valueの値に応じて、”低い”、”中くらい”、”高い”の3つのメッセージから適切なものを選択しています。

しかし、このような場合、三項演算子を使用するよりも、switch文を使用して条件を明確に示した方が、コードの可読性が向上します。

●カスタマイズ方法

Swiftの三項演算子は、そのままの形で非常に便利ですが、さらに効果的に使うためにカスタマイズする方法もあります。

特に、カスタム関数と組み合わせることで、より複雑なロジックを簡潔に表現することが可能になります。

○カスタム関数との組み合わせ

三項演算子を用いる際、時として独自の関数を組み合わせて使用することで、コードの可読性や再利用性を向上させることができます。

ここでは、カスタム関数と三項演算子を組み合わせた一例を紹介します。

例えば、ある数字が偶数か奇数かを判定する関数を作成する場合、次のようなコードが考えられます。

func isEven(_ num: Int) -> Bool {
    return num % 2 == 0
}

let number = 4
let result = isEven(number) ? "偶数" : "奇数"
print(result) // 偶数

このコードでは、isEvenという関数を定義しています。

この関数は整数を受け取り、その数値が偶数の場合はtrueを、奇数の場合はfalseを返すように設計されています。

そして、この関数を三項演算子と組み合わせることで、数字が偶数か奇数かを簡潔に判定しています。

まとめ

Swiftの三項演算子は、コードの簡潔性や可読性を向上させるための強力なツールです。

このガイドを通して、三項演算子の基本的な使い方から応用例、注意点、そしてカスタマイズ方法までを学ぶことができたと思います。

特に、初心者の方にとっては、この演算子を使うことで多くの条件分岐を簡単に記述できる点が魅力的でしょう。

しかし、その簡潔さゆえに落とし穴も存在するため、使用する際には注意が必要です。

カスタム関数との組み合わせや、適切なネストの方法などを活用して、コードの品質を一層向上させることができます。

しかし、あくまで三項演算子はツールの一つであり、最も適切な場面や方法で使用することが重要です。

Swiftでのプログラミングを学ぶ過程で、三項演算子を適切に使用するスキルは必須と言えるでしょう。

このガイドが、あなたのSwiftにおけるコーディングスキルの向上に役立つことを願っています。