IDEで等幅フォントを使用する理由 [閉まっている]


83

SOに関するフォントのトピックをいくつか見てきましたが、大多数の人がプログラミングタスクにモノスペースフォントを使用しているようです。私はプログラミングにVerdanaを数年間使用しており、モノスペースに関連するものを見逃すことなく、読みやすさの向上が本当に気に入っています。

なぜ等幅フォントを使用するのですか?


4
スクリプトフォントを使用しない正当な理由がある人はいますか?:)
jammus 2008年

1
個人的には、サンフランシスコ(lowendmac.com/backnforth/2k0601.html)を使用するのが好きです... :)
John Rudy

Trimは、コードを読みやすくするという点でVerdanaよりもさらに進んでいると思います。(code.google.com/p/i3project/wiki/Fonts
user287424

少なくとも、Verdanaを使用している異端者は私だけではありません。:)
カルマリウス2011年

16
これを再度開きます。仕事に適したツール/テクニックとその理由を知ることは、間違いなく議論する価値があります。
Thomas Eding 2013

回答:


107

等幅フォントの場合:

  • 等しい長さの文字列リテラルは等しく見えます。
  • :(){}のような細い句読点が見やすくなります。
  • 類似の文字はより異なって見えます:Il 0O vs Il 0O
  • X文字幅のウィンドウで行が折り返されるかどうかはわかります。これは、チームがたとえば100文字の線で標準化でき、線が常に線のように見えることを意味します

31
2番目と3番目のポイントは、実際には等幅に固有のものではありません。これは、等幅かどうかではなく、どの特定のフォントを使用するかという問題です。Verdanaは両方の点でうまく機能します(ほとんどの等幅フォント、imoよりも優れています)。それが私がそれを使用する理由です
Rik

8
これらのそれぞれを修正するには:同等の文字列は同じ幅に見えます。なぜ、異なる文字列を気にし、長さだけを共有するのか疑問に思います。非単幅は、句読文字が薄いことを示しません。別の非モノフォントを使用する必要があります。「類似した」文字は、モノスペースでは必ずしも異なって見えるとは限りません。たとえば、SimHeiのOと0は同じです。これはフォントのプロパティであり、幅ではありません。最後に、チームが実際に標準化を行っている場合は、非モノラルを選択して、「画面から流れ出さないようにする」ことを標準化できます。
bwerks 2010

104

私はこれまでプロポーショナルフォントでコーディングすることさえ考えたことがありません。それで、科学の利益のために、私はちょうどそれをやってみるために私の編集者を切り替えました。

簡単なチケットをいくつか修正した後のいくつかの所見を次に示します。

  • コードは非常に密集しているようです。私のコードのほとんどは約80列で、100を超えることはめったにありません。プロポーショナルフォントは、エディターの左側にある小さなストリップにコードを押しつぶします。画面スペースが短い場合に役立つかもしれませんが、不必要にコンパクトに見えます。
  • コードの「テクスチャ」は失われます。私が見ている構造の種類を判断するのは難しいです-それはほとんど文字ごとに読む必要があるテキストの単なる大きなスラブです。
  • それはです非常に欠場するのは簡単!でオペレータをif (!foo)。((!foo)の場合、参照してください!)
  • 句読文字の定義が非常に不適切です。多くは区別するのが難しい({}[]()vs {} []())
  • 一部の句読文字は他の文字よりもはるかに大きく、意図されていない場合に強調を推測します($@%vs $ @%)
  • 一部の文字は非常に狭く、識別が非常に困難です('"!;:,.vs '"!;:、。)
  • いくつかの数字と文字は非常に似ています(0Oo iIlvs 0Oo iIl)
  • 私は構文の強調表示に非常に依存しています。それがなければ、引用符のバランスが取れていることを確認するなどのことを行うことはほぼ不可能です。
  • 位置合わせ(単純なインデントは別として)は完全に壊れています。余分なスペースを入れることで翼を並べ替えることができますが、フォントの比例的な性質のため、行が正確に整列しない場合があります-コードは乱雑に見えます。
  • 正規表現は..面白いです!

ありますいくつかの肯定的な点は、しかし、。確かに私はそれをほんの少ししか使っていませんが、プロポーショナルフォントで少しうまくいくいくつかの側面が確かにあります:

  • 「単語」は読みやすくなります-スペルミス(変数のスペルが間違っているなど)が飛び出します。
  • より長く、より説明的な変数名を使用する方が良いと思います(おそらく、スキャンが優れているため、テキストの水平サイズが圧縮されているため)
  • このようなコードを読む方が少し簡単なようです。私の脳は、各単語を「トークン化」してその意味を理解する方が簡単です。句読文字は読みにくいため、それでも難しいのですが、慣れるまで少し時間がかかると、おそらくそれは変わるでしょう。

明日またこの回答を更新します(このように一日中やり遂げることができると仮定します!)


7
良くやった!ただし、どのフォントを使用したのか疑問に思います。特定の文字があまりにも似ているという点については、ほとんど気になりません。
Rik

私はArialから始めて、Calibriに移りました。私は他のいくつかを試しましたが、私のフォントリストを20秒間非常に非科学的に模索し、Konrad Rudolphからの推薦に基づいて、それらも最高のようでした。
ダン

6
「これまでプロポーショナルフォントでのコーディングを検討したことはありませんでした。そのため、科学の観点から、エディターを切り替えて試してみました。」プログラミングをしていて、固定幅に慣れてから何年になりますか?あなたはここでまともな答えを持っていますが、あなたはあなた自身の偏見を説明していません(そしてもっと多くの仕事なしでそれをするのは難しいでしょう)、それはあまり良い科学ではありません。

2
@ロジャー:それは良い科学ではないかもしれません(そのような研究をすることはほとんど不可能であり、非常に高価です!)が、理由はもっともらしいです。そして、壊れたインデントは打ちにくい議論です(現在のIDE /エディターでは、この問題は、セマンティクスに一致するタブストップを使用してスマートにインデントすることで解決できます)。
Konrad Rudolph

5
プログラミング用に特別に設計されたプロポーショナルフォントは、通常の反対意見のほとんどを解決します。code.google.com/p/i3project/wiki/Fonts
user287424

28

グループ化されていることをより明確にするために、関連する条件を並べるのが好きです。例えば:

if ((var1 == FOO) && ((var2 == BAR) ||
                      (var2 == FOOBAR)))

可変幅のフォントはこれをより困難にします。


2
有効なポイント。しかし、物事を垂直に並べることには問題があります。そのifステートメントで何かを変更する必要がある場合はどうでしょうか。あなたはおそらくすべてのものを再調整する必要があるでしょう。
カルマリウス2011年

9
@Calmarius:「読みやすくする」ことは私の一日のコーディングの一部です。私は無意識のうちにそれを行います。コードの変更に力を注ぐ場合は、メンテナンスコストの削減にも力を注ぐ必要があります。
セバスチャンマッハ

2
これを実現するためのより良い方法は、等幅フォントを使用している場合でも、伸縮性のあるタブストップです。ないそれがで実用的な代替だと、現在の編集...
ローマStarkov

1
@endolithまあ、彼らは確かにスペースよりも賢いです... :)あなたはまだあなたが何に合わせたいかを決める必要があります。大きな利点は、一度それを行うと、他のものが変わっても物事が整列したままになることです。
ローマンスターコフ2013

2
@endolith最初の行の2つの括弧の間にタブを挿入し、2番目の行の開き括弧の前にタブを挿入します。これで、バニラ実装の1行目の2つの括弧の間にスペースが追加されますが、編集時に維持される配置が得られます。これは、私にとって非常に価値のあるトレードオフのように思えます。実際、両方の行の閉じ括弧の後にタブストップを追加することもできると思います。可変幅のフォントの栄光のスクリーンショットを参照するか、自分で試してみてください
ローマンスターコフ2013

21

ここで私が見続けていることの1つは、「コードの整列」とインデントについての議論です。私は次のことを指摘したいと思います:

  • 8つのスペースは、どのフォントでも常に4つのスペースの2倍の長さになります。
  • 2つのタブは、どのフォントでも常に1つのタブの2倍の長さになります。
  • 1行の識別子は、次の行でも常に同じ幅になります...どのフォントでも!
  • 確かに、チームメイトがモノスペースを使用していて、使用していない場合は、見た目が異なります...しかし、何かを標準化する必要があります-それが何であれ-それが本当なら、それは誰にとっても同じように見えます。 ..任意のフォントで!笑いのために、全員をモノスペースに保ち、半分をワイドスクリーンモニターにすることもできます...それがどうなるか見てみましょう。
  • 使用している識別子のスコープではなく、画面上のそれらの文字の列の位置に基づいてコードを並べることに依存する何かをしている場合、私はあなたがしていることはハックだと思います。識別子は、名前の品質を犠牲にして、特定の文字数に制限されるべきではありません。それを除けば...あなたはまだあなたのコードのコメントのためにアスタリスクでASCIIボックスを描いていませんね?

したがって、これらすべてをまとめて描画します。各行を同じ場所から開始し、一定の間隔が同じ幅であり、識別子が各行の幅を自発的に変更しない場合、コードは実際に整列します。...何かが変わるまで。

例えば:

identifier.Method().Property.ToString();
identifier.Method().OtherGuy.ToString(); //how lined up and pretty!
identifier.Method().Sumthing.YouGetThePoint;
  • 識別子.Method()。Property.ToString();
  • 識別子.Method()。OtherGuy.ToString(); //大野!ずれている!
  • 識別子.Method()。Sumthing.YouGetThePoint; // ...しかし、誰が気にしますか?それらは異なるプロパティです!

私が認める1つのポイントは、英数字以外の文字は通常、それほど広くないということです。これらには)(] [} {、:| "; '、`!とが含まれます。ただし、これはフォントエディタで修正できます...単に幅を広くするだけです。これは非等幅に固有の問題ではありません。それに対する需要はあまりなかったので、まだ行われていません。

要約すると、個人的な好みは問題ありませんが、非モノスペースよりもモノスペースを好む実用的な理由はほとんどないと思います。あなたはそれの外観が好きですか?確かに、モノスペースを実行します。画面にもっと多くのものを収めたいですか?非モノに行きます。しかし、人々が非モノスペースを異端のように扱う方法は少し誇張されています。


3
画面に表示されるものを増やすには+1します。そしてASCIIボックス......まあ、時間の無駄です。
カルマリウス2011年

2
+1; これらの点は、プロポーショナルフォントをしばらく使用するまで実際には理解するのが難しいです。
ローマンスターコフ2012

8
プログラミング用に特別に設計されたプロポーショナルフォントを作成でき、モノスペースである必要はないという幅広い認識のための+1。プログラミングでプロポーショナルフォントがより一般的である場合、「プログラミングタイポグラフィ」の新しい文化が出現する可能性があります。「異端」の考え方ではそうではありません。
Timwi 2012

3
ポイントで抜本的な仮定を行います。1)位置合わせは行の先頭でのみ行う必要があります。2)複数の行での同様の呼び出しの位置合わせは常に同じ「identifier.Method()」オブジェクト上にあります。3)列の位置識別子名とは何の関係もありません。4)コメントの配置が必要になるのは、「アスタリスク付きのASCIIボックス」の場合のみです。すみません、-1。
droj 2014

3
あなたが私に反対票を投じたからではなく、あなたが反論の断片を提供しなかったからです。あなたは基本的に私のポイントを私に言い返しました、ハァッ。しかし、はい、同意します!配置は、線が異なるまでのみ重要です。変数名の長さを制限するべきではないので、異なる引数を持つメソッド呼び出しのアラインメントは重要ではありません。柱状の位置確かに識別子名とは何の関係もありません。そして、調整が必要なのは、会社のダイムでアスキーアートに夢中になっているときだけです。
bwerks 2014

16

等幅フォントの多くの議論は、微調整を加えることで簡単に反論できるため、このスレッドに興味を持ちました。そこで、IDEをCalibriに切り替えました(顔が丸く、UIの画面で読みやすくなるように最適化されているため、完璧です)。今、私は明らかにインデントのためにスペースの代わりにタブを使用する必要があり(すべての問題を無視して)、4スペースの幅では明らかに十分ではないので、10に切り替えました。

今はかなりよさそうだ。しかし、私が見つけることができるいくつかの明らかな問題があります。この設定をしばらくテストした後、さらに多くのことが明らかになる可能性があります。

  • すでに述べたように、一部の文字(特に括弧、セミコロン)は非常に細く見えます。これは連続したテキストで必要ですが、ソースコードでは必要ありません。これが最大の問題になると思います。
  • シンボルがうまく整列しません。例として、次のC#コードについて考えてみます。

    var expr = x => x + 1;
    

    矢印(=>)は、ほぼすべての等幅フォントの単位のように見えます。他のフォントの2つの隣接する文字のように見えます。>>などの演算子についても同じことが言えます。

  • スペースは小さく見えます。読みやすさを向上させるために、ソースコードの間隔を空けています。これは、プロポーショナルフォントに切り替えるときに意味がありません。スペースの幅を制御できれば、これは間違いなく役に立ちます。
  • 状況依存のインデントは完全に壊れています。一部のコンテキストでは、固定数のタブをインデントするだけでは不十分です。次のようにインデントされる可能性のあるLINQ式を使用します。

    var r = from c in "This, apparently, is a test!"
            where !char.IsPunctuation(c)
            select char.ToUpper(c);
    

    プロポーショナルフォントではこれを行うことはできません。

全体として、文字が狭すぎます。繰り返しになりますが、追加の文字間隔が役立つ場合があり、パンクチュエーションの場合は間違いなく必要です。ただし、プロポーショナルフォントを読みやすくするためのこのすべての調整は、等幅フォントを自然にエミュレートするだけだと感じています。これまでに述べたすべての点に確かに当てはまります。


1
実際、CalibriはArial(私がテストしていたもの)よりも少し優れていますが、それでも同様の問題が発生します
Dan

1
私はいくつかのフォントを試しました。CalibriとLucidaSansUnicodeが最も可能性の高い候補のようです。Lucida Sans Unicode(別名「LucidaGrande」)がOSXのUIフォントであることは偶然ではありません。
Konrad Rudolph

1
ええ、実際には、これら2つは非常に似ています。句読点が少しはっきりしているので、Calibriが勝ちます。
ダン

それは私だけかもしれませんが、Calibriの間隔は信じられないほど予測不可能であることがわかりました。一部のスペースは存在しないように見えますが、他のスペースは巨大に見えます。プログラミングに関係なく、使用するすべてのマシンで無効にしました。
bwerks 2010

@bwerks:どういう意味ですか?「無効」にしますか?気に入らない場合は使用しないでください。さらに、プログラミングを除いて、いつ間隔を使用しますか?フォーマットについては?しないください、それは大罪です。さらに、Calibriの間隔は常に同じであるため、Microsoft Wordの不適切な改行アルゴリズムの影響である可能性があります。つまり、スペースの幅は常に同じです。特に、カーニングの影響を受けません。
Konrad Rudolph

11

私はComicSans MSを使用しています。これは、小さなポイントサイズとしてはかなり合理的に見えます(見出しのサイズで「冗談」に見え始めるだけです)。見た目は簡単ですが、VSのドッキングされたパネルのいくつかを開いた状態で、テキストウィンドウに適度な量のコードが表示されるようにテキストを十分に小さくしてください。

ソリューションエクスプローラーパネルを外しても、水平スクロールなしで100列のテキストを読み取ることができます。移動すると、DXCore Documentorパネル(フォーマットされたXMLDOCを表示)を十分に大きく開いて、XMLdocsを文書化するのに十分なテキストを表示しながら読むことができます。


4
おいおい。どうして?その正当性を聞いてみたいです!
ダン

4
コミックサンズを何にでも使う:)
ダン

4
あなたの正当化は「それは小さい」ですか?Comic Sansのすべての機能の中で、その「小ささ」が他のフォントよりも頻繁に選択されることはめったにありません。さらに、それはあなたが12歳のように見えます。私があなたと一緒に働いていたら、私は今までに間違いなくあなたを笑っていただろう:)
ダン

5
完全にサバ-私はこれを試したところ、うまくいきました。JamesはおそらくComicSansが存在する唯一の理由を発見しました-それは7ptまではっきりと読むことができます。次回、他の人のコードの混乱を数千行のメソッドでリファクタリングする必要があるときは、これが使用するフォントです。
Bevan

7
それは非常に読みやすいかもしれませんが、それでも私はそれを公の場で認めることはしません:)
patricksweeney

10

チームで作業する場合、等幅フォントを使用すると、使用する等幅フォントに関係なく、コードが明確になり、すべての人に正しくレイアウトされます。

可変幅フォントを使用すると、コードがわかりやすく見える場合がありますが、等幅フォントのユーザーが開いた場合、コードが同じように見える可能性は低くなります。


10

モノスペースフォントを使用する必要があることを理解するために必要なのは、リテラルに1つではなく2つのスペースがあるために、検索で何かが見つからない理由を理解するために数時間かかることです。デザイナーがモノスペースフォントを使用していなかったときに、Lotus Notesエージェントを修正しようとしたときに、これが一度発生しました。コードをCodeWrightに貼り付けて印刷するまで、問題が何であるかは明らかでした。


1
プロポーショナルフォントを使用すると、スペースの幅は一定になりますね。
カルマリウス2011年

7
または、より広いスペースのプロポーショナルフォントを使用することもできます。比例していること自体は、あなたが言及した問題を引き起こしません。
ローマンスターコフ2012

10

等幅フォントを使用すると、コードの整列がはるかに簡単になります。

これは、チームで作業する場合に特に当てはまります。チームの全員が異なるフォントを使用でき、それらがすべて等幅である限り、すべてが整列します。同様に、1人の人が多くの異なる開発ツールを使用する場合、それらがすべて等幅であれば、すべてが整列します。それらがすべて等幅でない場合は、すべてが同じフォントを使用していることを確認する必要があります。2つのプラットフォームで開発している場合、それは難しい場合があります。

実際、一部の開発ツールは等幅フォントのみをサポートしています。

もう1つの理由は、等幅フォントはより明確な文字を持つ傾向があることです。lIiO0をlIiO0と比較すると、私が何を意味するかがわかります。また、空白のカウントがはるかに簡単になります。


5
「すべてが揃う」-チームがタブとスペースの1つの聖戦を解決した場合、および/またはタブ幅の設定が均一である場合のみ。
ローマンスターコフ2012

2
タブのインデントを使用する場合でも、インデント後の配置にはスペースを使用する必要があります。
PeterAllenWebb 2015

6

テキストベースのDOS時代からの引き継ぎとして、等幅フォントがプログラマーの好みだったのではないかと思います。

一方、私自身、Verdanaと他のいくつかの推奨プロポーショナルフォントを試しましたが、変更に対処できませんでした。私の目はモノスペースにはあまりにもよく訓練されています。C / C ++、C#、Perlなど、記号が多い言語は、私にはあまりにも異なって見えます。シンボルの配置により、コードの外観が完全に異なります。


これが本当の答えのようです。また、主に習慣/歴史的な理由があり、残りはコードエディタの制限または悪いフォントにすぎないと思います。
ミハイルV

6

正規言語よりもコードの性質上、正しく並べておくとよいでしょう。また、コード編集では、ブロック選択、ブロックコピー、ブロック貼り付けが必要になる場合があります。Visual Studioでは、マウスを選択しながらAltキーを使用してブロックを選択できます。エディターによって異なる場合がありますが、エディターでのそのオプションが非常に重要な場合があり、等幅フォントを使用しない限り、うまく機能しません。


今まで知らなかった新しいキーストロークがあります。乾杯。
Kev

5

個人的には、等幅フォントはコードエディタで読みやすいと思います。もちろん、私はほとんど盲目です。それは違いを生むかもしれません。私は現在、高コントラストの文字で暗い背景の15ポイントでconsolasフォントを実行しています。


Consolasは実際には等幅フォントです。とても良いものです。私も使っています。
Joel Mueller

Consolasの場合は+ 1、Macの場合はInconsolata
the_mandrill 2009年

@ JoeMueller-どうやって書いたのかわかりません。私が書いたものの反対を意味します。編集させてください....わかりました。:)
ジョンクラフト

私の経験からわかるように、完全に盲目になる前に、コード用に最適化された適切な非等幅フォントを見つけて、明るい背景に切り替えることをお勧めします。
ミハイルV

2

インデントにスペースを使用すると、1レベルより深くなると問題になります。


6
実際、まともなIDEならどれでもこれに対処できるはずです。
Rik

8
これは、インデントにタブを使用するもう1つの理由です(これが、善良な主が最初にタブとして与えた理由です)
James Curran

5
タブの+1(現在、その議論は進行中です...)
ボビージャック

2

主に位置合わせの目的で(関数パラメーター宣言が複数行にまたがっており、それらを並べたい場合や、コメントを並べる場合など)。


1

タブ文字の問題と同じように、複雑な要因は、位置合わせのために何かがインデントされ、他の誰かが異なる好みを持っている場合だと思います。物事がずれます。

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