一部の言語でタブではなくスペースの使用が推奨されるのはなぜですか?[閉まっている]


10

たぶん私はこれだけですが、タブではなくスペースを使ってインデントする人を困らせることはほとんどありません。タイピングはタイピングSpaceSpaceSpaceSpaceよりも簡単で直感的Tabですか?確かに、タブの幅は可変ですが、スペースよりもインデントスペースの方がはるかにわかりやすくなっています。同じことがバックスペースにも当てはまります。1回または4回バックスペースしますか?

Pythonのような言語でタブの上にスペースを使用することが推奨されるのはなぜですか?


24
を押すと、ほとんどのエディタでタブの代わりにスペースを挿入するように設定できますtab。それをお気に入りのエディターで構成できない場合は、より優れたエディターが必要です。
アダムリア

1つには、多くのエディターは「タブ」が押されたときに4〜8個のスペースを挿入するように設定できるため、タブと同じように1つのキーを押すだけです。
エコーはモニカを復活させると

2
それでも私の質問には答えません。タブではなくスペースを使用する理由 もちろん、タブの代わりにスペースを挿入するようにエディターを構成できますが、おそらくスペースを含むタブを挿入することもできます。問題は、なぜこれをしたいのかということです。どんな利益が得られますか?
Naftuli Kay、

4
@Tkスペースは明確なタブに変更できます
Martin Beckett

3
@TKKocheran。タブを誤って文字列に挿入すると、タブが出力に対してファンキーなことを行うため。
zzzzBov

回答:


15

主に一貫性。

また、Pythonのように、実際に空白を実際に使用するものも時々発生します。次のコードスニペットを実行するとどうなるでしょうか。

def foo():
    print "a"
    print "b"

回答:これら2つの印刷ステートメントは同じレベルでインデントされていないため、同じコードブロックの一部ではないため、IndentationErrorが返されます。(1つ目はタブを使用し、2つ目はすべてスペースを使用します)

次に、1つの開発者のエディターのタブが8スペースに設定され、別の開発者が4に設定され、誰かが奇妙な理由で5を使用しているという苛立たしいケースがあります... SVNと他の誰かが更新すると、恐ろしい、恐ろしい混乱が表示されます。

つまり、スペースであろうとタブであろうと、これらは常に一貫している2つの本当に良い理由です。

ただし、スペースを使用すると、タブよりもインデントをはるかに制御でき、エディターを機能させるためにエディターで特別な構成を行う必要はありません。(たとえば、vimでは、set expandtabタブを押すたびにスペースを挿入するのに使用するだけで簡単にできます)

編集:そして面白いことに、サイトは私のブラウザを正しく表示できるように私のタブをスペースに正規化しているようです。「編集」をクリックすると、元のタブが含まれます。;)


5
タブに関する問題(特に、恐ろしいSVNの混乱)は、エディターでtabs-to-spacesオプションを使用した場合にのみ発生します。あなたとあなたのチームがtabs-to-spaceオプションを無効にすることに同意した場合、タブはどのビューでも常にタブになります。それは、エディターに表示する幅の選択にすぎません。
HorusKol

@HorusKolいいえ、恐ろしい混乱は、スペースとタブが混在したためです。私はそれを十分に明らかにしなかったと思います(「恐ろしい、恐ろしい混乱」の行の後の唯一の文を参照してください)。したがって、スペースが4スペースに相当するように設定されている場合、スペースはタブとうまく一致するように作成されましたが、他の誰かがそれを表示すると(タブとスペースが設定されているかどうかにかかわらず)、混乱します。
Izkata


21
これが、空白を意味する言語のアイデアを設計上の欠陥であると考える理由です。見えないものはコードを壊してはいけません。
ポールネイサン

念のため、@ PaulNathan
Izkata

11

これは、Pythonのインデントと空白についての良い議論です。記事から:

タブのセマンティクスはコンピューターの世界ではあまり明確に定義されておらず、システムやエディターの種類によってまったく異なる形で表示される可能性があるため、タブをすべて回避することはお勧めできません。また、コピーと貼り付けの操作中、またはソースコードの一部がWebページやその他の種類のマークアップコードに挿入されたときに、タブが破壊されたり、誤って変換されたりすることがよくあります。

スペースバーまたはバックスペースキーを2回以上押すことについてのあなたの議論については、ほとんどのソースコードエディターは、タブキーを1回押すだけで設定可能な数のスペースを挿入し、同様にインデントを解除するため、押したときにキーがなくなるインデントにスペースを使用します。

IDEで表示している場合でもless、メモ帳で表示している場合でも、コードは常に同じ量のインデントで表示されるため、私自身はスペースを使用します。つまり、スペースはよりポータブルです。


3
re:「IDEで表示しているのか、それともメモ帳であるのか。つまり、スペースの方が移植性が高い」-これは、今まで聞いたスペースの中で最も良い議論です。私自身も「タブ」の人ですが、予期しない方法でタブスペースコードがレンダリングされるのを嫌うことがあります。
Aerik

2

Pythonでは、インデントがプログラムフローを制御するため、重要です。
タブでフォーマットされたコードを取得してコピーすると、タブが変更されたり失われたりして、コードの構造が破壊されます。スペースは常にスペースです=より安全です。

スペースバーの摩耗が気になる場合は、エディタがタブを自動的にスペースに変換するように設定されている可能性があります。


私は、スペースまたはバックスペースを4回入力するのに費やす無駄な時間と、両方を行うための1回のキーストロークにもっと関心があります。
Naftuli Kay、

ええ、でもPythonはそのように奇妙です。スペースを気にするものは他にありません。
Aerik

@TKKocheranああ、それがあなたの本当の関心事ですか?彼らはそれをどうやったのか私は知りませんが、そのバックスペースは完全に透過的に、複数のスペース上、最後のタブストップに戻って、私の仕事でのvimが設定されている
Izkata

ダンプ.vimrcしてくれませんか:)
Naftuli Kay

1
@TKKocheranはそれを見つけました-それはただset softtabstop=4であり、TABとBACKSPACEの両方が4つのスペースをタブとして使用します。(まあ、それぞれのタブ
ストップ

2

タブだけでは多くのスタイルに対して十分な柔軟性がないため、スペースを常に使用する必要があり、タブとスペースを(ほぼ)混在させると常に絶対的な混乱が生じます。

一般的スペースを必要とする 1つのスタイルの例として、次のようなものを検討してください。

call_some_function(parameter1,
                   parameter2,
                   parameter3,
                   parameter4,
                   parameter5,
                   parameter6,
                   parameter7);

すべての関数の名前をタブサイズの正確な倍数(括弧のマイナス1)に変更するつもりがない限り、タブだけでこれを行うことはできません。

タブとスペースの混在に関しては、ほとんどすぐに深刻な問題に遭遇します。タブが常に同じように展開されているわけではありません。一部のソフトウェアは、タブを特定の数のスペースに相当するものとして扱います。他のソフトウェアは、特定の数のスペースを法としてタブを拡張します-たとえば、タブの後の項目は常に(たとえば)8の倍数である列番号から始まります。

スペースがタブと混ざらないようにすることができたとしても、問題は依然としてあります。タブも可変幅フォントでうまく機能しません。この問題は、(たとえば)末尾のコメントを揃えたい場合に発生します。

a.m = 9;   // this is the slope
a.i = 4;   // this is the intensity
a.x = 1;   // this is the x-intercept

彼らは今立っているので、それらはすべて完璧に並んでいます。ただし、可変幅フォントで表示すると、見苦しくなります。スペースがあると、コメントの位置が少しずれる場合があります(多くの場合)。ただし、タブを使用すると、ミスアラインメントが非常に急増することがよくあります。

a.m = 9;          // this is the slope
a.i = 4;  // this is the intensity
a.x = 1;          // this is the x-intercept

突然、可変幅フォントの「i」と「m」または「x」の幅の小さな違いが、タブストップ全体に拡大されました。

肝心な点は、タブを使ってコードを表示する方法のほとんどすべての変更は、取るに足らないように見えても、読み取り不能な混乱を引き起こす可能性があることです。

他の質問に答えるために:他の人がすでに指摘していますが、スペースバーを使用して実際にスペースを挿入するプログラミングエディター(または他の多くのこと)の誰も想像できないので、「タイピングspacespacespacespace」に関する質問はとにかく誰もそれをしないので無関係です。同様にバックスペーシングの場合:BkSpc前のタブストップに移動するために4回押す必要があるエディターを想像するのは難しいので、(ここでも)質問は関係ありません。

ボトムライン:あなた(とのみあなたが)するかどうかのタブが細かいです今まであなたのコードを見て、あなただけの今までにあなたがいることを、単一のエディタでそれを行うことはありません、しかし、とても近くに不可能にする(!すべてで)これらの条件の再設定をしています合理的な答えが1つしかないことを強制します。決してタブを使用しないでください。


1
「プロポーショナルフォントはスペースとタブの両方を分割しますが、タブはもっとうまく分割されないので、スペースを使用してください」と言われているようです。弾性タブストップを使用しないのはなぜですか?nickgravgaard.com/elastictabstops
amara

@sparkleshy:それはいいアイデアですが、実際のコードに違いはなく、すべて(または少なくとも大部分)の実際の編集者が既にそれをインクルードするまではありません。
ジェリーコフィン

...私は知っています: '(-まあ、ちょっと。スペースで裏付けられた(スペースを使用している場合はタブキーが必要なように)エディタを引き続き使用できますが、それらは弾性タブストップのふりをします;スペースの管理を行いますより簡単に
amara

2
あなたは、比例幅フォントにしているプログラミングは、よく、あなたは心配するだけでタブよりも多くの問題を持っていれば...
ブライアンKnoblauch

1
@BrianKnoblauch:フォントeurofurenceを使う人として、私は同意しないでください。私の問題を引き起こす唯一のものはスペースです。もちろん、私のインデントスタイルにも関係しています。これは、行間で複数のタブが異なることはありません。弾力性のあるタブストップが表示されるとすれば、コードはさらに良くなります。
メイガス2014

2

大きな問題は、「タブ」の幅の不整合であり、4つのスペース、8つのスペースとしてレンダリングされることがあります。多くのエディターでは、1〜9のスペースに設定できます。

したがって、これは単純なWYSWYGエディターを、他の誰かが得たものと同じものに変えます。

これはPythonに特有の問題ですが、インデントが人間の読者に意味を伝えるために使用され、めちゃくちゃにされたタブによってコードが読みにくくなるため、「中括弧」言語のいずれにも問題があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.