Drupal.orgでホストされているコードのコーディング標準では、2つのスペースを使用してコードをインデントすることを推奨しています。他のサイトでは、タブを使用してコードをインデントすることを推奨しています。
すべての状況で、適切なインデント文字は何ですか?あなたが与える答えを説明してください。
スペース
タブは、環境によって列数が異なる場合がありますが、スペースは常に1列です。
インデントを構成するスペース(またはタブ)の数に関しては、特定のタブストップ値を使用するよりも、コード全体で一貫していることが重要です。
タブ
さて、もちろん、整合性はどちらよりも重要であり、優れたIDEは違いを無視できるようにします。
私はタブが好きです:
タブを使用して、行の開始をインデントします。インデントレベルごとにone tabを使用し、幅をどの程度にするかを全員が選択できるようにします。
文字を行内に揃える場合は、スペースを使用します。これにより、タブのサイズに関係なく常に整列します。
そして、そもそもこの馬鹿げたことを問題にさせたすべての初期のソフトウェア作者を見つけてパンチしてください。
(真剣に、なぜこれが議論されたものでさえあるのですか?次に、改行に複数の文字も使用したいことを教えてくれます!)
タブ
スペースは、タブがまったく役に立たない場所で使用する必要があります。
パラメータとコメントを揃える場合でも、 タブはより適切に機能します 。
タブに関するすべての議論は理論的には素晴らしいです。だが...
理論的には、実践と理論は同じです。実際には、そうではありません。
はい、タブを使用すると、インデントレベルを決定できます。はい、タブとスペースを組み合わせて配置することができます。そして理想的な世界では
実際には、スペースとタブの違いを確認することはできません。コードを移動すると常に混同されるように見え、タブが8列に設定されている別のプログラムでコードを表示するのは面倒です。
以前はタブを使用していました。それから私はチームの一員として働き始め、コードを共有し始めました。私はすぐにスペースの支持者になりました。したがって、タブのユートピアに共感することはできますが、スペースを使用しないことは想像できません。
興味深いかもしれないいくつかの関連する意見:
勝利のためのタブ。
I.絶対に。嫌い。 4.スペース。
どうして?主に、キーボードを使用してコードをナビゲートし、left
left
left
left
を押して1つのインデントを超える必要があることにうんざりしているためです。これは、Notepad ++の初期のバージョンと、フォーマットボタンなどがなかった単純なWindowsのメモ帳から生まれました。他の場所で4を使用していたのに、人々が3しか使用しないと、非常に多くの問題が発生しました。
もう1つの理由は、タブ文字インデントのために特別に存在するであり、後になってナビゲーションに採用されただけです。単純なspace
が機能するのに、なぜspace
space
space
tab
を実行するのですか?シンプルなタブと設定オプションが機能するのに、IDEが2〜5個のスペースコードを処理し、正しくフォーマットする必要があるのはなぜですか。
残念ながら私は少数派です。
私は個人的にすべてのタブを使用するのが好きです。なぜなら、各開発者はタブごとのインデントの量を制御できるからです。こうすることで、表示の柔軟性が高まります。
そうは言っても、私は通常、最初にファイル内のコーディングスタイルを真似ています(メンテナンス作業に多くの時間を費やしているため)。
私は適切なインデントのようなものがあるとは思いません(少なくとも小さな戦争がなければ)。
個人的には4つのスペースが好きです。これらを使用すると、コードをより速く読み取ることができ、すべてのエディターで同じように見えます(Viでも)。
スペース、コメントをコード、関数パラメーターリスト、または複雑な複数行の式、またはそのような性質の右側に配置すると、あなたの美しい作品がすべての人に正しく表示されるようにする必要があります。タブを使用して、タブストップを別の方法で設定できるようにすると、コードインデントの最も単純なケースを除いて、すべての配置が崩れます。
さらに、世界中の誰もがvimを使用する必要があることは明白であり、スペースインデントされたファイルでも、インデント、インデント解除、および「タブストップ」のナビゲートが簡単になります。
タブは、定義によりインデントに使用されるため、自然で正統な選択です。
残念ながら、タブは不均一に実装されているため、実際のソリューションは4スペースのみです。
明らかに、組み合わせのアプローチが必要です。
他の開発者とコードを共有している場合は、標準化する必要がありますが、それは不可能(koff koff)なので、全員に4つのスペースを作らせる必要があります。
次に、それについてバカにならないほど賢く、インデントされたように先頭に4つのスペースがある行を処理する必要があることを理解するためのエディターが必要です。最新のIDEまたはプログラマーのエディターは、タブの代わりにスペースを使用してコードを自動フローできます。
なぜこれを実装できないのですか?
誰もが自分の「自分の」形式を見て幸せです
難しいですか?
私は4スペースのような人です。タブは一貫していません。
答えは、すべての状況に対して単一の適切なインデント文字はあり得ないということです。文字を使用したフォーマットは柔軟性がなく、チーム内で異なるスタイルを使用すると競合が発生する可能性があります。
さまざまなフォーマットスタイルでコードを完璧かつ柔軟にフォーマットする唯一の方法は、仮想的に、つまりインデント文字なしで行うことです。これをサポートしていることがわかっている唯一のコードエディタは、以下のサンプルで使用されているものです。
仮想フォーマットを示すために、以下のスクリーンショットは、このインデント方法を使用するXSLTエディター*からのものです(短いビデオ ここ もあります)。 XSLT内のすべての文字は、説明のために黄色で強調表示されており、コンテンツ内のタブまたはスペースの文字のみがはっきりと見えるようになっています。コードのインデントは、左の余白(白い背景)を調整するエディターのレンダリングシステムによって処理されます。
これはBooks行の前にある唯一の先行空白文字です。これはコードではなくリテラルテキストコンテンツであるため、これらの空白文字は保持する必要があります。
仮想フォーマットでは、ソースファイルの文字に影響を与えずに、環境とインデントスタイルに合わせてインデント幅を選択します。以下に示すようにコードのフラットビューが必要な場合は、インデント幅を0に設定することもできます。
これとスペース文字のフォーマットを対比すると、仮想フォーマットなしでエディターで開かれた同じXSLTは、エディターのオートフォーマッターによって次のように変換されます。
上のスクリーンショットの大きな黄色の空白ブロックは、従来のエディターのフォーマッターによって追加されたスペース文字を明確に示しています。残念ながら、これらは実際のコンテンツと区別できないため、この問題を修正するにはXSLTを変更する必要があります。
まとめ
XSLTは極端なケースである可能性がありますが、この原則は多くのプログラミング言語に当てはまります。コンテンツには文字を使用し、フォーマットに関しては別の方法を探す必要があります。
**開示:仮想フォーマットを備えたXSLTエディターは私自身の会社によって開発されました*
今まで言及されていません:インデントが重要な言語(Python、Haskell)があります。ただし、スペースまたはタブであっても、1文字は1文字として数えられるため、タブを使用する場合、コンパイラーによって表示されるインデントは画面に表示されるインデントとは異なる場合があります。
したがって、Haskellのような言語では、スペースは必須です。 Makefileでは、TABSは必須です。他のすべてでは、それは個人的な好みの問題であり、今日ではそれほど多くありません-すべてのまともなエディタには、「(タブをスペースに)リードする」および「タブをスペースに(リードする)」コマンドがあります。
スペースまたはタブ-Atwoodが実際に言っていることは、1つのことを選び、プロジェクトで一貫していることです。コードの書式設定の唯一の聖杯は、その一貫性を確実にすることであり、それによって、あなたがあなたのコードを保守する精神病者が、状況を永久に改善せざるを得なくなるとは感じません。
つまり、Pythonまたは空白が実際のプログラミング構造である他の言語で作業している場合、タブを使用することは想像できません。
どうやらDelphiではタブが混乱するので、Delphiではタブを使用しません。
しかし、私はEmacsを使用して他のすべてのことを行い、常にタブを使用します。なぜなら、私のタブは、行きたいところに正確に行くからです。
以前はスペースを使用していましたが、最近は純粋にタブを使用してきました。私のチームの他のすべての開発者はEclipseを使用しているので、私たちがタブを標準化することは、私たちがすでに長い間使用していて、スペースに変更する手間をかける理由がないことに気付いたときに理にかなっています。それがいかに多くの非問題であったかに驚いています。
IDE=でタブの表示サイズを3文字または5文字に設定すると、スペースでインデントされているコードセクション(ほとんどの場合は4日)とタブでインデントされているコードセクションの区別が大幅に簡略化されます。
すでに多くの議論が出されていますが、誰が私たちがどこに向かっているのか将来について言及していません。
タブもスペースも!
理想的には、コードはデータと見なされるべきであり、特定のテキスト形式で保存されるべきではありません。開発者は自分の好みのビューを適用できます。さらに、このビューはテキストだけに限定されるべきではなく、テーブル、カラーピッカー、数式を含めることができます。
このアイデアは、あまりにも行き過ぎではありません。 JetBrainの Language Oriented Programming エディター Meta Programming System(MPS) は、最初にこれが議論全体を解決し、同時に多くの可能性を追加することに気づいた。 (はい、これはエディタープラグインで可能ですが、テキストで作業すると、MPSのアプローチとは対照的に、多くの不要な複雑さが追加されます。)
タブやスペースとは対照的に、 抽象構文ツリー を直接操作する場合に言及できる欠点はほとんどありません。必要なのは、テクノロジーを商業的に実行可能な製品に成熟させることだけです。この最初の兆候が現れています。主に商用のアクションスクリプトエディターであるMPSに基づいて構築された Realaxy が作成されました。
大手の1人がこのテクノロジーのコンセプトに飛びつき、何が起こるかを見てみたいです。
どちらも良くも悪くもありません。唯一の重要なことは、一貫性を保つことです。
あなたが1つのチームであれば、個人的に好きなものを選んでください。お気に入りのエディターのデフォルトの動作を検討しますが、好きなものを選択してください。
チームに所属している場合は、チームがしていることを実行してください。限目。
私はさまざまな仕事で2つのスペース、4つのスペース、8つのスペース、タブ、スペースとタブを使用しましたが、1つのスペースも使用した可能性があります。私は編集者に何をすべきかを伝え、それについてはもう考えません。編集者が詳細を計算します。
その他の唯一のことは、スマートエディターを選択するようにすることです。 Emacsまたはvi?さてそれだ戦いたいと思っている聖戦:-)