バグ検出ドリル(11)コンパイルエラーは意外に難しい:山浦恒央の“くみこみ”な話(111)(1/3 ページ)
バグは至るところに、しかも堂々と潜んでおり、自信満々なプログラマーほど、目の前のバグに気付かないものです。「バグ検出ドリル」の第11回では、初心者が苦労する「コンパイルエラー」がテーマです。コンパイラが指し示すエラーの箇所から、バグを見つけ出してください!
1.はじめに
本連載では、エンジニアのバグ検出力の向上を目的とし、バグ入りの問題を出題して読者のみなさんに見つけてもらいます。本コラムをきっかけに、より良いソフトウェア開発につなげていただければと思います。シリーズが10回目を越え、少しずつ、バグを嗅ぎ出す感覚が身についてきたのではないでしょうか?
今回は、いつもと違って、初心者が苦労する「コンパイルエラー」に着目します。通常のバグとは異なり、コンパイラが、「ここにエラーがある」と警告しているので、簡単に見つかりますので、肩の力を抜いて取り組んでくださいね。
2.プログラミングとコンパイル
ソフトウェアの開発は、「要求仕様書」→「設計書」→「ソースコード」の順に作ります。これら3つはどれも同じ内容で、違いは、「要求仕様書」は一般人(人間)が理解できるもの、「設計書」は、「要求仕様」を開発技術者が理解できるように変換したもの、「ソースコード」は、「要求仕様」をコンピュータが理解できるように変換したものです。
コンピュータ用のプログラミング言語は、人間が普段使っている自由な自然言語とは異なり、非常に厳格なルールを持っています。2017年、「忖度」というワードが、日本中の話題となりましたが、コンピュータは人間の考えを察して、プログラムを実行することはありません※1)。
プログラムをコンピュータが分かる言語に変換するためには、「コンパイラ」が必要です。コンパイラは、人間が書いたプログラムを、コンピュータが理解できる形式に変換します※2)。それが、「コンパイル」ですね。コンピュータが理解できないソースコードを入力すると、コンパイラは、「ここが違います」とエラーメッセージを出力します。大半は単純ミスです。プログラマーは、第一関門として、大量のコンパイルエラーと格闘する必要があります。
※1)筆者がプログラマーになって1年目、筆者の先輩の口癖は、「プログラムは、設計者が考えた通りに動くのではない。設計者が作った通りに動くんだ」でした。バグを見つけるたびに、「考えた通りではなく、作った通りに動く」と痛感します。
※2)厳密には、いろいろな手順を踏みますが、今回は割愛します。
今回は、誰もが経験したことがあるコンパイルエラーをテーマにします。いろいろなエラーを埋め込んだプログラムを出題します。間違いを見つけてください。
3.コンパイルできない……
プログラミングを作る際、コンパイルという山を乗り越えられず、苦労した方は多いでしょう。例えば、「書籍に載っている100行程度のプログラムを写したところ、コンパイルエラーが大量に出た。いろいろ修正したけれどエラーが消えず、実行できなかった」経験は誰にもありますね。筆者も、書籍のソースコードを手入力することがあります。このプログラムが一発でコンパイルできることもあれば、どうしてもエラーから抜け出せず、中途半端な気持ちで諦めざるを得ないこともあります。
コンパイルエラーの悩みは、プログラミングの初心者である学生も同じです。筆者は、学生のプログラミング演習を教室の後ろから見ることがありますが、やはり、悩みはコンパイルエラーです。例えば、教員が例題を提示し、生徒に写してもらうとします。大半の生徒は、何事もなく実行できますが、数人は何をやっても実行できません。つらい時間ですね。ティーチングアシスタントが巡回してくるころには次のプログラムへ移り、授業についていけなくなります※3)。
※3)筆者は、コンパイルエラーで授業の遅れが出ないよう、Visual Studioのようなエディター上に単純ミスを指摘するツールを使えばよいと思います。また、プログラムのどこに間違いがあるか、流れを追って確認できるデバッガも有効です。
今回は、学生がコンパイルエラーを起こす典型的な例を出題します。プログラムとエラーメッセージを見て、エラーを検出/修正してください。ひねくれたエラーもありますので、あらゆる方向にアンテナを張ってください。
Copyright © ITmedia, Inc. All Rights Reserved.