プログラミング作法とは
プログラミング作法とは、コンピュータプログラムのスタイル、つまり「書き方」に関する原則です。これは単に「動く」コードを書くだけでなく、
読みやすく、理解しやすく、保守しやすいコードを書くための指針となります。
古典と現代
プログラミング作法の分野における古典としては、1970年代の書籍『
プログラム書法』(The Elements of Programming Style)が挙げられます。この書籍は、現代においてもプログラミングの普遍的な原則を教えてくれます。しかし、FORTRANを例に使用しているため、古い言語の制約に由来する記述も見られます。プログラミング作法は、特定の言語や時代に依存しない、より普遍的な概念です。
コーディング標準
プログラムのスタイルは、個人の好みだけでなく、組織やプロジェクトで定められた「コーディング標準」や「コーディング規約」に従う場合もあります。例えば、
PythonのPEP-8やPHPのPEARのように、言語コミュニティが公式なガイドラインを提供していることもあります。これらのガイドラインは、チーム開発における一貫性を保つために重要です。
良いスタイルとは
良いスタイルとは、プログラムの
明瞭な表現を志向するものです。具体的には、以下のような要素が含まれます。
ソースコードのレイアウト: 字下げ、空白の使用、キーワードと変数名の区別など、コードの視覚的な構造
適切な命名: 変数名、関数名など、識別子の意味を明確にする命名規則
適切なコメント: コードの意図や処理を説明するコメント
制御構造: ループや条件分岐などの適切な使用と、goto文のような乱用のリスクがある機能の戒め
良いスタイルは、以下の目標を達成することを目指します。
間違ったプログラムが明らかに間違って見える
正しいプログラムはその正しさを検証するのが容易となる
ソースコードの見た目
ソースコードの見た目は、コードの
可読性や保守性に大きく影響します。フォーマットに関するものは、自動整形ツールに任せることもできますが、命名法は依然として重要な要素です。
字下げ
字下げ(インデント)は、
制御構造やブロック(複文)を識別しやすくします。
Pascalや
C言語のように、構文上、ブロックの範囲が明確に定義されている言語では、字下げは見た目の問題ですが、一貫性のある字下げはコードを読みやすくします。
以下に、いくつかの
字下げスタイルの例を示します。
オールマン: ブロックの開始中括弧を制御文と同じ行に、終了中括弧を字下げするスタイル。
K&R: ブロックの開始中括弧を制御文と同じ行に、終了中括弧を字下げするスタイル(オールマンとほぼ同じ)。
GNU: ブロックの開始中括弧を改行して、終了中括弧を字下げするスタイル。
どのスタイルが良いかは個人の好みやチームの規約によりますが、重要なのは一貫性です。異なるスタイルが混在していると、コードの
可読性が低下します。
桁位置合わせ
隣接する行の桁位置を合わせることで、コードの関連性や構造を明確にすることができます。例えば、対応する変数や定数を縦に揃えることで、間違いや不整合を見つけやすくなります。
// 桁位置合わせの例
search = "apple";
replacement = "orange";
search = "apple";
replacement = "orange";
しかし、桁位置合わせは、コードの修正が難しくなったり、型のある言語では型と変数名が離れてしまうため、必ずしも良いスタイルとは限りません。
構造体などで関連性を明確にする方が良い場合もあります。
空白類
空白は、演算子やキーワードの前後、また改行にどのように使うかは、言語によって扱いが異なります。FORTRANのような古い言語では空白はほとんど無視されましたが、現代の言語ではトークンを区切る役割や、インデントの役割があります。
積極的にインデントを利用する
オフサイドルールを採用している言語もあります。
その他のスタイル
命名規則
適切な変数名を選ぶことは、コードの
可読性を高める上で非常に重要です。意味のない変数名を使用すると、コードの理解が難しくなります。
// 悪い例
get a b c
if a < 24 and b < 60 and c < 60
return true
else
return false
// 良い例
get hours minutes seconds
if hours < 24 and minutes < 60 and seconds < 60
return true
else
return false
ブーリアン値
ブーリアン型の計算結果を直接返すか、条件文を使うかは個人の好みによります。最近の
コンパイラはどちらも同じオブジェクトコードを生成しますが、
デバッグの容易さから条件文を使うことを好むプログラマもいます。
ループは、`while`文よりも`for`文を使った方が、より簡潔に書ける場合があります。
// while文を使った例
count = 0
while count < 5
print count 2
count = count + 1
endwhile
// for文を使った例
for count = 0 to 5
print count * 2
制御構造の本体が単文でも、ブロック(複文)にすることを推奨するスタイルもあります。これにより、セミコロンの打ち間違いや、意図しないコードの挿入を防ぐことができます。
リスト
複数の要素をコンマで区切りながら列挙する場合、コンマをターミネータとして使うか、セパレータとして使うかはスタイルによります。複数行の場合はターミネータの方が自然ですが、1行の場合はセパレータの方が自然に感じられることが多いです。一貫したスタイルを選ぶことが重要です。
// ターミネータの例
(
要素1 ,
要素2 ,
要素3 ,
)
// セパレータの例
要素1, 要素2, 要素3
まとめ
プログラミング作法は、単なるコーディングのテクニックではなく、
コードの品質を高めるための哲学です。良いスタイルは、コードをより読みやすく、保守しやすくし、
バグを減らすのに役立ちます。チームで開発する場合は、コーディング規約を共有し、一貫性のあるスタイルを維持することが不可欠です。