📚 Swift入門シリーズ: #1 なぜSwift? → #2 環境構築 → #3 Hello, World!
プログラムを書くとき、コードそのものだけでなく、説明やメモを残すことも重要です。この記事では、コメントの書き方とSwiftの基本的な文法ルールを学びましょう。
来春からデータサイエンティストとして働く予定の技術オタク。
『知りたい』気持ちで質問を止められない、好奇心旺盛な学生。
前回はHello, World!とprint()関数を学んだね!
そうだね。今回は、コードをわかりやすく保つための技術を学んでいくよ。
前回、Hello, World!を表示できたよ!print()関数も覚えたし、文字列補間も使えるようになった!
素晴らしいね。今回は、コードをわかりやすく保つための技術を学んでいくよ。
コードを書いていると、「これ何だっけ?」って後で忘れそうなんだけど、メモとか残せないの?
それが今日学ぶ「コメント」なんだ。コメントは、プログラムの中に書けるメモや説明文で、実行されずに無視される特別な文章なんだよ。コメントを上手に使うことで、コードの可読性がぐっと上がるんだ。
実行されないメモ?便利そう!
コメントとは?
コメントは、プログラムコードの中に書く説明文やメモのことなんだ。コンピュータはコメントを完全に無視するから、プログラムの動作には一切影響しないんだよ。
コメントには、いくつかの重要な役割があるんだ。まず、コードの説明 。複雑なロジックや難しい計算を書いたとき、何をしているのか説明しておくと、後で見返したときに理解しやすくなるんだ。
次に、メモや注意事項 。「ここは後で修正する必要がある」とか「このバグは既知の問題」みたいな情報を残しておけるんだよ。
それから、一時的なコード無効化 。デバッグ中に、特定のコードを実行したくないけど削除もしたくないとき、コメントアウト(コメント化)することで一時的に無効化できるんだ。
最後に、他の開発者とのコミュニケーション 。チームでコードを書くとき、コメントで意図を伝えることができるんだよ。
コードを消さずに無効化できるの便利!
一行コメント
Swiftには2種類のコメントがあるんだ。まずは 一行コメント から見ていこう。一行コメントは、//(スラッシュ2つ)から始めるんだ。この記号以降、行の終わりまでがコメントとして扱われるんだよ。
// これは一行コメントです
print("Hello, World!")
print("こんにちは") // この行の右側もコメントにできる
// の後ろに書いた文章は、Swiftのコンパイラに無視されるから、日本語でもどんな言語でも書けるんだ。自分がわかりやすい言葉で書けばいいよ。
コードの横にコメントを書けるんだ!便利!
そうなんだ。ただし、コメントの書きすぎ にも注意が必要なんだ。例えば、こんなコメントは不要だよ。
// "Hello"を出力する
print("Hello")
これはコードを見れば明らかだから、コメントは冗長なんだ。コメントは「何をしているか」よりも「なぜそうしているか」を説明する方が価値が高いんだよ。
良いコメントの例を見てみよう。
// ユーザーの年齢を計算(誕生日を過ぎていない場合は1引く)
let age = currentYear - birthYear - (hasBirthdayPassed ? 0 : 1)
この場合、ロジックが複雑だから、説明があると理解しやすくなるんだ。
複数行コメント
長い説明を書きたいときはどうすればいい?一行コメントをたくさん書くの?
そういう場合は 複数行コメント が便利なんだ。/* でコメントを開始して、*/ でコメントを終了するんだよ。この間に書いた内容は、何行でもコメントとして扱われるんだ。
/*
これは複数行コメントです。
複数の行にわたって
説明を書くことができます。
*/
print("Hello, World!")
複数行コメントは、長い説明を書くときや、複数行のコードを一時的に無効化するときに便利なんだ。
/* と */ の間なら、何行書いてもいいの?
そうだよ。何行書いても大丈夫。ただし、Swiftの複数行コメントには便利な特徴があるんだ。それは ネスト(入れ子)ができる ってこと。つまり、コメントの中にコメントを書けるんだよ。
/*
これは外側のコメント
/*
これは内側のコメント
*/
外側のコメントに戻った
*/
print("実行される")
他の多くのプログラミング言語では、複数行コメントのネストができないんだけど、Swiftではできるんだ。これによって、コメントアウトされたコードの中にさらにコメントがあっても、正しく扱えるんだよ。
コメントの中にコメント!?面白い!
コメントアウトの実践
実際の開発では、デバッグ中にコードを一時的に無効化することがよくあるんだ。これを「コメントアウト」って呼ぶんだよ。
例えば、複数のprintを試しているとき、古いものをコメントアウトして残しておくことができるんだ。
// print("最初のバージョン")
// print("2番目のバージョン")
print("最新のバージョン")
後で「やっぱり前のバージョンの方が良かった」ってなったとき、コメントを外すだけで元に戻せるから便利なんだよ。
Xcodeには、選択した行を一括でコメントアウトする便利なショートカットがあるんだ。Command + /(CommandキーとスラッシュキーPを同時押し)で、選択した行をまとめてコメントアウト・解除できるんだよ。
ショートカットがあるんだ!便利!
ドキュメンテーションコメント
もう一つ、特別なコメントの書き方があるんだ。ドキュメンテーションコメント って呼ばれるもので、関数やクラスの正式な説明を書くときに使うんだ。
ドキュメンテーションコメントは、///(スラッシュ3つ)で始めるか、/** と */ で囲む形式があるんだよ。
/// この関数は2つの数値を足し算します
func add(a: Int, b: Int) -> Int {
return a + b
}
または
/**
この関数は2つの数値を足し算します
- Parameters:
- a: 1つ目の数値
- b: 2つ目の数値
- Returns: 2つの数値の合計
*/
func add(a: Int, b: Int) -> Int {
return a + b
}
このように書くと、Xcodeがその関数を使うときに、自動的にドキュメントを表示してくれるんだ。Option キーを押しながら関数名をクリックすると、ポップアップで説明が見られるんだよ。
func とか Parameters とか、難しい言葉が...
ごめんごめん。関数についてはまだ先の章で学ぶから、今は「特別なコメントの書き方もあるんだな」って知っておいてもらえれば十分だよ。実際に関数を書くようになったら、ドキュメンテーションコメントの使い方も学んでいこう。
Swiftの基本的な文法ルール
ところで、Swiftでコードを書くときのルールってあるの?守らなきゃいけないことは?
いい質問だね。Swiftには、いくつかの基本的な文法ルールがあるんだ。順番に見ていこう。
セミコロンは不要
まず、Swiftでは 行末のセミコロンが不要 なんだ。多くのプログラミング言語(C、Java、JavaScriptなど)では、文の終わりにセミコロン ; を書く必要があるんだけど、Swiftでは省略できるんだよ。
print("Hello") // セミコロンなしでOK
print("World")
もちろん、セミコロンを書いてもエラーにはならないんだけど、Swiftのスタイルとしては書かないのが一般的なんだ。
ただし、1行に複数の文を書きたい場合 は、セミコロンで区切る必要があるんだよ。
print("Hello"); print("World")
でも、これは読みにくいから、通常は1行に1つの文を書くことをおすすめするよ。
セミコロン書かなくていいんだ!楽ちん!
インデント(字下げ)
次に、インデント について。インデントっていうのは、コードの階層構造を視覚的にわかりやすくするための字下げのことなんだ。
例えば、条件分岐やループの中のコードは、少し右にずらして書くのが一般的なんだよ。
if true {
print("これはインデントされている")
print("こちらも同じレベル")
}
Swiftでは、インデントは スペース4つ が標準なんだ。Xcodeは自動的にインデントしてくれるから、Tabキーを押すだけで適切に字下げされるよ。
インデントは、プログラムの動作には影響しないんだけど、コードの可読性を大きく向上させるんだ。適切にインデントされたコードは、構造が一目でわかるから、バグも見つけやすくなるんだよ。
if true って何?
あ、ごめん。これは後で学ぶ条件分岐の例なんだ。今は「コードの中にブロックがあるときは、インデントするんだな」って覚えておいてもらえれば大丈夫だよ。
大文字・小文字の区別
Swiftは 大文字と小文字を区別する 言語なんだ。つまり、print と Print は別物として扱われるんだよ。
print("これは正しい")
Print("これはエラー") // エラー:Cannot find 'Print' in scope
print は小文字で始まるのが正しくて、Print と大文字で書くとエラーになるんだ。
変数名や関数名を書くときも、大文字・小文字を間違えないように注意する必要があるんだよ。
じゃあ、全部小文字で書けばいいの?
それが、そうでもないんだ。Swiftには 命名規則 っていうのがあって、何を名前をつけるかによって、大文字・小文字の使い方が決まっているんだよ。これは次で説明するね。
命名規則
Swiftの 命名規則 について説明するね。これは、変数や関数などに名前をつけるときのルールなんだ。
まず、変数名と関数名 は、キャメルケース(camelCase) で書くのが一般的なんだ。キャメルケースっていうのは、最初の文字は小文字で、単語の区切りを大文字にする書き方なんだよ。
let userName = "太郎"
let userAge = 20
let calculateTotalPrice = 100
userName は「user」と「Name」の2つの単語からできていて、2番目の単語の最初の文字を大文字にしているんだ。ラクダのコブみたいに見えるから「キャメルケース」って呼ばれているんだよ。
次に、型名(クラス、構造体、列挙型など) は、パスカルケース(PascalCase) で書くのが一般的なんだ。パスカルケースは、すべての単語の最初の文字を大文字にする書き方なんだよ。
class UserAccount { }
struct TodoItem { }
最後に、定数 も基本的にはキャメルケースで書くんだけど、グローバルな定数の場合は大文字のスネークケースで書くこともあるんだ。
let maxValue = 100 // 通常の定数
let MAX_RETRY_COUNT = 3 // グローバル定数(大文字スネークケース)
スネークケースは、単語をアンダースコア _ で区切る書き方なんだよ。
キャメルケース、パスカルケース、スネークケース...いろんな書き方があるんだね!
そうなんだ。でも、慣れてくれば自然に使い分けられるようになるから大丈夫。今は「変数や関数は小文字から始める」ってことだけ覚えておけばOKだよ。
識別子の命名ルール
変数や関数の名前(これを 識別子 って呼ぶ)をつけるときには、いくつかのルールがあるんだ。
まず、使える文字 について。識別子には、アルファベット(A-Z、a-z)、数字(0-9)、アンダースコア(_)、そしてユニコード文字が使えるんだ。つまり、日本語の変数名も書けるんだよ。
let name = "太郎"
let 名前 = "次郎" // 日本語の変数名もOK
let _privateValue = 100 // アンダースコアで始めてもOK
ただし、数字から始めることはできない んだ。
let value1 = 100 // OK
let 1value = 100 // エラー
それから、予約語は使えない んだ。予約語っていうのは、Swiftが特別な意味で使っている単語のことで、let、var、if、func などがあるんだよ。
let let = 100 // エラー:予約語は使えない
もし本当に予約語を識別子として使いたい場合は、バッククオート ` で囲むという裏技もあるんだけど、通常はおすすめしないよ。
let `let` = 100 // エラーにはならないけど、推奨されない
予約語って、どれぐらいあるの?全部覚えなきゃダメ?
Swiftの予約語は結構たくさんあるんだけど、このコースで学んでいく中で自然に覚えられるから、今は暗記しなくて大丈夫だよ。もし予約語を使おうとすると、Xcodeがエラーで教えてくれるから安心してね。
空白の扱い
Swiftでは、空白(スペース)の扱い が少し特殊なんだ。基本的には、空白は自由に入れられるんだけど、演算子の周りでは注意が必要なんだよ。
let sum = 1 + 2 // OK:演算子の両側にスペース
let sum = 1+2 // OK:スペースなしでもOK
let sum = 1 +2 // エラーの可能性:片側だけスペースは避ける
Swiftのスタイルガイドでは、演算子の両側にスペースを入れる のが推奨されているんだ。コードが読みやすくなるからね。
それから、カンマの後にはスペースを入れるのが一般的なんだよ。
print("A", "B", "C") // OK
print("A","B","C") // OK だけど読みにくい
コードの読みやすさ
ルールはわかったけど、読みやすいコードって他に何かコツはあるの?
いい質問だね。文法的には正しくても、読みにくいコードはたくさんあるんだ。読みやすいコードを書くための、いくつかのコツを紹介するね。
まず、意味のある名前をつける こと。変数名は、その変数が何を表しているかわかるような名前にするんだ。
// 悪い例
let x = 20
// 良い例
let userAge = 20
x だけだと何の変数かわからないけど、userAge なら「ユーザーの年齢」だってすぐわかるよね。
次に、適切に改行する こと。1行が長すぎると読みにくいから、適度に改行するんだ。一般的には、1行80文字程度を目安にすると良いとされているよ。
それから、空行を使って区切る こと。関連するコードをグループ化して、間に空行を入れると、コードの構造がわかりやすくなるんだ。
let firstName = "太郎"
let lastName = "山田"
let fullName = lastName + firstName
let age = 20
let birthYear = 2005
この例では、名前に関する変数と年齢に関する変数の間に空行を入れることで、視覚的にグループ分けしているんだよ。
なるほど!読みやすさって大事なんだね!
そうなんだ。コードは書く時間より読む時間の方がずっと長いんだよ。だから、読みやすいコードを書くことは、とても重要なスキルなんだ。最初は意識して書くようにすると、だんだん自然にきれいなコードが書けるようになるよ。
まとめ
この記事では、Swiftのコメントと基本的な文法ルールを学びました。
コメント:
- 一行コメント:
//で始まる、行末までのコメント - 複数行コメント:
/*と*/で囲む、複数行のコメント(ネスト可能) - ドキュメンテーションコメント:
///または/**で始まる、関数やクラスの正式な説明
文法ルール:
- セミコロン不要: 行末のセミコロンは省略できる(1行に複数の文を書く場合は必要)
- インデント: スペース4つが標準、コードの階層構造を視覚化する
- 大文字・小文字の区別: Swift は大文字と小文字を区別する
- 命名規則: 変数・関数はキャメルケース、型名はパスカルケース
- 識別子のルール: アルファベット、数字、アンダースコア、ユニコード文字が使える(数字から始められない、予約語は使えない)
- 空白の扱い: 演算子の両側にスペースを入れるのが推奨
次回からは第2章「プログラムの『材料』を揃える」として、変数と定数について学びます。いよいよデータを扱う方法を身につけていきましょう!