web-dev-qa-db-ja.com

コードを読みやすくするための最適なタブサイズ

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

タブの最適なサイズについて、文書、研究、または理にかなった議論を誰かが指摘できますか?

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

24
sotangochips
37
esm

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

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

スペース

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つのスペースに決めたと思います。しかし、それは読みやすさのためにとても便利に思えます。すべてのコードは私の周辺視野にあり、すばやくスキャンしている場合、新しいコードブロックの開始を見逃すことはありません。

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
5
Jonathan

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

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

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

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

私の答え:

  • を押す Tab キーは現在の行をインデントする(または選択した行)1つの追加レベルにする必要があります。

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

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

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

4
bignose

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

2
dagorym

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

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

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

Indent = 4のVLCのコードは次のようになります。

            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!=インデント。ハードタブをインデントとして作成することは魅力的ですが、非常に悪い結果ももたらします。多くの人は、コードを調整することも好みます。したがって、上記のようなコードは、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と一致しなくなりました。各行の最後に複数のコメントが追加されると、状況はさらに悪化します。

2
some user

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

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

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

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

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

1
user97370

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

1
Mike Lewis

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

インデント

Use 4 spaces per indentation level.

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

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

このドキュメントには、コードがどのように表示されるか、およびIDによってコードがどのように変更されるかについての例もいくつかあります(ただし、Cの場合)。

1
Flávio Amieiro

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

0
erik

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

0
Rook

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

0
Kai