インデントと TAB の宗教論争

職場の大先輩が「インデントに TAB とスペースが混ったコードは困る」とボヤいておられた。

Emacs 使いの私からすると、何が問題なのか理解できない。

大先輩:「そういうコードは (俺のエディタで開くと) インデントがグチャグチャになる。」
ひがき:「TAB 文字の表示幅を 8 以外にするからですよ。」

この後、激しくお説教された。*1

大先輩がおっしゃるには、

  • インデントには TAB 以外使わない。
  • インデント以外に TAB は使わない。

という制約の下でコーディングしなければならないらしい。

そうすることで TAB 文字の表示幅を自分の好きなように変更してもインデントが崩れないんだとか。*2

常々思うことは、

  • そこでコードをインデントしたいという要求*3と、
  • TAB キーを押すという行為と、
  • ファイルのその位置に TAB 文字を書き込むという動作*4は、

それぞれ別の概念なんじゃないかと。*5

それから、

  • インデント幅を何文字分にするかという設定*6と、
  • TAB 文字の表示幅を何文字分にするかという設定*7も、

それぞれ別の概念なんじゃないかと。

Emacs という名のガラパゴスにいるから、こう思うんだろうか。*8


宗教論争はスルーするとして、ひとつ気になることがある。

昔 Sun が公開していた Java のコード規約には、

Four spaces should be used as the unit of indentation. The exact construction of the indentation (spaces vs. tabs) is unspecified. Tabs must be set exactly every 8 spaces (not 4).

とあり、

  • インデント幅は 4 文字分。
  • TAB の表示幅は 8 文字分。
  • インデントに TAB を使ってもスペースを使ってもよい。

と言ってるんだよね。

明らかにデファクトスタンダードとは違うわけだが、みんなどうしてるんだろうか?

  1. これを守るために苦労している。
  2. Sun の文書なんか無視。
  3. 参考にしてる文書が古過ぎる。
  4. 俺の使ってる IDE ならふつうにそうなってるよ。
  5. その他。

たぶん 4 なのかな?
すごく気になる。

*1:いやいや、先輩と一緒に仕事するときは、ちゃんと tabify してますよ。

*2:だから何でいちいち TAB 文字の表示幅を変更する必要があるんだろうか?

*3:Emacs では、たとえば c-indent-command

*4:Emacs では、C-q TAB

*5:バックスペースキーを押して「ファイルに 0x08 が書き込まれていない」と言って怒る人は、あまり見かけない。TAB キーだって同じだと思うんだが。

*6:Emacs では、たとえば c-basic-offset

*7:Emacs では、tab-width

*8:きっと vim script とかでも同じことができるんじゃないのかなぁ。