ベストアンサー
最初に、私は約10年間プロのプログラマーであり、 (私は本当に若かったので)20年近くプログラミングに手を出しました。私はPHP、Java、C ++、Python、JavaScript、C#、ASP、およびQBasicを作成しました(はい、私は年をとっています)。また、SQL、CSS、HTMLも定期的に扱っています。
Windows、Linux、Macでエディターを使用しました。ターミナルウィンドウ内でもエディターを使用しました。私はプロとしてプログラミングを始めて約10年になります。 30以上のエディター(VIMやNanoなどのテキストエディターとVisual StudioやPhpStormなどのIDEの両方)を使用した個人的な経験から、エディターのタブのデフォルトの表示は大きく異なることがわかります。
さらに、同じ設定を指定した場合でも、エディターまたはエディターのフォントが原因で他の奇妙な点や不整合が生じることがあります。スペースは標準の言語構造であるため、この問題はありません。
一貫して気づいたことの1つは、PHP-FIGなどのほとんどのプログラミングスタイルガイドでは、タブスペースを使用するように指示されていることです。これは、スペースを使用してタブ文字を模倣するタブです。スマートタブと呼ばれることもあります。
これは、かなり最新であると考えることができるすべてのエディターでサポートされています。したがって、速度についての議論は完全にばかげています。ディスクにかかるスペースについての議論も。文字通り、ファイルサイズが約0.5バイト余分に気になる人はいません。それがあなたの懸念であるなら、あなたはディスクスペースとコストにひどくねじ込まれています。
残っている唯一の議論は視覚的な表示です。これは、スペースがほこりの中にタブを残す場所です。スペースで表示されるタブには一貫性がありません。スペースは、すべてのエディターで同じように見えます。タブは大きく異なり、ターミナルエディタでファイルをポップオープンする必要がある場合(たとえば、リモートサーバーで何かを検査する場合)、特にテキストのみのエディタで右にスクロールする必要がある場合は、タブを扱うのが嫌になります。
一貫性と標準化(特に最も一般的な標準)が必要な場合は、スペースを使用します。ばかげた苦情だけに集中して、一緒に仕事をしている他の開発者を怒らせたい場合は、タブを使用してください。
回答
スペースに対するタブの利点は次のとおりです。
- 個々の開発者はコードに異なるインデントを選択できます。
- 使用するストレージスペースも少なくなります。
タブには問題があります。
タブは最大列幅とうまく相互作用しません。プロジェクトは、開発者がモニター上で並べて差分を実行できるようにすることや、開発者がコードをすばやくスキャンできるようにすることなど、いくつかの理由で最大列幅を選択します。 (行の長さが長いと、読み取り速度が低下します。これが、出版社が教科書で複数の列を使用する理由の1つです。)
コーディング標準で最大行長が80列に指定されているとします。
最初の開発者開発者は4回インデントされた行を持っており、2つのタグのインデント設定を使用しています。これは、コードが8列インデントされていることを意味します。開発者はフルラインを書きます。その行は72文字で構成されています。
このコードはレビュー担当者に送信されます。レビュー担当者は、4文字のタブインデントを使用しているコードを確認します。 4つのタブの幅は16文字になりました。行は列88に移動します。レビュー担当者は開発者に8文字を切り捨てるように指示します。
コードを見ている2番目のレビュー担当者は、8文字のインデントを使用しています。レビュー担当者は、8文字のタブインデントを使用してコードを確認します。 4つのタブの幅は32文字です。レビュー担当者は、開発者に24文字を切り捨てるように指示します。
スペースを使用するか、組織に統一されたタブ設定を指定すると、これらの問題は解消されます。固定タブ設定を指定している場合は、最初にタブを使用するための主要な引数の1つを削除しました。
ここで、フォーマットされたテキストを含むヒアドキュメントまたは複数行の文字列について考えてみましょう。 asciiflowやmonodrawなどのツールで作成された図を埋め込むことができます。インデントにタブを使用している場合、図面をインデントするには、インデントとスペースを組み合わせて使用する必要があります。これを異なるタブインデントで機能させるには、次のことが必要です。
- 先頭のタブとそれに続くスペースの組み合わせを使用して、特定の列に揃えます。画像内のすべての行に同じ数のタブインデントが必要です。そうでない場合、他のタブインデント設定で使用すると画像が正しく表示されません。
- スペースで区切られたセクションの開始を示すマーカー文字を入力します。例えば\ t / * \ n \ t * foo \ n \ t *。 | \ n \ t *バー\ n \ t * / \ n
- これらのグラフィカルな領域でタブ標準を廃止します。
- 複数行の文字列またはコメントを非合法化します。
インデントにスペースを使用すると、これらの問題はすべて解消されます。