最終更新日 2021年3月1日
Arduinoにコーディングスタイルが提唱されていることをご存じですか?
最近ライブラリの使い方に方言が多いと感じていたところ、『Arduinoのコーディングルールと命名規則を調べてみた』と云うブログを見つけました。
ライブラリ制作者に対しては『平均的な人がそのことをどう思っているかを考え、その周りにAPI関数を整理してみてください。』と多くの人が直感的に扱えるAPIを推奨しているように思います。
- 能動態で書く。※一般に能動態で書いた方が、文意が明快になり、読者に自分の意図を伝えやすくなる。
- 単純で誤解を与えない表現にする。※
- 全体像を示し、次に、それを使用する方法を段階的に説明する。
- 専門用語を初めて使用するときはそれを定義し、説明を付ける
- 使用する用語を統一する。同じターゲットについて一般的な表現があるのに敢えて新しい名前を付けない。
サンプルコードの記述
- 読みやすさを重視する。
- setup()とloop()の記述場所をプログラムの先頭に記述する
- if(somethingIsTrue)doSomething;
ではなく
if(somethingIsTrue == TRUE){
doSomething;
}
のようにブロック形式を推奨- ポインタの使用を避ける
void printArray( char* array);
ではなく
void printArray(char[] array);
とすべき- #defineの記述を避ける※constintsを使用 変数なのか定数なのかを明確化
- 1文字変数名は避ける。説明的な名前を付けるべき。
- uint8_t と云うような変数タイプは避け、boolean、char、byte、int、unsigned int、long、unsigned long、float、double、string、array、voidなどを使用する。
- 番号付けスキームはユーザの混乱をさせないようにする
- プログラムの先頭にコメント文を記述
/*
* スケッチタイトル
* 回路:入出力リスト
* 作成日月年/著者の名前/変更された年月日/著者の名前
*/- 確立されているコアライブラリとスタイルを使う
- 入力のreadにread()、出力のwriteにwrite()を使う。
- ライブラリのインスタンスを初期化するために、通常各種設定を含むbegin()を使う。それの終了にend()を使う。
- 関数名の命名としてローワーキャメルケース(先頭を小文字で書き始め、複合語のスペースをなくし要素の先頭は大文字にする)を使う。スネークケース(すべて小文字で複合語のスペースをアンダースコアで区切る。)は避ける。
まだまだ、細かな推奨がなされています。
- インデントは2文字だとかといった推奨はなかなか受け入れられません。自分は8文字にしています。
インデントを深くしすぎない記述も考慮する必要が出ますが。- 自分は#defineの記述が好きなのですが、確かに型が不明瞭になる点はその通りです。ただ、#defineで記述する値は固定値というのが前提のように思っていました。変数として使わないということでいいように思います。
- setup()とloop()を最初に記述するとありました。自分は最後に記述しています。プログラムを見通すには先頭にあったほうがいいのでしょうかね。
このような提言が為されている以上、極力従っておきたいです。少なくとも誤解を招かない対策になるのかと思っています。
免責事項
本ソフトウエアは、あなたに対して何も保証しません。本ソフトウエアの関係者(他の利用者も含む)は、あなたに対して一切責任を負いません。
あなたが、本ソフトウエアを利用(コンパイル後の再利用など全てを含む)する場合は、自己責任で行う必要があります。本ソフトウエアの著作権はToolsBoxに帰属します。
本ソフトウエアをご利用の結果生じた損害について、ToolsBoxは一切責任を負いません。
ToolsBoxはコンテンツとして提供する全ての文章、画像等について、内容の合法性・正確性・安全性等、において最善の注意をし、作成していますが、保証するものではありません。
ToolsBoxはリンクをしている外部サイトについては、何ら保証しません。
ToolsBoxは事前の予告無く、本ソフトウエアの開発・提供を中止する可能性があります。
商標・登録商標
Microsoft、Windows、WindowsNTは米国Microsoft Corporationの米国およびその他の国における登録商標です。
Windows Vista、Windows XPは、米国Microsoft Corporation.の商品名称です。
LabVIEW、National Instruments、NI、ni.comはNational Instrumentsの登録商標です。
I2Cは、NXP Semiconductors社の登録商標です。
その他の企業名ならびに製品名は、それぞれの会社の商標もしくは登録商標です。
すべての商標および登録商標は、それぞれの所有者に帰属します。