PEP-8が行の最大長を79文字に指定しているのはなぜですか?[閉まっている]


235

なぜこの千年紀にPython PEP-8最大行長を79文字に指定する必要があるのですか?

ほぼすべてのコードエディタは、長い行を処理できます。ラッピングをどうするかは、コンテンツ作成者の責任ではなく、コンテンツ利用者の選択であるべきです。

この時代に79のキャラクターを厳守する(正当な)正当な理由はありますか?


73
あなたの質問への答えはある PEP-8。
cdleary 2008

29
ラインの長さが短いほど、KLOCが増加して生産性が向上します。:p
Alex

26
79文字の制限は完全に古くなっています。適度に複雑なコードベースは、コードを読みにくくする方法を示しています。例:github.com/openstack/nova/blob/master/nova/network/manager.py
Jonathan

6
@ジョナサン:私には元気に見える...
nperson325681

9
サイドバイサイドのdiffツールを使用していませんか?
内部石2016

回答:


129

PEP-8の価値の多くは、重要ではないフォーマットルールについて議論するのをやめ、一貫して適切にフォーマットされた適切なコードの記述を続行することです。確かに、79が最適であるとは誰も考えていませんが、99や119に変更したり、希望する線の長さを変更したりしても、明らかなメリットはありません。選択肢は次のとおりだと思います。ルールに従って、戦う価値のある原因を見つけるか、行の長さによって読みやすさと生産性がどのように変化するかを示すデータを提供します。後者は非常に興味深く、人々の心を変える良い機会になると思います。


28
ほとんどの読書研究はインチ単位で行われ、1行あたりの文字数ではありません。66文字の規則は、新聞を読むために行われた研究に基づいています。 最近の研究によると、オンライン記事を読むとき、読解速度は1行あたり最大約120文字(サイズ12フォントで10インチ)まで向上し、理解力を失うことはありません。
ペース

7
実際、そのトピックを読んだ人は全員、79文字が最適だと思っています。それがPEP8に追加された理由です!この答えは実際には間違っています。これは正しいものです
erikbwork '29

6
私は質問は79が良いよりも80または78である理由についてであると思った
n611x007

157
there's no obvious gain in changing it to 99 or 119 or whatever your preferred line length is これは非常に多くの点で間違っています。行を40文字で折り返して、読みやすさを教えてください。明らかに、折り返しが少ないということは、2015年にそうしている画面スペースがある限り、可読性は高くなります。折り返しは読みやすさに影響します。読みやすさは保守性に影響します。保守性は品質に影響を与えます。80文字で折り返すと、品質に影響します。フルストップ。
ジョナサン

6
それらの研究はテキストの実行を想定しているため、コード以外のすべてのもので読みやすさについて議論することは無意味です。コードは、行ごとに(文字)行の長さが異なるため、完全に異なって見えます。また、行末まで書いても、インデントによって1行あたりの文字数が変わります。
Corvince 2017年

111

機械可読だけでなく、人間が読めるコードを維持する。多くのデバイスでは、一度に80文字しか表示できません。また、複数のウィンドウを並べて設定できるため、大画面のユーザーがマルチタスクを実行しやすくなります。

読みやすさも、行のインデントを強制する理由の1つです。


58
はい、承知しました。しかし、なぜ79なのか?なぜ100や120ではないのですか?物を読みやすくすることは、両方の方法で機能します。コードを上下に読みすぎると、手に負えなくなります。
pcorcoran 2008

17
多くのデバイスが80文字しか表示できないのは事実です。ソフトラッピングを実行できないのは何人ですか?
ジム

39
また、コードをラップしないことをお勧めします。ユーザーエクスペリエンスの観点から見ると、ほとんどの場合は受け入れられません。
ジャスティンボゾニア2008

8
72文字を超える行を処理できないMVSなどの一部のオペレーティングシステムがあります。PEP-8はここでは役に立ちません。79文字という任意の制限を設定しても意味がありません。1行あたりの文字数は、エディター、モニター、ユーザーの個人的な好みなどに依存するためです。
codymanix、2010

96
また、79文字を使用すると、プログラマーはよりわかりにくい変数名や関数名を使用して、すべてを適切なものにすることができます。これは可読性が悪いです。
Gert Steyn、

46

私は毎日たくさんのコードを扱わなければならないプログラマーです。オープンソースと社内で開発されたもの。

プログラマーとして、一度に多くのソースファイルを開いて、2つのソースファイルを並べて(ワイドスクリーン)モニターでデスクトップを整理すると便利です。私は両方でプログラミングしているのかもしれませんし、どちらか一方を読んでもう一方でプログラミングしているだけかもしれません。

これらのソースファイルのいずれかが幅が120文字を超えると、コード行を画面の1行に快適に収めることができないため、不満と不満を感じます。それは行折り返しにフォーマットを混乱させます。

「120」と言うのは、それよりもコードが広いとイライラするレベルだからです。その数の文字の後、読みやすさのために、コーディング標準はもちろんのこと、行をまたがって分割する必要があります。

80列を念頭に置いてコードを記述します。これは、その境界を越えてリークが発生しても、それほど悪いことではありません。


11
「80列を念頭に置いてコードを記述しています。これは、その境界を越えてリークが発生しても、それほど悪いことではないためです。」わたしも。
神戸ジョン

4
10年後:行の折り返しの設定方法だけに依存するわけではありません。行の折り返しは、必要に応じてインテリジェントにすることも、愚かにすることもできます。読みにくい場合は、エディターの失敗です。
デビッドモルダー

2
私は120文字にコード化しますが、読みやすさに合う場合は時々長くなります。指示すると、黒は120にフォーマットされます。PEP-8はまた、「行の長さの制限を最大99文字まで増やしても大丈夫です」と述べていますが、人々はその情報をほとんどの場合抑制しているようです。80幅の端末を使用する人はほとんどいません。ログメッセージの幅が80になることはありません。
NeilG

37

タイポグラフィを研究している人なら、1行あたり66文字が長さとして最も読みやすい幅であると思われると私は信じています。それでも、sshセッションを介してリモートでマシンをデバッグする必要がある場合、ほとんどの端末のデフォルトは80文字で、79がちょうど収まります。このような場合、より広い範囲で作業しようとすると、本当に面倒になります。また、vim + screenを日常の環境として使用している開発者の数にも驚かれることでしょう。


<flame> Emacs FTW!</ flame>ただし、+ 1。79の制限は、80x25文字の端末を持っていたUNIX(および多分MULTICS)の初期の頃にあると思います。
Joe D

10
私のssh + screen + vim環境で長い行を表示しても問題ありません。
chrishiestand 2012

54
「1行あたり66文字が長さの最も読みやすい幅になるはずです」新聞のレイアウトのように、コードを2列または3列で記述する必要があると思います。
Mark E. Haase

23
@mehaase:あなたの皮肉な発言は真実に非常に近いです:まともな編集者は分割ペインを実行し、異なるものを(同じまたは異なるファイルから)並べて表示できます。偶然にも、これは通常、コードに行長の標準がある場合にのみ実現可能です...
nperson325681

2
@mehaase:実際、素晴らしいですね。冗談じゃないよ。
Teekin

19

等幅フォントをデフォルトのサイズで印刷すると、(A4用紙で)80カラムx 66行になります。


11
私はこの基準を受け入れます。それは有効です。しかし、誰がもうコードを印刷するのでしょうか?さらに、スケーリングや他のフォーマットオプションに不寛容な環境からコードを印刷するのは誰ですか?あなたが知っている誰かが最後に100文字の行をレンダリングできないことに困惑したのはいつですか?
pcorcoran 2008

3
なぜ人々は2012年にコードを印刷するのですか?これを思い出すと、テクノロジー会議に行って、バッグと印刷されたバインダーがプレゼンテーションでいっぱい渡されたようです。それは21世紀の人々です。スライドをメールで送ってください。そうでなければ、バッグとバインダーが埋め立て地に直接送られます。
Mark E. Haase

2
では、なぜ80-1が80-0や80-2よりも優れているのでしょうか。
n611x007 14

11
「デフォルトサイズで」あなたは言う?これらの広く受け入れられているデフォルトのサイズについて詳しく教えてください。
Bruno Bronosky、2015年

15
はい、コードが印刷された紙の上でどのように見えるかを何よりも優先させましょう。
ジョナサン

8

これが私が80文字で好きな理由です:仕事でVimを使用し、1680x1040で実行しているモニターで一度に2つのファイルを操作します(覚えていません)。行が長くなると、ワードラップを使用していても、ファイルの読み取りに問題があります。言うまでもないことですが、他の人が長い行を愛しているので、他の人のコードを扱うのは嫌いです。


javascript / htmlにもvimを使用しませんか?
eladシルバー2018

2
@eladsilver冗談ならうまくいかない?:-D
スティーブン教会

申し訳ありませんが、vimではそれほど深くありません。明らかにWebで作業する場合は、html / jsでも使用します。フロントエンドの開発者はpep8を知らないため、これらの型には80文字の制限がありません。 Pythonのみを使用している場合、問題は解決しません。他のコーディング言語をどのように処理するのですか?
eladシルバー2018

私は120文字の行でVimで作業しています。私は:diffthisを水平分割で使用します。1680ピクセルで160文字しか収められない場合は、フォントサイズを大きくする必要があります。
NeilG

4

Pythonでは空白は意味的に意味があるため、ワードラップの一部の方法では不正確またはあいまいな結果が生成される可能性があるため、これらの状況を回避するにはいくつかの制限が必要です。テレタイプを使用して以来、80文字の行の長さが標準であるので、79文字はかなり安全な選択のようです。


4
折り返しには2つの異なるタイプがあります。改行で改行されるハードラッピングと、改行のみで表示され、物理的に1行のままであるソフトラッピングがあります。後者については問題ありません。
ジム

4
ほとんどのPythonエディターは、ソフトワードラッピングを実行しません。空白やインデントが重要な言語では、あいまいで読みにくいコードが生成されるためです。
Chris Upchurch、

4
ラッピングが何らかの方法で視覚的に識別されている限り、あいまいなコードや読みにくいコードは生成されません。ケイトはこれを行い、それはうまくいきます。エディターがこれを処理しない場合、それがエディターに対してバグを報告する理由であり、バグを回避するコーディングスタイルを課す理由ではありません。
ジム、

5
視覚的に示されていても、コードを読みにくくしています。そのため、Pythonエディターは一般にコードをサポートしていません。
Chris Upchurch、

実際に長時間試したことがありますか?私が持っています。私の経験では、コードが読みにくくなることはありません。これがPythonエディターに機能が含まれていない理由であるという主張を裏付けることができますか?その主張を聞いたことがありません。
ジム、

1

私はジャスティンに同意します。詳しく説明すると、コードが過度に長い行は人間にとって読みにくく、一部の人々はコンソールの幅が1行あたり80文字にしか対応できない場合があります。

このスタイルの推奨事項は、作成したコードをできるだけ多くのプラットフォームで、できるだけ多くの人ができるだけ快適に読み取ることができるようにするためのものです。


10
これは怠惰な議論です。80行が読みにくくなるとは限りません。80行でラップする適度に複雑なPythonコードベースを一目見ただけで、実際にはその逆が示されます。つまり、単一行の関数呼び出しを複数行にラップすると、WTFの追跡が難しくなります。
ジョナサン

0

80番目の列を超えてプッシュすると、非常に長く複雑なコード行を記述しすぎているため(リファクタリングが必要)、インデントしすぎているため(リファクタリングが必要)、


90
-1、80文字の境界を超える行にはリファクタリングが必要であると断定できるとは思いません。クラスメソッドはすでに2回インデントされており、ifなどのインデントと単純なリスト内包を追加しており、80文字の境界を越えるのは非常に簡単です。

42
言うまでもなく、「usr_dir_gph」の代わりに「users_directed_graph」などの記号を人間が読めるような方法で名前を付けると、単純な表現でも1行あたりかなりの数の文字を消費します。
マークE.ハース

8
私は常にPythonで、80文字を超える場合は停止して、それがなぜかを考えるのが賢明であることを発見しました。通常、設計上の誤った決定に誤りがあります。
Mike Vella 2013

3
これも私の経験です。@mehaaseが指摘しているように、長い変数名にも対応していますが、これは利点だと思います。3つの連続する単語の組み合わせ(「users_directed_graph」の場合)は、単一の名前空間に合理的に適合するコンポーネントの数を小さくします。同じ名前空間に多くの類似した長い変数名が含まれている私が書いた古いコードは、読みにくく、一般的にリファクタリングする方がよいと考えています。
TimClifford 2014年

4
スコープの変更ごとにインデントを必要とする言語では、80文字の行は複雑さに等しいと言っているのは、あまりに単純化した議論です。場合によっては、関数を呼び出すために必要なのは80文字だけです。他の言語用の最新のIDEのエディターはこれを認識できるほど賢く、全体的に読みやすさを損なうすべてに包括的な制限を課すのではなく、いつ折り返すかを見分けることができます。
ジョナサン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.