目標実際にプログラムを書き始める前に概略的に知っておいた方が良い内容をまとめる。ひとつめはプログラミング環境に関すること。二つめは言語構造に関すること。三つめは「よいプログラム」を書くためのいくつかの注意事項である。近い将来に予測される「つまづき」を未然に防ぎたい。 プログラミング環境一昔前のCなどは、Emacs などのエディタでコーディング(プログラム作成)を行い、Cコンパイラを通して「実行形式ファイル」を作成していた。あるいはプリコンパイラを通して中間言語を一度作成したり、インタープリターが直接実行したりした。近年はこの部分は「統合開発環境」と呼ばれる、専用のエディタで書いたコードを直接実行形式に直すソフトウエアを使うことが多くなってきた。 ![]() Arduino Sketch の場合、Sketch IDE と呼ばれる開発環境を用いる。この環境の元で、PCと Arduino の通信のための設定から、コーディング、ファイルの保存と呼び出し、コードのコンパイルとエラーチェック、Arduino への転送とプログラムの実行などをコントロールできる。コードにエラーがあった場合には、そのエラーの内容が出力される。デバッグの参考になる。 ![]() NXCの場合は BCC (Bricx Command Center)というソフトウエアを利用する。エディタ部分は命令コードと定数などを自動的に区別してくれるほか、命令もワンクリックで埋め込んでくれたりもする。(ほとんど使わないが)また、タスクと関数の管理もやってくれるので複雑なコードを書くには役に立つかもしれない。BCC もファイルの保存や読み込み、コンパイル、転送などプログラムの実行に関する作業はすべて BCC 上からできるようになっている。 C言語の基本構造Arduino Sketch も Mindstorm NXC も Cをベースにしていることは述べた。たしかに、双方共に Arduino, MindStorm に特化しているために最低限必要な命令は予め組み込まれているので、#include〜 とする必要はない。しかし、特殊なライブラリを使おうとすると #include〜 のお世話にならなければならない。それ以前に、 Cは「関数型」のプログラミングを要求する。すべてのサブプログラムは「関数」の形で定義され、「引数」としてデータの受け渡しをすることができる。 大文字と小文字は厳格に区別される。したがって、変数 prog も PROG と書いたり Prog と書いたりすると異なる変数として認識される。さらに、命令・変数名はすべて小文字で、定数はすべて大文字で書くのが「標準」のようだ。このあたりのルールの適用は、プログラムを書き慣れてくると、プログラム理解の助けとなるので注意した方がよい。 命令(ステートメント)の区切りは「;」(セミコロン)を用いる。ただし、if 文等「}」(中カッコ)で終わる命令は「}」で切れる。「;」を入れ忘れると、コンパイラが行の終わりを認識しないのでとんでもない結果を招く。このあたりは、人間の「わかった」が通用しない世界である。 コーディングの注意事項論理的に正確なコードを書くことは当然であるが、プログラムが一発で動くことは少ない、時間をおいてからコードを見直すとわからなくなっていることが日常であるので以下の点に注意をしながらコードを書くとよい。 一つめは「字下げ」である。if 文の命令の範囲、ループ(繰り返し)の範囲など意味を持つ範囲を利用するときには必ず「字下げ」をして有効範囲が一目でわかるようにしておくとよい。 二つめは「コメント(補足説明)を入れる」ことだ。そのプログラムが何をしようとしているのか、その変数にはどんな意味の数値を持たせようとしているのか。コードを書いている瞬間には確かに意味づけがなされているのだが、時間と共に忘れてしまう。また、慣れないうちは変数名の管理にも難儀することが多い。そんなとき、1からコードを読み込んでいると時間が無駄にすぎてしまう。また、デバッグ時にも途方に暮れる原因となる。確かに地味な作業だが、後々のことを考えると、コメントは必ず書いておきたい。 コメントは以下の様式で書く。 複数行にわたるコメントは、/* 〜 */ で囲む。コンパイラは /* の後に書いてある内容を、*/ を見つけるまで無視する。作成した関数(プログラム)の役割や動作などを記述することに使われる。 1行だけのコメントの場合は、// のあとにコメントを書く。この場合、コンパイラは // から、その行の最後までを無視する。定数を定義した行でその定数の使用目的を記述したり、条件分岐の条件の説明などちょっとしたコメントを入れるのに使う。 前述したようにコメントはコンパイラが、ソースコードをコンパイルする際に無視する。確かに「無視をする」作業に時間はかかるが、実行形式になったプログラム中には残っていないので実行速度に影響を与えることはない。できるだけ書いておいた方が、後日、再度プログラムを読む必要が生じたときに役に立つ。 |