はい、承知いたしました。Swiftプログラミング初心者向けに、プログラミングの基礎知識が一切ない方を対象とした約5000語の詳細な解説記事を作成します。
以下が記事の内容です。
Swift初心者向け徹底解説:プログラミングの基礎知識ゼロから始める第一歩
プログラミングと聞くと、「難しそう」「数学が得意じゃないと無理?」「何から始めたらいいの?」と感じる方も多いかもしれません。でも、安心してください!このガイドは、あなたがプログラミングについて何も知らなくても、Appleが開発した現代的でパワフルなプログラミング言語「Swift」の基本を理解し、簡単なコードを書けるようになることを目指しています。
Swiftは、iPhoneやiPadのアプリ、Macのソフトウェア、Apple Watchのアプリ、Apple TVのアプリなど、Apple製品向けのソフトウェア開発で広く使われています。もちろん、サーバーサイドの開発や、他のプラットフォーム向けのツール開発にも利用されています。Swiftは比較的新しい言語で、読みやすく、安全性が高く、そして高速です。
「でも、プログラミングって何なの?」
「コードって何を書くの?」
「どうやって動かすの?」
そんな疑問を抱いているあなたのために、この記事ではプログラミングの「プ」の字から丁寧に解説していきます。専門用語は最小限にし、たとえ話を交えながら、一つずつステップアップしていきましょう。
さあ、未知の世界へ飛び込む準備はいいですか?Swiftプログラミングの楽しい旅を始めましょう!
1. プログラミングって、そもそも何だろう?
私たちは普段、コンピュータやスマートフォンに「指示」を出して、様々なことをしてもらっています。例えば、アプリを起動する、インターネットで検索する、写真を撮る、音楽を再生するなど、これらはすべてコンピュータへの指示です。
これらの指示は、私たちがボタンを押したり、画面をタップしたりすることで行われますが、コンピュータはその裏側で、もっと細かい「指示の集まり」を実行しています。この「指示の集まり」こそが プログラム です。そして、そのプログラムを作る作業を プログラミング と呼びます。
例えるなら、プログラミングは「コンピュータにしてほしいこと」を、コンピュータが理解できる言葉(プログラミング言語)で書いた「レシピ」を作るようなものです。そのレシピ(プログラム)を実行すると、コンピュータはその通りに動いて、私たちが望む結果を出してくれます。
Swiftは、この「レシピ」を書くための「プログラミング言語」の一つです。
2. コードってどんなもの?
私たちが日常で使う言葉(日本語や英語など)は、人間同士がコミュニケーションをとるために使われます。一方、プログラミング言語は、人間がコンピュータに指示を出すために使われます。
Swiftのようなプログラミング言語で書かれた指示のことを コード (code) と呼びます。コードは、英単語や数字、記号などが組み合わさってできています。最初は呪文のように見えるかもしれませんが、それぞれの単語や記号には決まった意味があり、それを組み合わせてコンピュータへの指示を書いていくのです。
例えば、Swiftで「こんにちは!」と画面に表示させるコードは、後で詳しく見ますが、こんなにシンプルです。
swift
print("こんにちは!")
この一行が、コンピュータに「画面に『こんにちは!』という文字を表示してね」という指示を与えています。
3. どうやってSwiftのコードを書いて、動かすの? (Playgroundを使おう)
コードを書いたら、それをコンピュータが実行できる形にする必要があります。そして、実行した結果を確認します。
Apple製品向けのアプリ開発には、通常 Xcode という統合開発環境(IDE: Integrated Development Environment)を使います。Xcodeは、コードを書くエディタ、書いたコードに間違いがないかチェックする機能、プログラムを実行・テストする機能など、開発に必要な様々なツールが一つにまとまった非常に強力なツールです。Macをお持ちであれば、App Storeから無料でダウンロードできます。
初心者の方がSwiftの基本的なコードを試すのに最も便利なのは、Xcodeに搭載されている Playground です。Playgroundは、書いたコードをその場ですぐに実行し、結果を確認できるインタラクティブな環境です。まるで実験場のように、コードの動作を気軽に試すことができます。
この記事では、Playgroundを使ってSwiftの基本を学んでいきます。
3.1. XcodeのダウンロードとPlaygroundの起動
- もしMacをお持ちでない場合は、残念ながらXcodeはMacでしか使えません。Swiftのコードをオンラインで試せるウェブサイト(例えば、Apple公式の「Swift Tour」のインタラクティブなコードエディタや、Repl.itなどのオンラインIDE)もありますが、本格的に学ぶならMacとXcodeを用意することをお勧めします。
- Macをお持ちの方は、App Storeを開いて「Xcode」を検索し、ダウンロードしてインストールしてください。サイズが大きいので、時間がかかる場合があります。
- Xcodeを起動します。
- Xcodeのウェルカムウィンドウが表示されたら、「Create a new Xcode project」ではなく、メニューバーから「File」→「New」→「Playground…」を選択します。
- テンプレート選択画面が表示されます。macOSの下にある「Blank」テンプレートを選択し、「Next」をクリックします。
- Playgroundを保存する場所とファイル名(例: MyFirstSwiftPlayground)を指定して、「Create」をクリックします。
これで、真っ白なPlaygroundが開きました!画面の左側にコードを書くエリア、右側にコードの実行結果が表示されるエリアがあります。
最初から何行かコードが書かれているかもしれませんが、すべて削除して、まっさらな状態から始めましょう。
4. Swiftコードの第一歩:画面に文字を表示してみよう (print
)
プログラミングの世界で最初に学ぶこととして有名なのが、「Hello, World!」と画面に表示するプログラムです。Swiftでは、これはとても簡単です。
Playgroundのコードエリアに、次のように入力してみてください。
swift
print("Hello, World!")
入力すると同時に、あるいは少し遅れて、Playgroundの右側のエリアに Hello, World!
と表示されるはずです。
おめでとうございます!これがあなたの書いた初めてのSwiftプログラムです!
コードの解説:
print
:これはSwiftに最初から用意されている「命令」の一つです。「画面に何かを表示してね」という意味の命令です。()
:命令の後に続く丸かっこ()
は、その命令を実行するために必要な「情報」や「対象」を指定するために使われます。print
命令の場合は、何を画面に表示するかをこのかっこの中に書きます。"Hello, World!"
:これは、画面に表示したい 文字の並び です。プログラミングの世界では、このような文字の並びを 文字列 (String) と呼びます。Swiftでは、文字列は必ずダブルクォーテーション"
で囲みます。
print
命令は、かっこで囲まれた文字列を画面(Playgroundの場合は右側の実行結果エリア)に出力します。
他の文字を表示することもできます。
swift
print("Swift学習、楽しい!")
print("これは2行目の出力です。")
実行結果エリアには、それぞれの行が出力されます。
Swift学習、楽しい!
これは2行目の出力です。
練習:
- あなたの名前を表示するコードを書いてみましょう。
- 好きな食べ物を表示するコードを書いてみましょう。
5. コードにメモを残そう (//
コメント)
コードを書いていると、「この部分は何のために書いたんだっけ?」と忘れてしまったり、他の人がコードを見たときに分かりにくかったりすることがあります。そんなときのために、コードの中に人間向けのメモを残すことができます。これを コメント と呼びます。
コメントは、コンピュータがプログラムとして実行する際には完全に無視されます。コードを読む人が理解を助けるためだけに存在します。
Swiftでコメントを書くには、2つの方法があります。
-
一行コメント:
//
を行の先頭につけるか、コードの行末につけます。//
から行の終わりまでがコメントになります。swift
// これは一行コメントです。コンピュータはこれを無視します。
print("コメントの例") // この行のコードの説明をここに書くこともできます。 -
複数行コメント:
/*
で始まり*/
で終わる範囲がすべてコメントになります。swift
/*
これは複数行のコメントです。
長い説明を書くときなどに便利です。
この範囲のコードは実行されません。
*/
print("複数行コメントの例")
コードを書く際には、後で自分や他の人がコードを見たときに理解しやすいように、積極的にコメントを活用しましょう。
6. コンピュータにデータを覚えてもらう方法:変数と定数
コンピュータプログラムは、様々な「データ」を扱います。例えば、数値、文字、真偽(Yes/No)などです。これらのデータをプログラムの中で一時的に覚えておき、必要に応じて取り出して使ったり、新しいデータに置き換えたりする必要があります。
データを覚えておくための「箱」のようなものが、変数 (Variable) と 定数 (Constant) です。
6.1. 変数 (var
):中身を変えられる箱
変数は、名前をつけた箱にデータを格納し、プログラムの実行中にその中身を自由に変えることができるものです。
Swiftで変数を宣言(箱を用意すること)するには、var
(variableの略) というキーワードを使います。
“`swift
var message = “こんにちは”
print(message) // 出力: こんにちは
message = “さようなら” // 変数の中身を新しいデータで上書きできます
print(message) // 出力: さようなら
“`
解説:
var message = "こんにちは"
:var
キーワードを使ってmessage
という名前の変数を用意し、そこに"こんにちは"
という文字列を最初に入れています。print(message)
:print
命令で、変数message
の中身を表示しています。message = "さようなら"
:message
という名前の変数に、新しく"さようなら"
という文字列を入れています。元の"こんにちは"
は消えて、"さようなら"
に置き換わります。print(message)
:再びmessage
の中身を表示すると、新しい値である"さようなら"
が表示されます。
変数は、ゲームの得点や、ユーザーが入力した情報、計算の途中結果など、プログラムの実行中に変化する可能性のあるデータを扱うときに使います。
6.2. 定数 (let
):中身を変えられない箱
定数は、名前をつけた箱にデータを格納し、一度データを入れたら、その後は絶対に中身を変えることができないものです。
Swiftで定数を宣言するには、let
キーワードを使います。
“`swift
let pi = 3.14159 // 円周率πは変わらない値なので定数で定義
// pi = 3.0 // エラーになります! 定数の値は変更できません
“`
解説:
let pi = 3.14159
:let
キーワードを使ってpi
という名前の定数を用意し、そこに3.14159
という数値を入れています。- その次の行
pi = 3.0
を書くと、Playgroundはエラーを表示します。「定数には一度だけ値を代入できます」というようなエラーメッセージが出るはずです。これは、定数の値を変更しようとしたためです。
定数は、円周率や税率、プログラムの中で常に同じ値を使うが名前をつけて分かりやすくしておきたい、といった「変わらない値」を扱うときに使います。
Swiftでは、できるだけ定数 (let
) を使うことが推奨されています。 なぜなら、値が変わらないことが保証されるため、コードが予測しやすく、安全になるからです。本当に値を変える必要がある場合にのみ、変数 (var
) を使いましょう。
6.3. 変数名・定数名のルール
変数や定数には好きな名前をつけることができますが、いくつかのルールがあります。
- アルファベット、数字、アンダースコア (
_
) を使うことができます。 - 数字で始めることはできません(例:
1stVariable
はダメ)。 - Swiftのキーワード(
var
,let
,print
,if
など)を名前として使うことはできません。 - 大文字と小文字は区別されます(
myVariable
とmyvariable
は別のものとして扱われます)。
分かりやすい名前をつけることで、コードが読みやすくなります。例えば、ユーザーの年齢を保存するなら userAge
、合計金額なら totalAmount
のように、中身が何であるか想像しやすい名前をつけましょう。
7. データの種類:型 (Type)
先ほどの例で、"こんにちは"
は文字列、3.14159
は数値でした。このように、プログラムで扱うデータには様々な「種類」があります。これを 型 (Type) と呼びます。
Swiftは、型に非常に厳しい(型安全性が高い)言語です。これは、変数や定数には、特定の型のデータしか入れられない、という意味です。例えば、文字を入れる箱に数値を入れたり、数値を入れる箱に文字を入れたりすることは、原則としてできません。これにより、プログラムの間違い(バグ)を早い段階で見つけやすくなります。
Swiftでよく使う基本的な型をいくつか見てみましょう。
7.1. 文字列 (String)
文字の並びを扱う型です。ダブルクォーテーション "
で囲んで表現します。
swift
var greeting: String = "こんにちは"
let appName: String = "My App"
上記の例のように、変数名や定数名の後に : 型名
をつけることで、「この箱にはこの型のデータだけを入れてくださいね」と明示的に指定することができます。これを 型アノテーション と呼びます。
ただし、Swiftは賢いので、多くの場合、あなたが代入するデータを見て自動的に型を判断してくれます。これを 型推論 (Type Inference) と呼びます。
swift
var greeting = "こんにちは" // SwiftがString型だと推論します
let appName = "My App" // SwiftがString型だと推論します
型推論のおかげで、毎回 : String
と書かなくても済むことが多いですが、特に初心者のうちは、どのような型になっているのかを意識するために、しばらくは型アノテーションを書いてみるのも良い練習になります。
文字列を結合するには、+
演算子を使います。
swift
let hello = "Hello"
let world = "World"
let greeting = hello + ", " + world + "!"
print(greeting) // 出力: Hello, World!
また、変数や定数の値を文字列の中に埋め込む 文字列補間 (String Interpolation) という便利な機能もあります。バックスラッシュ \
の後に変数名や定数名を丸かっこ ()
で囲んで記述します。
swift
let name = "Taro"
let age = 30
let message = "私の名前は\(name)で、年齢は\(age)歳です。"
print(message) // 出力: 私の名前はTaroで、年齢は30歳です。
7.2. 整数 (Int)
小数点を含まない数値を扱う型です。正の数、負の数、ゼロを扱えます。
swift
var score: Int = 100
let year: Int = 2023
var negativeNumber: Int = -50
型推論を使う場合:
swift
var score = 100 // SwiftがInt型だと推論します
let year = 2023
7.3. 浮動小数点数 (Double, Float)
小数点を含む数値を扱う型です。より広い範囲の数を表現できますが、わずかな誤差が生じることがあります。Swiftでは、通常 Double
型を使います。
swift
var price: Double = 19.99
let pi: Double = 3.1415926535
型推論を使う場合:
swift
var price = 19.99 // 小数点が含まれるので、SwiftはDouble型だと推論します
let pi = 3.1415926535
Float
型もありますが、通常は Double
を使う方が精度が高いため推奨されます。
7.4. 真偽値 (Bool)
「真 (True)」か「偽 (False)」のどちらか一方の値だけを持つ型です。 Yes/No や ON/OFF の状態を表現するのに使います。
swift
var isStudent: Bool = true
let hasPermission: Bool = false
型推論を使う場合:
swift
var isStudent = true // SwiftがBool型だと推論します
let hasPermission = false
真偽値は、後で学ぶ「条件分岐」などで非常に重要になります。
7.5. 型が違うもの同士の計算や結合
Swiftは型に厳しいため、基本的に型が違うデータ同士を直接計算したり結合したりすることはできません。
“`swift
let number = 10 // Int型
let text = “点” // String型
// let result = number + text // エラー! Int型とString型は直接足せません
“`
もし、数値を文字列と一緒に表示したい場合は、文字列補間を使うか、数値を文字列型に変換する必要があります。
“`swift
let number = 10 // Int型
let text = “点” // String型
// 方法1: 文字列補間
let message = “あなたの得点は(number)(text)です。”
print(message) // 出力: あなたの得点は10点です。
// 方法2: 型変換
let numberAsString = String(number) // Int型からString型に変換
let result = “あなたの得点は” + numberAsString + text + “です。”
print(result) // 出力: あなたの得点は10点です。
“`
このように、必要に応じて型を変換する(キャスト と呼ばれることもあります)という操作が必要になることを覚えておきましょう。
8. 基本的な計算と操作:演算子 (Operator)
プログラムでは、数値の計算や、データの比較、論理的な判断など、様々な操作を行います。これらの操作を行うために使う記号を 演算子 と呼びます。
8.1. 算術演算子
数値の計算に使います。
+
: 足し算-
: 引き算*
: 掛け算/
: 割り算%
: 剰余(割り算のあまり)
“`swift
let a = 10
let b = 3
let sum = a + b // 13
let difference = a – b // 7
let product = a * b // 30
let quotient = a / b // 3 (Int型同士の割り算は小数点以下が切り捨てられます)
let remainder = a % b // 1 (10を3で割ると、3あまり1)
print(“和: (sum)”)
print(“差: (difference)”)
print(“積: (product)”)
print(“商: (quotient)”)
print(“剰余: (remainder)”)
“`
小数点を含む Double
型の割り算は、正確な結果が得られます。
“`swift
let c: Double = 10.0
let d: Double = 3.0
let accurateQuotient = c / d // 3.33333…
print(“正確な商: (accurateQuotient)”)
“`
8.2. 代入演算子
変数や定数に値を格納するために使います。
-
=
:右側の値を左側の変数または定数に代入します。swift
var x = 5
x = 10 // xに10を代入
算術演算子と代入演算子を組み合わせた便利な演算子もあります。
+=
:加算してから代入 (a = a + b
と同じ意味のa += b
)-=
:減算してから代入 (a = a - b
と同じ意味のa -= b
)*=
:乗算してから代入 (a = a * b
と同じ意味のa *= b
)/=
:除算してから代入 (a = a / b
と同じ意味のa /= b
)
swift
var count = 0
count += 1 // count は 1 になる (count = count + 1)
count -= 5 // count は -4 になる (count = count - 5)
8.3. 比較演算子
二つの値を比較し、その結果を Bool
型(true
または false
)で返します。
==
:等しい!=
:等しくない>
:より大きい<
:より小さい>=
:より大きいか等しい<=
:より小さいか等しい
“`swift
let num1 = 10
let num2 = 20
let isEqual = (num1 == num2) // false
let isNotEqual = (num1 != num2) // true
let isGreater = (num1 > num2) // false
let isLess = (num1 < num2) // true
let isGreaterOrEqual = (num1 >= num2) // false
let isLessOrEqual = (num1 <= num2) // true
print(“等しいか? (isEqual)”)
print(“等しくないか? (isNotEqual)”)
// … 他の比較結果も同様に表示
“`
これらの比較演算子は、後で学ぶ「条件分岐」で非常に重要になります。
8.4. 論理演算子
Bool
型の値を組み合わせて、より複雑な真偽の条件を作り出すために使います。
&&
:AND(論理積)。左と右の両方がtrue
の場合にtrue
を返します。||
:OR(論理和)。左か右のどちらか一方、あるいは両方がtrue
の場合にtrue
を返します。!
:NOT(論理否定)。真偽を反転させます。true
ならfalse
、false
ならtrue
を返します。
“`swift
let isSunny = true
let isWarm = false
let isGoodWeather = isSunny && isWarm // false (晴れだけど暖かくない)
let canGoOutside = isSunny || isWarm // true (晴れなら、または暖かければ外出できる)
let isNotSunny = !isSunny // false (晴れではない)
print(“良い天気か? (isGoodWeather)”)
print(“外出できるか? (canGoOutside)”)
print(“晴れではないか? (isNotSunny)”)
“`
9. プログラムの流れを変える:制御フロー
これまでに書いたコードは、上から順番に一行ずつ実行されるだけでした。しかし、実際のプログラムでは、「もし〜なら、この処理を行う」「〜の間、この処理を繰り返す」といったように、状況に応じて実行する処理を変えたり、同じ処理を何度も繰り返したりする必要があります。これを 制御フロー (Control Flow) と呼びます。
Swiftの制御フローには主に「条件分岐」と「ループ」があります。
9.1. 条件分岐 (Conditional Statements)
特定の条件が true
の場合にだけ、特定のコードを実行したいときに使います。
9.1.1. if
文
最も基本的な条件分岐です。「もし、この条件が真(true)ならば、続くコードを実行しなさい」という意味です。
“`swift
let temperature = 25
if temperature > 30 {
print(“暑いですね!”)
}
“`
この例では、temperature
が 30
より大きい場合にだけ print("暑いですね!")
が実行されます。現在の temperature
は 25
なので、条件 temperature > 30
は false
となり、print
の行は実行されません。
9.1.2. if-else
文
条件が true
の場合と false
の場合で、それぞれ異なる処理を行いたいときに使います。「もし、この条件が真ならば最初のコードを実行し、そうでなければ次のコードを実行しなさい」という意味です。
“`swift
let temperature = 25
if temperature > 30 {
print(“暑いですね!”)
} else {
print(“そこまで暑くないですね。”)
}
// 出力: そこまで暑くないですね。
“`
この例では、条件 temperature > 30
が false
なので、else { ... }
の中のコードが実行されます。
9.1.3. if-else if-else
文
複数の条件を順番にチェックしたいときに使います。「もし最初の条件が真なら最初のコードを実行し、そうでなくもし次の条件が真なら次のコードを実行し、それらのどの条件も真でなければ最後のコードを実行しなさい」という意味です。else if
はいくつでも追加できます。else
部分は省略することも可能です。
“`swift
let score = 75
if score >= 90 {
print(“S評価です!”)
} else if score >= 80 {
print(“A評価です!”)
} else if score >= 70 {
print(“B評価です!”)
} else {
print(“C評価です。もっと頑張りましょう。”)
}
// 出力: B評価です!
“`
上から順番に条件をチェックし、最初に true
になった条件のブロックだけが実行されます。この例では、score >= 90
(false), score >= 80
(false), score >= 70
(true) とチェックされ、3番目の条件が true
なので "B評価です!"
が出力されます。
9.1.4. switch
文
一つの値に対して、複数の決まった値や条件のどれに一致するかをチェックし、それぞれのケースに対応する処理を行いたいときに使います。if-else if
を複数書くよりも、switch
の方が読みやすくなる場合があります。
“`swift
let dayOfWeek = “Monday”
switch dayOfWeek {
case “Monday”:
print(“月曜日です。一週間の始まり!”)
case “Friday”:
print(“金曜日です。週末まであと少し!”)
case “Sunday”:
print(“日曜日です。ゆっくり休みましょう。”)
default:
print(“他の曜日です。”)
}
// 出力: 月曜日です。一週間の始まり!
“`
解説:
switch dayOfWeek
:変数dayOfWeek
の値によって処理を切り替えます。case "Monday":
:もしdayOfWeek
の値が"Monday"
ならば、続くコードを実行します。print(...)
:そのケースで実行したいコードです。- Swiftの
switch
は、一致するcase
が見つかると、そのケースのコードを実行した後、自動的にswitch
文の終わりまでジャンプします(C言語などのようにbreak
を書く必要はありません)。 default:
:どのcase
にも一致しなかった場合に実行されるコードです。switch
文を使う場合、すべての可能性を網羅するか、あるいはdefault
ケースを用意する必要があります。これは、Swiftが安全性を重視しているためです。
switch
文は、文字列だけでなく、数値やBool値、後述するEnumなど、様々な型の値に対して使うことができます。また、範囲を指定したり、複数の値を一つの case
で扱ったり、条件を付け加えたりすることもできます。
“`swift
let score = 85
switch score {
case 0..<60: // 0以上60未満の範囲
print(“不可”)
case 60..<70: // 60以上70未満の範囲
print(“可”)
case 70..<80: // 70以上80未満の範囲
print(“良”)
case 80…100: // 80以上100以下の範囲
print(“優”)
default:
print(“無効な点数”)
}
// 出力: 優
``
..<
(は「〜未満」、
…` は「〜以下」を含む範囲を表します。)
9.2. ループ (Loops)
同じ処理を何度も繰り返したいときに使います。
9.2.1. for-in
ループ
特定の範囲の数値や、後で学ぶ「コレクション」(データの集まり)の各要素に対して、繰り返し処理を行いたいときに使います。
“`swift
// 1から5まで繰り返す
for i in 1…5 {
print(“(i)回目の繰り返し”)
}
/ 出力:
1回目の繰り返し
2回目の繰り返し
3回目の繰り返し
4回目の繰り返し
5回目の繰り返し
/
// 0から9まで繰り返す (最後の値を含めない)
for i in 0..<10 {
print(i)
}
/ 出力:
0
1
…
9
/
“`
解説:
for i in 1...5
:1...5
は「1から5までの整数」という範囲を表します。この範囲の各値(1, 2, 3, 4, 5)が順番に、ループの中で使う変数i
に代入されながら、波かっこ{}
の中のコードが繰り返されます。for i in 0..<10
:0..<10
は「0から始まり10の手前まで(0以上10未満)」という範囲を表します。この範囲の各値(0, 1, …, 9)に対してループが実行されます。
繰り返しの中で、現在の繰り返し回数や、処理している要素の値などを使いたい場合に for-in
ループは便利です。
もし、繰り返し回数だけが重要で、繰り返しの値(上記の i
)が必要ない場合は、アンダースコア _
を使うこともできます。
swift
// 「Hello」を3回表示する (繰り返しの値は不要)
for _ in 1...3 {
print("Hello")
}
/* 出力:
Hello
Hello
Hello
*/
9.2.2. while
ループ
特定の条件が true
である間、繰り返し処理を行いたいときに使います。ループに入る前に条件をチェックします。
“`swift
var count = 0 // カウンター変数を初期化
while count < 5 { // 条件: countが5未満の間
print(“Count: (count)”)
count += 1 // countを1増やす(これを忘れると無限ループになる!)
}
/ 出力:
Count: 0
Count: 1
Count: 2
Count: 3
Count: 4
/
“`
解説:
- まず
var count = 0
で、ループの進行を管理するための変数を用意します。 while count < 5
で、ループに入る前の条件をチェックします。最初はcount
は0なので、0 < 5
はtrue
です。- 条件が
true
なので、波かっこ{}
の中のコードprint("Count: \(count)")
とcount += 1
が実行されます。count
が1になります。 - 再び
while
の条件count < 5
をチェックします。count
は1なので1 < 5
はtrue
です。 - これを繰り返し、
count
が4になったときも4 < 5
はtrue
なのでループが実行され、count
は5になります。 - 次に条件
count < 5
をチェックすると、count
は5なので5 < 5
はfalse
となります。 - 条件が
false
になったので、ループは終了し、次のコードに進みます。
while
ループを使う際は、ループのどこかで必ず条件が false
になるように、ループ内で変数を変更する処理を忘れないようにしましょう。そうしないと、ループが永遠に終わらない 無限ループ になってしまい、プログラムが固まるなどの問題が発生します。
9.2.3. repeat-while
ループ
まず最初に一度コードを実行し、その後の条件が true
である間、繰り返し処理を行いたいときに使います。ループに入った後に条件をチェックします。
“`swift
var count = 0
repeat {
print(“Count (repeat-while): (count)”)
count += 1
} while count < 5
/ 出力:
Count (repeat-while): 0
Count (repeat-while): 1
Count (repeat-while): 2
Count (repeat-while): 3
Count (repeat-while): 4
/
“`
while
ループとの違いは、条件をチェックするタイミングです。repeat-while
は、たとえ最初の時点で条件が false
であっても、最低一度はループの中のコードが実行されるという特徴があります。
“`swift
var i = 10 // 最初の時点で条件はfalse
while i < 5 {
print(“whileループの中”) // これは実行されない
}
repeat {
print(“repeat-whileループの中”) // これは一度だけ実行される
} while i < 5
// 出力: repeat-whileループの中
“`
10. データの集まりを扱う:コレクション (Collections)
これまでは、変数や定数に一つのデータを入れて扱ってきました。しかし、プログラムでは複数の関連するデータをまとめて扱いたいことがよくあります。例えば、ユーザーのリスト、商品の価格リスト、単語とその定義の組み合わせなどです。
Swiftには、このようなデータの集まり(コレクション)を扱うための便利な型がいくつか用意されています。主なものは、配列 (Array)、辞書 (Dictionary)、集合 (Set) です。
10.1. 配列 (Array)
順序が決まっていて、同じ型の複数のデータを格納できるコレクションです。各要素は、0から始まる インデックス (Index) という番号でアクセスできます。
配列は角かっこ []
を使って表現します。
“`swift
// 文字列の配列
var shoppingList = [“たまご”, “牛乳”, “パン”]
// 整数の配列
let primeNumbers = [2, 3, 5, 7, 11]
“`
型アノテーションをつける場合は、要素の型の後に []
をつけます。
swift
var shoppingList: [String] = ["たまご", "牛乳", "パン"]
let primeNumbers: [Int] = [2, 3, 5, 7, 11]
空の配列を作るには、型を指定して初期化します。
swift
var emptyArray: [String] = []
// または
var anotherEmptyArray = [String]()
配列の操作
-
要素数を知る:
.count
を使います。swift
print(shoppingList.count) // 出力: 3 -
配列が空かどうかチェックする:
.isEmpty
を使います。swift
print(shoppingList.isEmpty) // 出力: false
print(emptyArray.isEmpty) // 出力: true -
要素にアクセスする: インデックス(0から始まる番号)を角かっこ
[]
で指定します。swift
print(shoppingList[0]) // 出力: たまご (最初の要素)
print(shoppingList[2]) // 出力: パン (3番目の要素)
// print(shoppingList[3]) // エラー! 存在しないインデックスにアクセスしようとした
存在しないインデックスにアクセスしようとすると、プログラムがクラッシュする原因になるので注意が必要です。 -
要素を変更する: 特定のインデックスを指定して、新しい値を代入します。
swift
shoppingList[1] = "チョコレート" // 2番目の要素を更新
print(shoppingList) // 出力: ["たまご", "チョコレート", "パン"] -
要素を追加する:
.append()
メソッドを使うか、+=
演算子を使います。“`swift
shoppingList.append(“りんご”)
print(shoppingList) // 出力: [“たまご”, “チョコレート”, “パン”, “りんご”]shoppingList += [“バナナ”, “オレンジ”] // 複数の要素を追加
print(shoppingList) // 出力: [“たまご”, “チョコレート”, “パン”, “りんご”, “バナナ”, “オレンジ”]
“` -
要素を挿入する:
.insert(at:)
メソッドを使います。swift
shoppingList.insert("いちご", at: 0) // インデックス0に挿入
print(shoppingList) // 出力: ["いちご", "たまご", "チョコレート", "パン", "りんご", "バナナ", "オレンジ"] -
要素を削除する:
.remove(at:)
メソッドや.removeLast()
メソッドを使います。“`swift
let firstItem = shoppingList.remove(at: 0) // インデックス0の要素を削除し、その値を返す
print(firstItem) // 出力: いちご
print(shoppingList) // 出力: [“たまご”, “チョコレート”, “パン”, “りんご”, “バナナ”, “オレンジ”]let lastItem = shoppingList.removeLast() // 最後の要素を削除し、その値を返す
print(lastItem) // 出力: オレンジ
print(shoppingList) // 出力: [“たまご”, “チョコレート”, “パン”, “りんご”, “バナナ”]
“` -
配列をループ処理する:
for-in
ループを使うと、配列の各要素を順番に取り出して処理できます。swift
for item in shoppingList {
print("買うもの: \(item)")
}
/* 出力:
買うもの: たまご
買うもの: チョコレート
買うもの: パン
買うもの: りんご
買うもの: バナナ
*/
インデックスも一緒に使いたい場合は、.enumerated()
を使います。swift
for (index, item) in shoppingList.enumerated() {
print("\(index + 1}番目: \(item)")
}
/* 出力:
1番目: たまご
2番目: チョコレート
3番目: パン
4番目: りんご
5番目: バナナ
*/
定数 (let
) で宣言した配列は、要素の追加・削除・変更ができません(配列の中身全体を変えられない)。変数 (var
) で宣言した配列は、要素の追加・削除・変更が可能です(配列の中身全体を変更できる)。
10.2. 辞書 (Dictionary)
順序はなく、「キー (Key)」と「値 (Value)」のペアでデータを格納するコレクションです。キーは、値を辞書から取り出すための「見出し」のようなものです。キーはユニークである必要があります。
辞書は角かっこ []
を使いますが、中に キー: 値
のペアをカンマ区切りで並べます。
“`swift
// 文字列(キー)と整数(値)の辞書
var scores = [“国語”: 80, “数学”: 95, “英語”: 75]
// 空の辞書
var emptyDictionary: [String: Int] = [:]
// または
var anotherEmptyDictionary = String: Int
“`
型アノテーションをつける場合は、[キーの型: 値の型]
と書きます。
swift
var scores: [String: Int] = ["国語": 80, "数学": 95, "英語": 75]
辞書の操作
-
要素数を知る:
.count
を使います。swift
print(scores.count) // 出力: 3 -
辞書が空かどうかチェックする:
.isEmpty
を使います。swift
print(scores.isEmpty) // 出力: false -
値にアクセスする: キーを角かっこ
[]
で指定します。返ってくる値は、そのキーが存在しない可能性もあるため、後述する Optional型 になります。swift
print(scores["数学"]) // 出力: Optional(95)
print(scores["理科"]) // 出力: nil (キーが存在しない)
このOptional(95)
やnil
については、後で詳しく解説します。値を取り出して使う際には、安全に扱う方法を知っておく必要があります。 -
要素を追加または変更する: キーを指定して値を代入します。もしキーが既に存在すれば値が変更され、存在しなければ新しいキーと値のペアが追加されます。
“`swift
scores[“理科”] = 88 // “理科”というキーが存在しないので追加
print(scores) // 出力例: [“国語”: 80, “数学”: 95, “英語”: 75, “理科”: 88] (順序は保証されない)scores[“国語”] = 85 // “国語”というキーが存在するので値を変更
print(scores) // 出力例: [“国語”: 85, “数学”: 95, “英語”: 75, “理科”: 88]
“` -
要素を削除する:
.removeValue(forKey:)
メソッドを使うか、キーにnil
を代入します。“`swift
let removedMathScore = scores.removeValue(forKey: “数学”) // “数学”を削除し、その値を返す (Optional型)
print(removedMathScore) // 出力: Optional(95)
print(scores) // 出力例: [“国語”: 85, “英語”: 75, “理科”: 88]scores[“英語”] = nil // “英語”を削除する別の方法
print(scores) // 出力例: [“国語”: 85, “理科”: 88]
“` -
辞書をループ処理する:
for-in
ループを使うと、辞書の各キーと値のペアを順番に取り出して処理できます。swift
for (subject, score) in scores {
print("\(subject): \(score)点")
}
/* 出力例 (順序は実行ごとに変わる可能性があります):
国語: 85点
理科: 88点
*/
キーだけ、または値だけを取り出してループすることも可能です。“`swift
for subject in scores.keys {
print(“教科名: (subject)”)
}for score in scores.values {
print(“点数: (score)”)
}
“`
辞書は、特定のキーを使って素早く値を探し出したい場合に非常に便利です。
10.3. 集合 (Set)
順序はなく、各要素がユニーク(重複しない)である必要があるコレクションです。ある要素がコレクションに含まれているかどうかを素早くチェックしたい場合に便利です。
集合は角かっこ []
を使いますが、初期化の際に型名を明示的に指定することが一般的です。
“`swift
// 整数の集合
var uniqueNumbers: Set
print(uniqueNumbers) // 出力例: {1, 2, 3} (順序は保証されない)
// 空の集合
var emptySet: Set
“`
集合の操作
-
要素数を知る:
.count
を使います。swift
print(uniqueNumbers.count) // 出力: 3 -
集合が空かどうかチェックする:
.isEmpty
を使います。swift
print(uniqueNumbers.isEmpty) // 出力: false -
要素を追加する:
.insert()
メソッドを使います。既に同じ要素が存在する場合は何も起こりません。“`swift
uniqueNumbers.insert(4)
print(uniqueNumbers) // 出力例: {1, 2, 3, 4}uniqueNumbers.insert(2) // 2は既にあるので変わらない
print(uniqueNumbers) // 出力例: {1, 2, 3, 4}
“` -
要素を削除する:
.remove()
メソッドを使います。“`swift
uniqueNumbers.remove(1)
print(uniqueNumbers) // 出力例: {2, 3, 4}uniqueNumbers.remove(5) // 5は存在しないので何も起こらない
print(uniqueNumbers) // 出力例: {2, 3, 4}
“` -
要素が含まれているかチェックする:
.contains()
メソッドを使います。swift
print(uniqueNumbers.contains(3)) // 出力: true
print(uniqueNumbers.contains(1)) // 出力: false -
集合をループ処理する:
for-in
ループを使うと、集合の各要素を順番に取り出して処理できます。ただし、順序は保証されません。swift
for number in uniqueNumbers {
print(number)
}
/* 出力例 (順序は実行ごとに変わる可能性があります):
2
3
4
*/
集合は、要素の重複を気にせず、ある要素が含まれているか高速に判定したい場合に適しています。また、複数の集合間で共通の要素や、どちらか一方にだけ存在する要素を見つけ出すといった数学的な集合演算も可能です。
11. コードをまとめて再利用する:関数 (Functions)
プログラムを書いていると、同じような処理を何度も行う必要がある場面が出てきます。例えば、画面にメッセージを表示する処理、税込み価格を計算する処理などです。同じコードを何度もコピー&ペーストするのは、コードが長くなり、変更があった場合にすべての場所を修正する必要があり、間違いのもとになります。
このような場合に便利なのが 関数 (Function) です。関数は、特定のタスクを実行するためのコードのまとまりに名前をつけたものです。一度関数として定義しておけば、必要なときにその名前を呼ぶだけで、何度でも同じ処理を実行できます。
関数の定義は func
キーワードを使って行います。
“`swift
// 関数の定義
func greet() {
print(“こんにちは!”)
}
// 関数の呼び出し
greet() // 出力: こんにちは!
greet() // もう一度呼び出すと、再び実行される
“`
解説:
func greet()
:func
キーワードは「これから関数を定義しますよ」という合図です。greet
はこの関数の名前です。その後の()
は、この関数が引数(関数に渡す情報)を受け取らないことを示しています。{ ... }
:波かっこ{}
の中に、関数が実行するコードを書きます。これを 関数の本体 と呼びます。greet()
:これは、定義した関数を「呼び出す」コードです。関数名を書き、その後に()
をつけます。これにより、関数の本体に書かれたコードが実行されます。
11.1. 引数 (Parameters)
関数に外部から情報(データ)を渡して、処理の内容を少し変えたい場合があります。関数が受け取る情報のことを 引数 と呼びます。引数は関数の定義時に ()
の中に名前と型を指定します。
“`swift
// 引数を受け取る関数の定義
func greet(name: String) {
print(“こんにちは、(name)さん!”)
}
// 関数を呼び出すときに引数を渡す
greet(name: “Taro”) // 出力: こんにちは、Taroさん!
greet(name: “Hanako”) // 出力: こんにちは、Hanakoさん!
“`
解説:
func greet(name: String)
:()
の中にname: String
と書かれています。これは、「この関数はname
という名前で、String
型の引数を一つ受け取りますよ」という意味です。print("こんにちは、\(name)さん!")
:関数の本体の中で、受け取った引数name
を使っています。greet(name: "Taro")
:関数を呼び出す際に、引数の名前 (name:
) を指定し、その後に渡したい値 ("Taro"
) を書きます。
複数の引数を受け取ることも可能です。カンマ区切りで並べます。
“`swift
func addNumbers(a: Int, b: Int) {
let result = a + b
print(“計算結果は (result) です。”)
}
addNumbers(a: 5, b: 3) // 出力: 計算結果は 8 です。
addNumbers(a: 10, b: -2) // 出力: 計算結果は 8 です。
“`
Swiftでは、関数を呼び出す際に引数の名前 (a:
, b:
) を書く必要があります。これにより、コードがより分かりやすくなります。
11.2. 戻り値 (Return Values)
関数に処理を任せた結果として、何らかのデータを受け取りたい場合があります。関数が処理の結果として返すデータのことを 戻り値 または 返り値 (Return Value) と呼びます。
戻り値がある関数を定義するには、引数を書く ()
の後に -> 型名
と書き、関数の本体の最後に return 戻り値
と書きます。
“`swift
// 戻り値がある関数の定義
func multiply(a: Int, b: Int) -> Int { // 引数aとb(Int型)を受け取り、Int型の戻り値を返す
let result = a * b
return result // 計算結果を返す
}
// 関数を呼び出し、戻り値を変数で受け取る
let product = multiply(a: 4, b: 6)
print(“積は (product) です。”) // 出力: 積は 24 です。
print(multiply(a: 7, b: 8)) // 戻り値を直接printすることもできる
// 出力: 56
“`
解説:
func multiply(a: Int, b: Int) -> Int
:-> Int
の部分は、「この関数は計算結果としてInt
型の値を一つ返しますよ」という意味です。return result
:関数の本体の中で、計算した結果である変数result
の値を、関数の「戻り値」として返しています。return
文が実行されると、関数はそこで処理を終了し、呼び出し元に値を返します。
戻り値がない関数(先ほどの greet()
関数のようなもの)は、実際には特別な Void
という型の戻り値を返していますが、通常は省略します。
関数を使うことで、コードが整理され、同じ処理を簡単に再利用できるようになります。これは、より大きく複雑なプログラムを作る上で非常に重要な考え方です。
11.3. 引数の外部引数名とローカル引数名
Swiftでは、関数を呼び出す際に使う引数名(外部引数名)と、関数本体の中で使う引数名(ローカル引数名)を区別することができます。
デフォルトでは、最初の引数以外は、外部引数名とローカル引数名が同じになります。最初の引数も同じにしたい場合は、外部引数名を省略するための _
を使わない限り同じになります。
“`swift
// 外部引数名とローカル引数名が同じ場合 (最初の引数はデフォルトで省略される)
func sayHello(to name: String) {
// 関数本体の中では ‘name’ という名前でアクセス
print(“Hello, (name)!”)
}
sayHello(to: “Alice”) // 呼び出し時には外部引数名 ‘to’ を使う
// 外部引数名を省略する場合 (関数呼び出し時に引数名を書かなくて済む)
func printMessage( message: String) { // 引数名の前に ‘‘ をつける
// 関数本体の中では ‘message’ という名前でアクセス
print(message)
}
printMessage(“これはメッセージです。”) // 呼び出し時に引数名は書かない
“`
このように、引数名の指定方法を変えることで、関数を呼び出す側のコードをより自然な英語のように読みやすくすることができます。
12. 「値がないかもしれない」を扱う:オプショナル (Optionals)
これまでに扱ってきた変数や定数、コレクションの要素は、基本的に「何らかの値が必ず入っている」という前提でした。しかし、現実の世界やプログラムの世界では、「値がないかもしれない」という状況がよくあります。
例えば、
- 辞書から特定のキーで値を取り出そうとしたが、そのキーが存在しなかった場合。
- 文字列を数値に変換しようとしたが、変換できない形式だった場合。
- ユーザーがまだプロフィール写真を選んでいない場合。
このような「値がない」状態を表現するために、Swiftには Optional (オプショナル) という特別な型があります。オプショナル型は、「値が入っているか、あるいは何も入っていない (nil) かのどちらか」である箱を表現します。
オプショナル型は、型の後ろに疑問符 ?
をつけて表現します。
“`swift
var surveyAnswer: String? // String? は「文字列が入っているかもしれないし、nilかもしれない」という意味
print(surveyAnswer) // 出力: nil (初期値はnil、つまり何も入っていない状態)
surveyAnswer = “もちろん!” // 値を代入
print(surveyAnswer) // 出力: Optional(“もちろん!”) (値が入っている状態)
surveyAnswer = nil // 再び値をnilにする
print(surveyAnswer) // 出力: nil
“`
解説:
String?
:これはString
型のオプショナルバージョンです。普通のString
型には必ず文字列が入っていますが、String?
型の変数には文字列が入っている場合と、全く何も入っていないnil
という特別な値が入っている場合があります。nil
:これは「値がない」という状態を表す、Swiftの特別なキーワードです。他のプログラミング言語でいう「null」に似ていますが、Swiftではオプショナル型に対してのみ使用できます。普通のString
型の変数にnil
を代入しようとするとエラーになります。Optional("もちろん!")
:値がセットされているオプショナル型変数をprintすると、このようにOptional(...)
という形で表示されることがあります。これは、「このオプショナルには、かっこ内の値が入っていますよ」というSwiftの表示方法です。
12.1. Optional型の値を取り出す (アンラップ)
オプショナル型の変数には値が入っているかどうかが分からないため、その中に入っている値(もし入っていれば)を直接使おうとすると、Swiftは安全のためにエラーを出します。
例えば、オプショナルな文字列の長さを調べようとすると…
“`swift
var optionalString: String? = “Hello”
// print(optionalString.count) // エラー! Optional型のままでは.countにアクセスできない
“`
Optional型の変数に入っている値を使うためには、その箱から値を取り出す必要があります。この操作を アンラップ (Unwrap) と呼びます。
アンラップにはいくつかの安全な方法と、少し危険な方法があります。
12.1.1. 強制アンラップ (!
) – 危険な方法
オプショナルな変数名の後ろに感嘆符 !
をつけると、「このオプショナルには必ず値が入っているはずだ!」とSwiftに保証し、強制的に値を取り出すことができます。
“`swift
var optionalString: String? = “Hello”
print(optionalString!.count) // 出力: 5
optionalString = nil
// print(optionalString!.count) // エラー! 値がnilなのに強制アンラップしたので実行時エラー(クラッシュ)が発生する
“`
注意: 強制アンラップは、そのオプショナルに値が入っていることを完全に確信できる場合以外は絶対に使わないでください。もし値が nil
なのに強制アンラップしようとすると、プログラムがクラッシュして停止してしまいます。これはアプリ開発において避けるべき最悪の事態の一つです。
初心者のうちは、強制アンラップを使うのは避けるのが賢明です。
12.1.2. Optional Binding (if let
/ guard let
) – 安全な方法
オプショナルに値が入っているかどうかをチェックし、もし値が入っていれば、安全にその値を一時的な変数や定数に取り出して(バインドして)使う方法です。
if let
「もし、このオプショナルに値が入っていれば、その値を一時的な定数(または変数)に代入して、続くコードを実行しなさい」という意味です。
“`swift
var optionalString: String? = “Hello”
if let safeString = optionalString { // optionalStringに値が入っていれば、safeStringという定数にその値が入る
print(“文字列は ‘(safeString)’ です。長さは (safeString.count) です。”)
} else { // optionalStringに値が入っていなければ、こちらが実行される
print(“文字列には何も入っていません。”)
}
// 出力: 文字列は ‘Hello’ です。長さは 5 です。
optionalString = nil
if let safeString = optionalString {
print(“文字列は ‘(safeString)’ です。”)
} else {
print(“文字列には何も入っていません。”)
}
// 出力: 文字列には何も入っていません。
“`
if let
を使うことで、値がある場合とない場合で異なる処理を安全に書くことができます。safeString
は if let
のブロックの中でだけ有効な定数で、Optional型ではなく、元の型(この場合は String
型)として扱えるため、安心して .count
などの操作ができます。
guard let
これは関数などで使うことが多いOptional Bindingです。「もし、このオプショナルに値が入っていれば、その値を一時的な定数(または変数)に代入して、処理を続行しなさい。そうでなければ、処理を中断しなさい」という意味です。
guard let
は通常、関数の早い段階で条件を満たさない場合に処理を中断するために使われます。else
ブロックの中では、必ず return
, break
, continue
, throw
のいずれかを使って、その後のコードが実行されないようにする必要があります。
“`swift
func processString(input: String?) {
guard let safeString = input else { // inputに値が入っていなければ…
print(“入力された文字列がありません。処理を中断します。”)
return // 関数から抜け出す
}
// inputに値が入っていた場合、safeStringとしてこの後のコードで使える
print("処理を開始します。文字列は '\(safeString)' です。")
print("処理完了。")
}
processString(input: “テスト文字列”)
/ 出力:
処理を開始します。文字列は ‘テスト文字列’ です。
処理完了。
/
processString(input: nil)
/ 出力:
入力された文字列がありません。処理を中断します。
/
“`
guard let
は、複数のオプショナルをチェックして、すべてに値が入っている場合にのみ処理を続けたい場合にも便利です。
12.1.3. Nil合体演算子 (Nil-Coalescing Operator, ??
)
オプショナルに値が入っている場合はその値を使いたいが、もし nil
の場合は代わりに別の デフォルト値 を使いたい、という場合に便利な演算子です。
オプショナル変数 ?? デフォルト値
の形で使います。
“`swift
let defaultName = “名無し”
var userName: String? = “Taro”
let displayName = userName ?? defaultName // userNameに値があればuserNameの値、なければdefaultNameの値を使う
print(displayName) // 出力: Taro
userName = nil
let anotherDisplayName = userName ?? defaultName // userNameはnilなのでdefaultNameの値を使う
print(anotherDisplayName) // 出力: 名無し
“`
この ??
演算子は、右辺に指定したデフォルト値が、左辺のオプショナルと同じ型である必要があります。
オプショナルは、Swiftを学ぶ上でつまずきやすいポイントの一つですが、プログラムの安全性を高める上で非常に重要な機能です。最初は難しく感じるかもしれませんが、たくさんの例を見て、実際にコードを書いていくうちに理解できるようになります。安全なアンラップ方法 (if let
, guard let
, ??
) を優先的に使うように心がけましょう。
13. 次のステップへ:さらに学ぶこと
この記事では、Swiftプログラミングの本当に基礎的な部分、つまり「Hello, World!」から始めて、変数、データ型、演算子、制御フロー(条件分岐とループ)、コレクション、関数、そしてOptional型といった基本的な概念を学びました。これらはすべてのプログラミング言語に共通する、あるいはSwiftの特徴的ながらも非常に重要な要素です。
しかし、Swiftにはこれ以外にも学ぶべきことがたくさんあります。例えば、
- 構造体 (Struct) とクラス (Class): 関連するデータや関数を一つにまとめるための基本的な構造です。Swiftでは特に構造体が頻繁に使われます。値型と参照型の違いなども重要な概念です。
- 列挙型 (Enum): 関連する値をまとめて定義し、コードをより安全で分かりやすくするための型です。
- プロトコル (Protocol): 特定の機能や振る舞いを定義する「設計図」のようなもので、Swiftの強力な特徴の一つです。
- クロージャ (Closures): 無名の関数のようなもので、短い処理をその場で定義して渡すのに便利です。
- エラーハンドリング (Error Handling): プログラムの実行中に発生する可能性のあるエラーを、安全かつ効果的に処理するための仕組みです。
- プロパティ (Properties): 構造体やクラスに持たせるデータ(変数や定数)のことです。
- メソッド (Methods): 構造体やクラスに持たせる関数のことです。
- 拡張 (Extensions): 既存の型に新しい機能を追加する方法です。
- ジェネリクス (Generics): どんな型でも扱える、柔軟で再利用可能なコードを書くための機能です。
これらの概念を学ぶことで、より複雑で実用的なプログラムを書くことができるようになります。
14. どこで続けて学べばいい?
このガイドを終えたあなたは、プログラミングの基本的な考え方とSwiftの基本的な文法を理解しました。これは素晴らしい第一歩です!ここからさらに学習を進めるためには、いくつかの方法があります。
- Apple公式ドキュメント: Swiftの公式ドキュメント「The Swift Programming Language」は最も正確で詳細な情報源ですが、初心者が一人で読むには少し難しいかもしれません。まずは「A Swift Tour」のような入門的なセクションから始めてみるのが良いでしょう。
- Apple Developerサイト: Appleのデベロッパーサイトには、Swiftだけでなく、iOSやmacOSアプリ開発に関する豊富なドキュメント、チュートリアル、ビデオがあります。
- オンライン学習プラットフォーム: Udemy, Coursera, raywenderlich.com, Hacking with Swift など、SwiftやAppleプラットフォーム開発に特化した質の高い有料・無料のコースがたくさんあります。動画で学びたい方や、実践的なプロジェクトを通して学びたい方に向いています。
- 書籍: Swiftの入門書はたくさん出版されています。自分のペースでじっくり学びたい方には良い選択肢です。
- コミュニティ: SwiftやiOS開発の勉強会、オンラインフォーラム、Discord/Slackグループなどに参加して、他の学習者や経験者に質問したり交流したりすることもモチベーション維持に役立ちます。
そして何より大切なのは、コードを書き続けることです。小さなプログラムでも良いので、思いついたアイデアをコードにしてみたり、この記事で学んだことを使って簡単な練習問題に挑戦したりしてみてください。
- 変数を使って簡単な計算をしてみる。
if
文と入力値を使って、合格か不合格かを判定するプログラムを書いてみる。for-in
ループと配列を使って、リストの要素を順番に表示してみる。- 引数と戻り値を持つ関数を作ってみる。
- Optionalな値を使って、安全にアンラップする練習をする。
Playgroundは、これらの練習に最適な環境です。
15. 最後に:諦めずに楽しもう!
プログラミング学習の道のりは、時に難しく感じることがあるかもしれません。エラーが出てしまったり、思った通りに動かなかったりして、くじけそうになることもあるでしょう。それはプログラミングでは当たり前のことです!
大切なのは、すぐに答えが見つからなくても諦めないこと、エラーメッセージを注意深く読んで原因を探ること、そして分からなければ誰かに質問したり、インターネットで調べたりすることです。
そして、一番大切なのは、楽しむことです。「こんなことができたら面白いな」「どうやったらこの動きを実現できるだろう?」という好奇心を持って取り組むことが、学習を続ける一番の原動力になります。
この記事が、あなたのSwiftプログラミング学習の素晴らしいスタートとなることを願っています。さあ、あなたの手でコンピュータを動かしてみましょう!新しい世界があなたを待っています!