インデントについて考える 前編 | 悪態のプログラマ
2005年01月31日(月)

インデントについて考える 前編

テーマ:コーディング
プログラムのソースコードを書くときには、行の先頭に空白を入れて段を下げ、意味のあるまとまりをつくって、読みやすくする。いわゆる「インデント」である。

例えば、次のように、関数や、ループ処理(for)、条件文(if)の始まりと終わりを分かりやすくするためにインデントを使う。

  void func(int n){
    for(int i=0; i<n; i++){
      if(i % 2 == 1){
        printf("%d\n", i);
      }
    }
  }

このインデントには、半角スペースや、タブを使う。普通、全角スペースは使用しない(※1)。

タブ(Tab)は、1文字入力するだけで2桁以上インデントすることのできる便利な文字である。ただし、1つのタブが何桁分のインデントになるかは決まっておらず、8桁、4桁、2桁など、環境(エディタなどの設定)によって違ってくる。

このタブの特徴が、ときに面倒な問題を起こすことがある。タブやスペースを好き勝手に使ってインデントされたソースコードを、それが書かれた環境とはタブの桁数が違う環境にもって行くと、表示や印刷が、ガタガタになってしまうことがあるのだ。

たとえば、上記のようなソースがこんな風になってしまう。

    void func(int n){
    for(int i=0; i
            if(i % 2 == 1){
              printf("%d\n", i);
          }
        }
  }

これでは、読みにくくて仕方がない。


と書くと、タブの桁数が環境によって違うことが問題のような気になってしまう。そして、タブは全員4桁に設定しようとか、いや、8桁にすべきだといった議論になりがちである。

しかし、実は、タブの桁数を揃えただけでは、根本的な解決にはならない。確かに、タブの桁数をルール化し、開発チームの全員がそれを厳守すれば、表面的にはソースコードが崩れることはなくなる。しかし、そのルールが通用しないところへソースをもって行くと、やはり崩れてしまうだろう。

他の解決策として、インデントにタブを使わず、半角スペースだけを使うという方法もある。タブがつかわれていなければ、どこに持っていっても崩れることはない。プログラマは、ただタブを使わないように気をつけていればよい(※2)。

しかし、実際には、そのようなプロジェクトは少ない。タブを使うように決められたプロジェクトに参加して、自分だけがスペースのみを使うようなことをしたら、逆にそれがインデントを崩す原因となってしまうだろう。

コーディング・ルールに関しては、郷に入っては郷に従うのが、プロのプログラマである。職業プログラマが、一度もタブによるインデントを使わずに人生を終わるということはほとんどないだろう。

プロジェクトにおいて、タブを使うのか使わないのかといった、最低限のルールを決めることは必要である。しかし、それは決してタブの使い方を知らないプログラマを容認するためのものではない


この問題の根本的な原因は、プログラマのタブの使い方にある。タブの桁数が変わっても、なるべくソースコードが崩れないように書くという配慮が足りないのである。

まず、環境によってタブの表示幅が変わってしまう、ということ自体を知らないプログラマがいる。これは問題外。勉強不足だ。

また、知っていながら、いいかげんなインデントをするプログラマがいる。おそらく、インデントをそれほど重要なものだとは考えていないのだろう。

しかし、読みやすいソースを書くということは、プロのプログラマとしての最低限のマナーである。

そのような人たちには、どうしたら崩れないようにソースを書くことができるのか、一度でも考えてほしいものである。

後編へ続く



※1 このブログの例では、便宜上、全角スペースを使っているので注意。

※2 エディタによっては、タブをスペースに自動的に変換してくれたりする機能があったりするので、それを使うと便利である。



C++ Coding Standards―101のルール、ガイドライン、ベストプラクティス
ハーブ サッター アンドレイ アレキサンドレスク
ピアソンエデュケーション (2005/10)


稼げるJava!今より楽するコーディング
マルチパラダイムシステムズ
技術評論社 (2005/01)
売り上げランキング: 13,942
おすすめ度の平均: 4.5
5 職業的Javaプログラマへの指南書
5 私的には、星5つ
4 一通り文法を学んだJavaプログラマの方に!!!

argvさんをフォロー

ブログの更新情報が受け取れて、アクセスが簡単になります

コメント

[コメントする]

Ameba人気のブログ

Amebaトピックス