web-dev-qa-db-ja.com

タブとスペース—これまで、あらゆる状況で、すべてに適切なインデント文字は何ですか?

Drupal.orgでホストされているコードのコーディング標準では、2つのスペースを使用してコードをインデントすることを推奨しています。他のサイトでは、タブを使用してコードをインデントすることを推奨しています。

すべての状況で、適切なインデント文字は何ですか?あなたが与える答えを説明してください。

84
kiamlaluno

スペース

タブは、環境によって列数が異なる場合がありますが、スペースは常に1列です。

インデントを構成するスペース(またはタブ)の数に関しては、特定のタブストップ値を使用するよりも、コード全体で一貫していることが重要です。

129
user8

タブ

さて、もちろん、整合性はどちらよりも重要であり、優れたIDEは違いを無視できるようにします。

私はタブが好きです:

  • それらはインデントのために特別に意図されたキャラクターです
  • インデントサイズの設定が異なる開発者は、コードを変更することなく、コードの外観を変更できます(データとプレゼンテーションを分離して、格好の勝利を収めましょう!)。
  • タブで何かを半字下げすることは不可能です。したがって、3つのスペースを使用するWebサイトから4つのスペースのインデントされたファイルにコードをコピーする場合、不整合に対処する必要はありません。
248
Fishtoaster

タブを使用して、行の開始をインデントします。インデントレベルごとにone tabを使用し、幅をどの程度にするかを全員が選択できるようにします。

文字を行内に揃える場合は、スペースを使用します。これにより、タブのサイズに関係なく常に整列します。

そして、そもそもこの馬鹿げたことを問題にさせたすべての初期のソフトウェア作者を見つけてパンチしてください。
(真剣に、なぜこれが議論されたものでさえあるのですか?次に、改行に複数の文字も使用したいことを教えてくれます!)

117
Peter Boughton

タブ

  • ミスをより目立たせる、スペースをマイクロ管理するのは面倒です。
  • 一貫性があります、間違ってコメントしていない限り、インデントにのみ使用されます。
  • はカスタマイズ可能です。エディターのオプションで幅を指定できます。
  • 生産性が高いので、1つのタブにアクセスできるときに4つのスペースを入力するのはなぜですか。
  • 複数のスペースよりもサイズが小さくなります。
  • スペースよりも多くのスペースを取ります。
  • 通過する時間が少なくて済みます
  • IDEでうまく機能する傾向があります。

スペースは、タブがまったく役に立たない場所で使用する必要があります。

パラメータとコメントを揃える場合でも、 タブはより適切に機能します

76
Tamara Wijsman

タブに関するすべての議論は理論的には素晴らしいです。だが...

理論的には、実践と理論は同じです。実際には、そうではありません。

はい、タブを使用すると、インデントレベルを決定できます。はい、タブとスペースを組み合わせて配置することができます。そして理想的な世界では

実際には、スペースとタブの違いを確認することはできません。コードを移動すると常に混同されるように見え、タブが8列に設定されている別のプログラムでコードを表示するのは面倒です。

以前はタブを使用していました。それから私はチームの一員として働き始め、コードを共有し始めました。私はすぐにスペースの支持者になりました。したがって、タブのユートピアに共感することはできますが、スペースを使用しないことは想像できません。

41
g .
31
Fishtoaster

勝利のためのタブ。

23
Joel Barsotti

I.絶対に。嫌い。 4.スペース。

どうして?主に、キーボードを使用してコードをナビゲートし、leftleftleftleftを押して1つのインデントを超える必要があることにうんざりしているためです。これは、Notepad ++の初期のバージョンと、フォーマットボタンなどがなかった単純なWindowsのメモ帳から生まれました。他の場所で4を使用していたのに、人々が3しか使用しないと、非常に多くの問題が発生しました。

もう1つの理由は、タブ文字インデントのために特別に存在するであり、後になってナビゲーションに採用されただけです。単純なspaceが機能するのに、なぜspacespacespacetabを実行するのですか?シンプルなタブと設定オプションが機能するのに、IDEが2〜5個のスペースコードを処理し、正しくフォーマットする必要があるのはなぜですか。

残念ながら私は少数派です。

20
TheLQ

私は個人的にすべてのタブを使用するのが好きです。なぜなら、各開発者はタブごとのインデントの量を制御できるからです。こうすることで、表示の柔軟性が高まります。

そうは言っても、私は通常、最初にファイル内のコーディングスタイルを真似ています(メンテナンス作業に多くの時間を費やしているため)。

12
Brandon

私は適切なインデントのようなものがあるとは思いません(少なくとも小さな戦争がなければ)。

個人的には4つのスペースが好きです。これらを使用すると、コードをより速く読み取ることができ、すべてのエディターで同じように見えます(Viでも)。

10
Josip Medved

スペース、コメントをコード、関数パラメーターリスト、または複雑な複数行の式、またはそのような性質の右側に配置すると、あなたの美しい作品がすべての人に正しく表示されるようにする必要があります。タブを使用して、タブストップを別の方法で設定できるようにすると、コードインデントの最も単純なケースを除いて、すべての配置が崩れます。

さらに、世界中の誰もがvimを使用する必要があることは明白であり、スペースインデントされたファイルでも、インデント、インデント解除、および「タブストップ」のナビゲートが簡単になります。

8
hobbs

タブは、定義によりインデントに使用されるため、自然で正統な選択です。

残念ながら、タブは不均一に実装されているため、実際のソリューションは4スペースのみです。

6
Wizard79

明らかに、組み合わせのアプローチが必要です。

他の開発者とコードを共有している場合は、標準化する必要がありますが、それは不可能(koff koff)なので、全員に4つのスペースを作らせる必要があります。

次に、それについてバカにならないほど賢く、インデントされたように先頭に4つのスペースがある行を処理する必要があることを理解するためのエディターが必要です。最新のIDEまたはプログラマーのエディターは、タブの代わりにスペースを使用してコードを自動フローできます。

4
Dan Ray

なぜこれを実装できないのですか?

  • コードは問題のシステムにとって有益なコンパクトな形式で保存されます
  • 各開発者がコードを開くと、コードは希望どおりにフォーマットされます
  • 彼らがそれを使い終わったら、コンパクトフォーマットに戻って

誰もが自分の「自分の」形式を見て幸せです

難しいですか?

4
adolf garlic

私は4スペースのような人です。タブは一貫していません。

3
Walter

答えは、すべての状況に対して単一の適切なインデント文字はあり得ないということです。文字を使用したフォーマットは柔軟性がなく、チーム内で異なるスタイルを使用すると競合が発生する可能性があります。

さまざまなフォーマットスタイルでコードを完璧かつ柔軟にフォーマットする唯一の方法は、仮想的に、つまりインデント文字なしで行うことです。これをサポートしていることがわかっている唯一のコードエディタは、以下のサンプルで使用されているものです。

仮想フォーマットを示すために、以下のスクリーンショットは、このインデント方法を使用するXSLTエディター*からのものです(短いビデオ ここ もあります)。 XSLT内のすべての文字は、説明のために黄色で強調表示されており、コンテンツ内のタブまたはスペースの文字のみがはっきりと見えるようになっています。コードのインデントは、左の余白(白い背景)を調整するエディターのレンダリングシステムによって処理されます。

enter image description here

これはBooks行の前にある唯一の先行空白文字です。これはコードではなくリテラルテキストコンテンツであるため、これらの空白文字は保持する必要があります。

仮想フォーマットでは、ソースファイルの文字に影響を与えずに、環境とインデントスタイルに合わせてインデント幅を選択します。以下に示すようにコードのフラットビューが必要な場合は、インデント幅を0に設定することもできます。

enter image description here

これとスペース文字のフォーマットを対比すると、仮想フォーマットなしでエディターで開かれた同じXSLTは、エディターのオートフォーマッターによって次のように変換されます。

enter image description here

上のスクリーンショットの大きな黄色の空白ブロックは、従来のエディターのフォーマッターによって追加されたスペース文字を明確に示しています。残念ながら、これらは実際のコンテンツと区別できないため、この問題を修正するにはXSLTを変更する必要があります。

まとめ

XSLTは極端なケースである可能性がありますが、この原則は多くのプログラミング言語に当てはまります。コンテンツには文字を使用し、フォーマットに関しては別の方法を探す必要があります。

**開示:仮想フォーマットを備えたXSLTエディターは私自身の会社によって開発されました*

3
pgfearo

今まで言及されていません:インデントが重要な言語(Python、Haskell)があります。ただし、スペースまたはタブであっても、1文字は1文字として数えられるため、タブを使用する場合、コンパイラーによって表示されるインデントは画面に表示されるインデントとは異なる場合があります。

したがって、Haskellのような言語では、スペースは必須です。 Makefileでは、TABSは必須です。他のすべてでは、それは個人的な好みの問題であり、今日ではそれほど多くありません-すべてのまともなエディタには、「(タブをスペースに)リードする」および「タブをスペースに(リードする)」コマンドがあります。

3
Ingo

スペースまたはタブ-Atwoodが実際に言っていることは、1つのことを選び、プロジェクトで一貫していることです。コードの書式設定の唯一の聖杯は、その一貫性を確実にすることであり、それによって、あなたがあなたのコードを保守する精神病者が、状況を永久に改善せざるを得なくなるとは感じません。

つまり、Pythonまたは空白が実際のプログラミング構造である他の言語で作業している場合、タブを使用することは想像できません。

3
Noah Goodrich

どうやらDelphiではタブが混乱するので、Delphiではタブを使用しません。

しかし、私はEmacsを使用して他のすべてのことを行い、常にタブを使用します。なぜなら、私のタブは、行きたいところに正確に行くからです。

3
Peter Turner

以前はスペースを使用していましたが、最近は純粋にタブを使用してきました。私のチームの他のすべての開発者はEclipseを使用しているので、私たちがタブを標準化することは、私たちがすでに長い間使用していて、スペースに変更する手間をかける理由がないことに気付いたときに理にかなっています。それがいかに多くの非問題であったかに驚いています。

IDE=でタブの表示サイズを3文字または5文字に設定すると、スペースでインデントされているコードセクション(ほとんどの場合は4日)とタブでインデントされているコードセクションの区別が大幅に簡略化されます。

2
Shabbyrobe

すでに多くの議論が出されていますが、誰が私たちがどこに向かっているのか将来について言及していません

タブもスペースも!

理想的には、コードはデータと見なされるべきであり、特定のテキスト形式で保存されるべきではありません。開発者は自分の好みのビューを適用できます。さらに、このビューはテキストだけに限定されるべきではなく、テーブル、カラーピッカー、数式を含めることができます。

このアイデアは、あまりにも行き過ぎではありません。 JetBrainの Language Oriented Programming エディター Meta Programming System(MPS) は、最初にこれが議論全体を解決し、同時に多くの可能性を追加することに気づいた。 (はい、これはエディタープラグインで可能ですが、テキストで作業すると、MPSのアプローチとは対照的に、多くの不要な複雑さが追加されます。)

タブやスペースとは対照的に、 抽象構文ツリー を直接操作する場合に言及できる欠点はほとんどありません。必要なのは、テクノロジーを商業的に実行可能な製品に成熟させることだけです。この最初の兆候が現れています。主に商用のアクションスクリプトエディターであるMPSに基づいて構築された Realaxy が作成されました。

大手の1人がこのテクノロジーのコンセプトに飛びつき、何が起こるかを見てみたいです。

1
Steven Jeuris

どちらも良くも悪くもありません。唯一の重要なことは、一貫性を保つことです。

あなたが1つのチームであれば、個人的に好きなものを選んでください。お気に入りのエディターのデフォルトの動作を検討しますが、好きなものを選択してください。

チームに所属している場合は、チームがしていることを実行してください。限目。

私はさまざまな仕事で2つのスペース、4つのスペース、8つのスペース、タブ、スペースとタブを使用しましたが、1つのスペースも使用した可能性があります。私は編集者に何をすべきかを伝え、それについてはもう考えません。編集者が詳細を計算します。

その他の唯一のことは、スマートエディターを選択するようにすることです。 Emacsまたはvi?さてそれだ戦いたいと思っている聖戦:-)

0
Bryan Oakley