SSブログ

インデント [プログラミング]

職業プログラマになって、プログラムを書くときに特に何か1つだけ注意するとしたら、「インデント」じゃないかと思う。 インデントがちゃんとしてなくても動くプログラミング言語がほとんどなので、プログラミングの入門書でも殆ど触れてないが、これを甘く見てるの先輩に怒られる。
以下、思いつくことを書いてみる。

【1.とにかくインデントを付けるべし】
プログラムのブロック単位でスペース(に見えるもの)を付加して整列させる。
コンピューターと違って、人間はソースが何カラム目から始まっているかで、処理の単位を判断するので、インデントが付いてなかったり、ずれてたりするのは最悪に解りにくいプログラムになる。
(どっかからソースをコピー&ペーストするとそうなっちゃうので注意)
インデントを付けないと、プログラムがわかりにくい、というのが最初実感できないかもしれないが、相当ひどいソースで「これを書いた奴は相当の馬鹿か天才か!」と思えるような場合もインデントだけはちゃんとしてることが多いので、すぐに気づくことになるだろう。
逆に言うと、インデントがずれてる人は相当のど素人と言えよう。


【2.インデントを極力深くしない】
初心者が、あまり何も考えずにロジックを組んでいくと、 if 文や for 文が入れ子になって、どんどんインデントが深くなっていく。最初のうちは、インデントが深くなると解りにくいということが判らないと思うが、基本はインデントが深くなると他人(将来の自分を含む)は、「読みにくいなー」と思う。
何が何でもインデントを浅くというのは本末転倒であるが、どういうソースが読みやすいか解らないうちは、とにかくインデントは浅くなるようにすべし。
殆どの場合は、インデントが浅いほうが読みやすい。

Perlの例↓
インデントをなるべく浅くするテクニック
http://labs.unoh.net/2006/08/post_34.html
↑のほかに、
if (A) {
 if (B) {
  処理 X
 } else {
  処理 Y
 }
}


if (A and B) {
 処理 X
} elif (A and (not B)) {
 処理 Y
}

みたいに if 文が入れ子にならないように and/or で条件指定することがある。
A や B の評価を2回することになっちゃうけど、僕は気にしない

【3.インデントの流儀に従う】
ややこしいことに、 1. で「スペース(に見えるもの)」と書いたものは、インデントに使う文字がスペース文字の場合とタブ文字の場合があるから。さらに、タブ文字が4カラムとか8カラムとかエディタで設定できて、もっともややこしいのは「タブは8カラムででインデント幅は4」とか言うのもある。
インデントをタブ文字で入れるかスペースで入れるか、とかインデント幅に対する絶対的な正解はなくて、既存のソースやプロジェクトの流儀に従うのが一番正しい。
昔は、タブでインデントして、タブ8カラムでインデント幅も8というのが多かったが、最近はスペースでインデントして、インデント幅は4とか2に狭まっている模様。
既に古くからあるソースは、途中で勝手にインデント幅は変えてはいけない。
今、新規でプログラム作る場合はスペースで4インデントくらいが普通・・・なのかな?
Google では2インデントだそうな。

既に存在するプロジェクトで、場所によってインデントのルールが違う場合がある。その場合は、あえてインデントを直すためだけにソースを修正しないほうが良い。何もロジックが変わってないところに大量の差分が出て、わけわからんことになる。インデントがおかしいところは、いつか仕様変更が来る時までぐっと我慢するのが良いと思う。

インデントの流儀が自分の思っているのと違っているからと、既存のソースのインデント幅を変えてる人がいたが、大事なのは、インデントの流儀なんて時代や状況によって変わって、正解はないということを知ることではないかと思う今日この頃。

nice!(0)  コメント(1)  トラックバック(1) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 1

scot

僕はtabstop=4でインデントです。
by scot (2008-03-06 13:00) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

トラックバック 1