SimpleBoxes

コードを記述する時のインデント

私が個人的にスクリプトなど (Perl、JavaScript、HTML、CSS、C、C++、などなど) のコードを記述する際には、インデントとしてタブを利用します。

[画像]タブ幅には通常 2 を指定しています。

タブによるインデントは「百害あって一利なし」とおっしゃる人も見かけたことがありますし、Perl でスクリプトを組む人なら一度は目にしておいて損はない良書「Perl ベストプラクティス」でも、スペースによるインデントが推奨されています。

Perl ベストプラクティスでは、インデントにスペースを利用する理由として、

どのような表示環境でもインデントの一貫性を保つための、確実で、繰り返し可能で、移植が可能な方法

と挙げられています。

一方、タブによるインデントの最大のメリットは「ユーザーがインデント幅を調整できる」という点につきます。

実際、Perl ベストプラクティスではインデントの幅については「4 で妥協する」とあって、あくまでも妥協案でしかありません。

私は現在インデントの幅を 2 に指定していますが、将来それを 3 や 4 に変えるかもしれません。そうした場合にスペースによるインデントでは、幅の調整が面倒です。

ただし、闇雲に字下げ部分にタブを利用することはありません。インデントの一貫性を保つことが難しくなるからです。

例えば、以下のようなコードがあったとします。

	my $isLongName = ($lengthOfChar > 100)
	               ? 'yes'
	               : undef;

先頭の行のインデント数は 1 です。つまり、タブインデント幅を 8 にしている場合は、8 つ分のスペースが字下げされます。

二行目、三行目はいわゆる桁合わせです。コードを見やすさを保持するために、「?」「:」の位置を先頭行の「=」部分に合わせるようにしています。

上記の例では、私が普段記述するルールに則って記述しています。そのため、どのようなインデント幅でも、きちんと揃って見えるはずです。

言うまでもありませんが、等幅フォントを利用している場合です。

字下げにタブを闇雲に利用すると、例えば、以下のようになります。

	my $isLongName = ($lengthOfChar > 100)
				   ? 'yes'
				   : undef;

のようになります。これはタブ幅が 4 の時にのみ揃って見えるコードです。

この手のコードでは、特定のタブ幅であればきれいに表示されますが、タブ幅が変わると悲惨なぐらいガタガタになってしまう場合もあります。

そこで私はインデントに対して、以下のようにルールを決めています。

  • インデントにはタブを利用する
  • タブはインデントにのみ利用し、桁揃えの用途には、必ずスペースを利用する

このルールに従うと、どのような表示環境でもインデントの一貫性を保たれ、インデント幅はユーザーの好きな幅に指定できます。

ただし、このルールに従うと、上述の例のように、行の先頭にタブとスペースが混在する場合があります。

そのため、エディタによってインデントのタブと桁揃えのスペースの区別がつかない場合がある、という欠点があります。

ですから、私は入力されたタブコードを特殊な表示で明示してくれるエディタを利用しています。

スポンサーリンク

<< 口腔洗浄器ってご存知ですか :: [JavaScript]イメージリスト(仮)の動作実験 >>