23

個人的な好みはさておき、コードを読みやすくするための最適なタブサイズ(2スペース?3スペース?8スペース?)はありますか?私が取り組んできたさまざまなプロジェクトでは、人々は大きく異なる基準を持っているようです。2つのスペースインデントを読み取ることができないようですが、Googleのような企業はそれを標準として使用しています。

タブの最適なサイズについて、ドキュメント、調査、または理にかなった議論を誰かが指摘できますか?

具体的に知りたい場合は、主にPythonで作業します。この質問の目的は、私が取り組んでいるチームの基準を選択することです。

4

13 に答える 13

40

Pythonistaの場合は、4つのスペースがあり、ハードタブはありません。

于 2009-05-01T02:08:08.290 に答える
13

私は8つのスペースが好きです(私は知っていますよね?)。それはブロックの開始/終了を本当に明白にします。

あなたの質問に関しては、正式なユーザビリティ調査が必要です。ただし、制限を見てみましょう。

0スペース

function test(){
var x = 1;
for (i=0; i<=5; i++){
doSomething();
}
}

明らかに悪いインデントはありません。どこから始まりどこで終わるのかわかりません。

19スペース

function test(){
                   var x = 1;
                   for (i=0; i<=5; i++){
                                      doSomething();
                   }
}

周辺視野がそれほど拡張されていないため、コードをその親関数またはループ(またはあなたが持っているもの)に視覚的にリンクできないため、インデントの負荷も明らかに悪いです。読みやすくするために、目を前後にフリックしすぎる必要があります。

8スペース

function test(){
        var x = 1;
        for (i=0; i<=5; i++){
                doSomething();
        }
}

「関数」という単語は8文字の長さなので、8つのスペースに決めたと思います。しかし、それは読みやすさのためにとても便利なようです。すべてのコードは周辺視野にあり、すばやくスキャンしている場合、新しいコードブロックの開始を見逃すことはありません。

于 2009-05-01T01:48:31.053 に答える
12
2 space 4 busy coder
3 space for heavy if statement using script kiddies 
4 space for those who make real money pressing space 4 times
8 space for the man in ties and suit who doesn't need to code
于 2009-06-02T06:23:02.227 に答える
5

( jwzが説明しているように)通常、この議論には3つの異なる問題が含まれるため、この議論には誤解が含まれることがよくあります。

  • Tabテキストエディタでキーを押すとどうなりますか?

  • エディタに1つ以上の行をインデントするように要求するとどうなりますか?

  • U + 0009 HORIZONTAL TAB文字を含むファイルを表示するとどうなりますか?

私の答え:

  • Tabキーを押すと、現在の行(または選択した行)がさらに1レベルインデントされます。

    二次的な代替手段として、Emacsのように、コンテキスト依存のfix-my-indentationコマンドにこのキーを使用するエディターを許容することもできます。

  • コンセンサスが十分に強い場合は、1つ以上の行をインデントする必要があります。それ以外の場合は、各レベルで4スペースのインデントを使用することを強くお勧めします。

  • U + 0009文字は、後続の文字を次のタブストップにシフトする必要があります。タブストップは1列目から始まり、8列離れていますが、例外はありません。

于 2009-05-01T03:34:23.950 に答える
4

以前は3つのスペースを使用していました。そして、それはまだ私の好みです。しかし、VBの世界では4つのスペースが標準のようです。それで、私は4に切り替えて、私が見るほとんどのコード例と、そして私のチームの他のメンバーと一致するようにしました。

于 2009-05-01T03:31:06.720 に答える
3

私はあなたの質問に答える研究を知りません。これが主観的でない方法はないと思いますが、私の個人的な好みは4スペースです。

于 2009-05-01T01:24:41.220 に答える
2

Pythonを使用しているので、前に述べたように、Pythonのスタイルガイド(PEP 8)のアドバイスを受けることができます。

インデント

Use 4 spaces per indentation level.

しかし、LinuxカーネルのCodingStyleは異なると言っています。

タブは8文字であるため、インデントも8文字です。インデントを4文字(または2文字)深くしようとする異端の動きがあります。これは、PIの値を3に定義しようとするのと似ています。理論的根拠:インデントの背後にある全体的な考え方は、制御は開始および終了します。特に、画面を20時間連続で見ていると、大きなインデントがある場合にインデントがどのように機能するかを確認するのがはるかに簡単になります。

このドキュメントには、コードがどのように見えるべきか、そしてインデントがそれをどのように変えるかについてのいくつかの例もあります(ただし、Cでは)

于 2009-05-01T04:16:00.620 に答える
2

これまで誰も言及していないので、投稿する義務があると感じています。インデントサイズの選択(OPの意味だと思います)は、コードのインデント方法だけでなく、1行に収めることができるコードの量とそれらの整列方法にも影響します。

開発チームは、最終的には行の長さについて何らかの合意に達する必要があります。私は80列から始めましたが、今日でも80列に固執しています。AFAIK、stackoverflowはソースコードのマークダウンでも80列を使用します。

インデントレベル8を使用し、3レベルの深さでネストされた一般的な関数を使用すると、コードは列24から始まります。これにより、コード行を書き込むのに56文字しか残りません。

VLCの一部のコードはindent=4で次のようになります。

            msg_Dbg( p_libvlc, "Adds %s to the running media player", mrl );
            free( mrl );

            /* send message and get a handle for a reply */
            DBusMessage *reply = dbus_connection_send_with_reply_and_block( conn, msg, -1,
                                                                            &err );
            dbus_message_unref( msg );

indent=8の場合は次のようになります

                        msg_Dbg( p_libvlc, "Adds %s to the running media player", mrl );
                        free( mrl );


                        /* send message and get a handle for a reply */
                        DBusMessage *reply = dbus_connection_send_with_reply_and_block( conn, msg, -1,
                                                                                        &err );
                        dbus_message_unref( msg );

インデントを大きくするとコードが読みやすくなりますが、ネストされたコードをラップアラウンドする前に記述する余地が少なくなります。

タブサイズを8に保つことは非常に重要です。タブ!=インデント。ハードタブをインデントとして作成するのは魅力的ですが、非常に悪い結果ももたらします。多くの人は、コードを調整することも好きです。したがって、上記のようなコードは、tab=4で次のようになります。

            msg_Dbg( p_libvlc, "Adds %s to the running media player", mrl );
            free( mrl );


            /* send message and get a handle for a reply */
            DBusMessage *reply = dbus_connection_send_with_reply_and_block( conn, msg, -1,
                                        &err );
            dbus_message_unref( msg );                                                  

&err線が上と一致しなくなっていることがわかりますconn。各行の最後に複数のコメントが追加されると、状況はさらに悪化します。

于 2016-03-16T21:11:29.917 に答える
1

スペース上のタブの議論は、各人がエディターをカスタマイズして、必要なレベルのインデントを表示できるようにすることです。タブに反対する議論は、タブとスペースが混在している場合、(ライターにとって)見つけるのが難しいということです。タブストップにインデントされていない行が必要になる場合があります。これにより、タブとスペースが混在します。

2つのスペースを使用すると、次の利点があります。ネストされたブロックを増やすことができ(行制限がある場合はこれが重要です)、二重インデント(つまり、4つのスペース)を使用すると、長い行を折り返すのに読みやすくなります。欠点は、2つの行が同じインデントにあるかどうかを判断するのが難しい場合があることです。

8つのスペースを使用すると、2つのスペースとは逆の長所と短所があります。インデントレベルを判断するのは簡単ですが、深いネストは管理が難しくなります。多くの人は、後者の不利な点を利点であると判断します(それは深い入れ子をあまり望ましくないものにするからです)。

4つのスペースは、これら2つの極端な中間のどこかにあります。

しかし、私の個人的な信念は、使用するインデントのレベルに違いはないということです。最も重要なことは、いくつかの標準を選び、それに固執することです。他の人が言っているように、Pythonを書いている場合はPEP8に従い、Javaを書いている場合はSunのJavaスタイルガイドに従い、Linuxカーネルハッキングを行っている場合は彼らのスタイルガイドに従ってください。どちらか一方を使用することに小さな利点があったとしても、どちらを選ぶかを議論するのはエネルギーの無駄です。決定を下し、ソフトウェアエンジニアリングの興味深い部分に進みます。

于 2009-05-02T08:15:42.660 に答える
0

プログラマーがインデントに基づいてネストのレベルを推定するように求められた研究に基づいて、実際には2つのスペースが最適であると読みましたが、求められた場合、プログラマーは4つが最適であると考えました。引用が必要ですが、見つかりません。

于 2009-05-01T02:20:06.267 に答える
0

コードコンプリートにインデントに関するセクションがあり、どのレベルのインデントがコードを最も読みやすくするかについてのいくつかの研究を引用していることを思い出しますが、現在私はそれのコピーを持っていないので、チェックできません。

于 2009-05-01T03:51:47.230 に答える
-1

私はいつも1つのタブを2つのスペースとして使用してきました。

于 2009-05-01T01:26:17.520 に答える
-3

4つのタブスペースを使用すると、コードがはるかに読みやすくなると思います。少なくとも、プロジェクトに取り組んだ限り、4つのタブスペースが最も快適なオプションでした。

于 2011-04-22T20:27:53.887 に答える