インデント:tab文字と空白文字
ソースのインデント(字下げ)に、tab文字、空白4文字・8文字のどれを使うのが一番いいのかって、ふと思った。
オイラの好みは、tab文字なのだけれど。
んで、検索してみると、小飼弾さんがtabはありえない!と弾言している。(2006年だけど)
というのも、「patchコマンドを適用するとき、diffの結果をコピペするとtab文字がスペースに変わってしまう」のを避けるため、tab文字使うなよーと。
・・・まあ、そうなんだろうけどね。
でも、正直、オイラはpatchコマンドなんて使わないから・・・。
それに、patchコマンドを用いていたころ(今も使ってるの?)と、今は状況が違う。
昔は、修正を適用するにも送信コストが高かったから、差分だけ送ってpatchコマンドで適用しようって話でしょ。
今は、ソース全体を送るのも簡単だし、何よりGitやSubversionとかのバージョン管理ツールがあるし。簡単に修正を手に入れられるし、手間もそんなにかからない。
というわけで、空白でのインデントにこだわるのは、今更でしょ・・・、ってことにはならないのが面倒くさい。
tab文字と空白文字の利点・欠点を考えてみる。
- インデント位置を固定できるか、できないか
空白文字は、インデントの位置を強制的に固定する。
tab文字は、(エディタ、統合環境の設定により)ユーザが位置を見やすい位置に変更できる。
→手軽にタブ位置を設定できるという点はtab文字の強みなのだけれど、それが弱点でもある。
そう、tab文字の最大の問題は、表示を可変にできるが故(そして4文字分か8文字分か、はたまたユーザ任意か指定できない故)、ほかの文字列と合わせるように想定した位置がずれてしまう可能性がある。
たとえば、関数引数を改行しているときは、tab文字だと4文字分と想定していて、ユーザが8文字にするとインデントが盛大にずれてしまう。 - キー入力数がtab文字のほうが少なくて済む
tabキーを打つと空白文字を入れるようにエディタを設定すればいいじゃん。(viはどうすれば?設定知らん) - ファイルサイズが空白文字のほうが大きくなる
tab文字だと4文字分の空白を1バイトで表現できる。HDD容量を圧迫しないし、通信の時も早く送信できるよ!
って今更さらなお話。どんだけ貧困な環境?
こう考えてみると、空白文字にしたほうがイイみたい。
なぜなら、tab文字はインデント位置を特定させたいために入れるわけで、しかし、ユーザ設定によって入力したときとインデント位置が変わってしまう可能性がある。(いちいち、「tab文字=4文字」って知らせて廻るのか?)
インデント位置を入力したときと同一にするには、空白文字を使うのが確実だ。
しかし、インデントを空白1文字、2文字とか、脳味噌腐ってんのかっていうようなソースがある。こういう場合は、tab文字にしろよなと苦々しくおもうことがある。
→こういうソースは、クソ長い処理の前後にif文とかブロックを追加するときとかに多い。
インデントを修正するのが面倒だからか、差分をif文だけにして修正量が少ないと見せたい(UTはif文内に入る・入らないだけで確認したい)のか・・・。
前者なら将来困ることを考えない馬鹿だし、後者なら処理がif文で分岐が変わるんだからif文内は変わったってことで差分として見せないとダメであり、UTで中身を確認するべきだと思う。
あと、試しに入れてみて後で修正するつもりでしたがそのまま確定してしまいました、とかもあるけど、コードの書き方を統一しない時点で、そいつ、うん子プログラマ確定。
正直、tab文字がいいか空白文字がいいか、こんなことに心血注いで議論するのは時間の無駄と思う。さっさとコーディング規則でどちらかを使うか決めて、整形ツールなり統合環境の設定を展開してしまえ。
開発が進んでいる間に、どちらかを選ぶか延々悩んで、tab文字・空白が混在するようなカオスな状況にするより、どっちかに嫌いと言われてもどっちかを選ぶほうがナンボもましな状況だと思う。
だが、オイラ個人のソースは、tab文字を使う方向で。(統合環境で空白4文字の場合はその限りでなく。変更するのが面倒だから)
« 怖い怖いでフタをする | トップページ | 株:現物売り約定(新光電気興業、コーエーテクモホールディングス) »
コメント