Swift教室 Swift と競技プログラミングの教室

プログラムの書き方とエラー

読了目安 約3分

コンパイルエラーの読み方を覚える。エラーは間違いの場所を教えてくれる味方。

この章の目次

プログラムには文法の決まりがあります。 決まりに合わない部分があると、Swift はエラーで知らせてくれます。 エラーを読めるようになることが、上達のいちばんの近道です。

コンパイルエラー

Swift のプログラムは、実行の前にコンパイルという変換を通ります。 コンパイルは、人間が書いたコードをコンピュータが実行できる形に変換する作業です。 文法に間違いがあると変換は失敗し、コンパイルエラーが報告されます。

次のコードは、文字列を閉じる " を忘れています。 実行して、エラーを見てみましょう。

Swift
print("こんにちは)
テキスト
main.swift:1:7: error: unterminated string literal

「コンパイルエラー」は罰ではなく、間違いの場所と理由を実行前に教えてくれる味方です。 プログラマは毎日エラーを出し、直しながら書き進めます。

エラーメッセージの読み方

エラーメッセージは、場所、種類、理由の順に並んでいます。

  • main.swift:1:7:場所。main.swift というファイルの 1 行目、7 文字目
  • error:種類
  • unterminated string literal:理由。「文字列が終わっていない」

種類が error の報告は、直すまでプログラムを作れません。 warning(警告)は、動くけれど直したほうがよい部分への注意です。

コンパイルが通った後、実行の途中で止まるエラーもあります。 これは実行時エラーと呼ばれます。

括弧の閉じ忘れ

" と並んでよくあるのが、() の閉じ忘れです。

Swift
print("こんにちは"
テキスト
main.swift:2:1: error: expected ')' in expression list

エラーの位置が、書いた 1 行目ではなく 2 行目になっています。 コンパイラは ) をファイルの終わりまで探し続けるためです。 表示された行に間違いが見当たらないときは、その前の行を疑ってください。

全角スペースの罠

日本語入力のままスペースを打つと、半角ではなく全角スペースが入ります。 Swift のコードで使える空白は半角だけです。

Swift
print("1 行目")
 print("2 行目")
テキスト
main.swift:2:1: error: invalid character in source file

invalid character は「コードに使えない文字がある」という意味です。 「全角スペース」は見た目で半角と区別しにくいので、このメッセージを見たらまず疑ってください。

試してみよう: 2 行目の先頭にある全角スペースを削除して、エラーが消えることを確かめてください。

学びどころ

概念一言まとめ
コンパイルコードを実行できる形に変換する作業
コンパイルエラー間違いの場所と理由の報告。実行前に気づける
ファイル名:行:列エラーメッセージの先頭は場所を表す
全角スペースコードに混ざるとエラー。空白は半角で

演習

スターターコードには、この章で見たエラーが 3 か所あります。 すべて直して、次の 3 行を出力してください。

テキスト
こんにちは
Swift
エラーはこわくない

エラーメッセージの行番号を手がかりに、上から 1 つずつ直しましょう。

模範解答
Swift
print("こんにちは")
print("Swift")
print("エラーはこわくない")

間違いは、" の閉じ忘れ、) の閉じ忘れ、行頭の全角スペースの 3 つでした。