末尾の空白が重要なのはなぜですか?[閉まっている]


116

末尾の空白はプログラマにとっては十分な問題であり、Emacsのようなエディタはそれを強調表示したり自動的に削除したりする特別な機能を備えており、多くのコーディング標準ではすべてのインスタンスを削除する必要があります。なぜだか完全にはわかりません。不要な空白を回避する実際的な理由の1つを考えることができます。人々がそれを避けることに注意を払わないと、コミット間で変更される可能性があり、その後、誰かが削除されたか、スペースを追加しました。

これは既にそれを避けるためのかなりの理由のように聞こえますが、それ以上のものがあるかどうかを見たいです。それでは、なぜ末尾の空白がそれほど重要なのでしょうか?


30
末尾の空白は確かにコミットノイズです。他の理由は考えられません。
ヤンニス

17
良い差分ツールは、末尾の(としたい場合は、あまりにも有数)の空白を無視することができるはずです。結局のところ、Emacsはそれを行うことができます、なぜあなたのdiffツールではありませんか?
FrustratedWithFormsDesigner

4
「終了」ボタンを使用して文字列の末尾に移動すると、末尾の空白が多く乱雑になる可能性があります。
Iarek Kovtunenko

11
あなたは質問を間違った方法で聞いていると思います。他の方法は次のとおりです。«末尾の空白の利点は何ですか?»。正しい質問をすると答えはかなり明白になります;)
deadalnix

7
たぶん、あなたはWhitespaceでプログラミングを試してみるべきです。* 8 ')
マークブース

回答:


76

私にとって重要だという理由:

  • 「End」キーを押すと、カーソルが行の最後に移動することを期待します(使用しているエディターとその構成方法によって異なります)。すぐに入力を開始できると期待しています。カーソルがそこに到達し、3文字または4文字を削除する必要がある場合、それは迷惑です。特に、ファイル全体で一貫性がない場合。

  • 複数の行にまたがる文字列リテラルがある場合、末尾の空白により、使用時に出力文字列が正しく表示されないことがあります。

厳密にプログラミングされているわけではありませんが、解析されて他の何かへの入力として使用されるファイルの末尾/先頭がある場合、空白はデータエントリをひどく混乱させる可能性があります。これは、生成されたクリーンな入力ファイルがExcelなどで編集され、その後に続く空白(およびその他の書式設定の問題)が忍び込んだときに最も多く発生します。


8
ポイント1は、末尾の空白ではなく、エディターの問題です。
マルジャンヴェネマ

33
@MarjanVenema:はい、エディターは最後の非空白に移動するように設計することができますが、その後、末尾の空白について知ることはありませ(他の方法で示されていない限り-ENDが変だと思うかもしれません)行末に行かないでください。これは私が慣れていることです)。複数行の文字列リテラルでは問題になります。そのため、エディターは、複数行の文字列リテラルでは、ENDは空白を含む最後の文字に移動する必要があることを知っている必要があります。私が使用しているエディターはそれほど賢いものではありません。
FrustratedWithFormsDesigner

2
追加のスペースを選択しないと、マウスで選択を追加するのは難しく、カットペーストの場合は問題になります。または、何もせずにコミットするとノイズを生成します(最終的には!)。それほど大したことではありませんが、多くの小さな悩みがあります。前の開発者が怠けていて、あなたが彼/彼女の混乱に去ることを期待しているという感じを与えます。
deadalnix

1
@deadalnix:もちろん、だからこそ、ほとんどの人の好みに合ったオプションを備えた優れたエディターが必要です。したがって、ポイント1はエディターの問題であり、末尾の空白ではありません。
マルジャンヴェネマ

1
ポイント1は、正確に末尾の空白の特定のスタイルを持つことを好む理由です:空白行は、それらが分離するコードでインデントされます。これにより、インデントすることなく、新しいコードをすぐに挿入できます。
XiongChiamiov

29

末尾の空白は本当に嫌いですが、正確な理由は少しあいまいです。

その感覚の起源は、プログラミングではなく、デスクトップパブリッシングの分野にあると思います。パブリケーションにタイプセットする必要がある他の誰かがタイプしたドキュメントを取得したことがありますか?特に列を使用する場合、すべての最新の出版物では、文ごとに新しい行を開始するのではなく、1つの段落内で文を順番に連続させるのが習慣です。まあ、末尾の空白があるとき、それを正しくするためにもっと多くの努力が必要です(多くの検索と二重スペースを排除するアクションなどを置き換えます...)。

他の理由(プログラミングにおける)、正当な理由ではないことは知っていますが、それらは私の潜在意識の精神を煩わしく強烈な方法で悩ませるので、それを排除せざるを得ません:

  • 必要以上のストレージスペースが必要です
  • パーサーは、コンパイル時に正当な理由がないのに余分な文字をスキップする必要があります
  • 一部のエディターは、WordWrapがオンで、末尾のスペースが収まらない場合に余分な空白行を追加する場合があります

はい、そうです!これらはジャンクの理由です。私は完璧主義者ではありませんが、...多分私はそうですか?

私が考えることができる最後の理由は、一貫性のないカーソルの動きです。カーソルが行末の細い空中にぶら下がっているように感じます。右へのすべてのステップで、カーソルがドロップするか、不明な範囲にさらにホバリングする可能性があります。マリオはかつてジャンプしていました)。

たぶん私はトレイルスペースフォビアと診断できますか?


私の分野ではありませんが、私には奇妙に思えます...デスクトップパブリッシングで使用しているタイプセットシステムはどのようなもので、デフォルトでは末尾/複数のスペースを無視しませんか?消費者レベルのWYSIWYGジャンクを除き、LaTeXとほとんどのプログラミング言語がそれを行う方法はどこでも標準だと思いました。
左辺約

Adobe InDesign(それは消費者レベルのWYSIWYGジャンクにも該当しますか?)はい、末尾のスペースは無視されますが、すべての改行を段落内のスペースに置き換えると、二重スペースになります(無視されません)。それらを削除するには追加の置換が必要です。
ルイ・ソマーズ

「デスクトップパブリッシング」は、「組版システム」で行うことではありません。
rakslice

22

これらの回答の多くは、それが私にとって悪い理由にほとんど触れていますが、基本的には、テキストエディターを「破壊」します。私の経験はvimです。

Vimは、一般的なアクションが文字に非常にきれいにマッピングされるように設計されているため、ヒットする文字やキーの組み合わせを考える必要さえありません。さまざまなホットキーを使用すると、カーソルをテキストの周囲にすばやくジャンプさせることができるので、キーを数回押すだけで目的の場所に移動できます。ENDや$を押してカーソルを{または}または(または)または何かに重ねる行の最後にジャンプできるため、コードのブロックを折りたたむなどでも高速です。思考の流れを壊す必要はありません。画面にアイデアを出します。

しかし、その後、いくつかの空白が続き、カーソルの動きは予測できなくなります。目に見えないものがカーソルの移動先に影響を与えているため、入力プロセスが中断されています。

本当にタスクに集中していて、誰かがそれらを中断したときに、人々がどのようにイライラするか気づいたことがありますか?ええ、予想されていないときに末尾の空白を見つけるのはまさにそのようなことです。

補足として、末尾の空白を気にしない人はナビゲーションにマウスを使用する人であり、そのためにタイピストが遅くなる傾向があることに気付きました...


2
補足として、タイピング速度は、ナビゲーションにマウスを使用するかどうかとは関係ありません。一部のナビゲーションはマウスに最適です。; p
スティーブンジュリス

2
あなたがVimを使用する場合は、すぐにすべての後続の空白を削除することができます%s/ *$//
ジョルジオ

1
@Giorgio私は知っているが、それはバージョン管理の変化としてカウントされるため、私はちょうど、いつでもそれを行うことはできません
Izkata

@izkata:はい。チェックインする前に変更する必要があるファイルを再フォーマットしますが、他の開発者が末尾の空白を含むファイルをチェックインし続けると、これは負け戦です。
ジョルジオ

17

驚くべきことに、最も明らかな答えがありません。末尾の空白は、見つけるのが難しいバグを生み出す可能性があります。

最も明らかな状況は、複数行の文字列です。Python、JavaScript、およびBashは、この影響を受ける可能性のある言語の例です。

print("Hello\·
····World")

生成するもの:

  File "demo.py", line 1
    print("Hello\
                 ^
SyntaxError: EOL while scanning string literal

これは、エディターが空白文字を表示するように構成されていない場合、何らかの方法で不可解で解決が困難です。

一方でシンタックスハイライトは助けることができるこのようなケースを避けること、それが行の末尾に空白をさせないことにより、最初の場所で問題を抱えていないことさえ簡単です。このため、一部のスタイルチェッカーは末尾の空白に遭遇すると警告を発し、一部のエディターはそれらを自動的にトリミングします。

ここに画像の説明を入力してください

図:構文ハイライトは、バグにつながる可能性がある状況で末尾の空白を回避するのに役立ちますが、それだけに依存しないでください。

前の回答で簡単に触れた別のコンテキストは、ファイルに保存されたデータです。

たとえば、末尾の空白を含むCSVファイルはデータの不整合を引き起こす可能性があり、これも検出が非常に困難です:標準準拠のパーサーは空白を削除します(標準は、二重引用符で区切られていない限り、先頭または末尾の空白は無関係であることを示します)一部のパーサーは誤動作し、空白を値の一部として保持する場合があります。

他のカスタム形式では、空白が値の一部であると特に考慮される場合があり、一貫性はあるもののデバッグが難しい状況になります。


14

私は最近、データ内の予期しない末尾の空白であることが判明したバグを探して1日を過ごしました。


13
これバグだと思います。人間が生成した入力を処理するコードは、末尾の空白を破棄する必要があり、多くの場合、先頭の空白も破棄する必要があります。
ケビンクライン

@kevincline-少なくともあるはずです。画面や印刷物に表示されない場合は、考えたくありません。
ルーク

6
バグを探すのに1日過ごしたので、末尾の空白は大したことですか?それよりも一般的になるように回答を編集してください。いくつかの背景、論証などを追加してください...私は個人的に後続の空白の問題は一度もありませんでしたが、それも問題ではないという結論としては使いません。
スティーブンジュリス

2
@Steven末尾の空白は、追跡が困難なバグを引き起こしました。私には良い答えのようです。そのような状況で、データ解析コードがどのように破損するか想像できます。
ウィルシェパード14年

データの最後の空白を削除すると、テストが失敗します。あなたはそれに対して責任があります。あなたの名前は何ですか?請求書はどこに送ればいいですか?
トーマスウェラー

8

コピーして貼り付ける(または削除する)ためにプログラムソースコードを選択すると、行末に不規則な余分な空白がすべて表示されるのが少し面倒です。選択中にコードを読む必要があるためです。 、末尾の空白は不要なノイズです。例(ドットは空白を表します):

if (fp)........
{....
    fclose(fp);.
}
else
{.....
    prinft("File is NULL\n");
}..

この例は人為的なものですが、このようなコードをたくさん見ました。


7

特定の場合に解析を中断するという明らかな問題に加えて?別のポスターが指摘しているように、微妙で追跡が困難なエラーを引き起こす可能性があります。空白は必ずしも重要ではありません。場合によっては、末尾の空白がコード行またはデータ行の意味を大きく変える可能性があります。

ほとんどの場合、人間の読者向けにコードをフォーマットするために空白があります。末尾の空白は、次のようないくつかのことを示している場合があります。

  • 不完全な声明;
  • コメントがありません。
  • 誤った編集。または
  • ずさんな編集。

これらのうち2つは誤った機能をもたらす可能性があり、もう1つはコードの理解をより困難にする可能性があります。


4

終了行の空白に敏感なプログラミング言語があります。たとえば、行の末尾に空白がある場合、TCLスクリプトはエラーを返します。

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