Зачем использовать моноширинные шрифты в вашей среде IDE? [закрыто]


83

Я видел пару тем о шрифтах на SO, и кажется, что большинство людей используют моноширинные шрифты для задач программирования. Я использую Verdana для программирования пару лет, и мне очень нравится улучшенная читаемость, без упущения ничего, связанного с моноширинным пространством.

Почему вы используете моноширинный шрифт?


4
У кого-нибудь есть веские причины не использовать скриптовые шрифты? :)
jammus

1
Лично мне нравится использовать Сан-Франциско ( lowendmac.com/backnforth/2k0601.html ) для моего ... :)
Джон Руди

Я думаю, что Trim идет даже дальше, чем Verdana, в создании читабельного кода. ( code.google.com/p/i3project/wiki/Fonts )
user287424,

По крайней мере, я не единственный еретик, который использует Вердану. :)
Calmarius 08

16
Откройте это заново. Знание правильного инструмента / техники для работы и причин для этого определенно стоит обсудить.
Thomas Eding

Ответы:


107

Моноширинным шрифтом:

  • Строковые литералы одинаковой длины выглядят одинаково.
  • Легче увидеть тонкие знаки препинания, например: () {}
  • Похожие персонажи выглядят более разными: Il 0O vs Il 0O
  • Вы знаете, будет ли строка переноситься на окно шириной X символов. Это означает, что ваша команда может стандартизировать, скажем, 100 строк символов, и строка всегда будет выглядеть как строка.

31
Второй и третий пункты действительно не так уж специфичны для моноширинных. Это больше вопрос о том, какой шрифт вы используете, а не о том, моноширинный он или нет. Verdana хорошо справляется с обоими пунктами (лучше, чем большинство моноширинных шрифтов, imo), поэтому я использую его,
Рик

8
Чтобы исправить каждый из них: Эквивалентные строки выглядят одинаковой ширины, и я задаюсь вопросом, почему вы заботитесь о строках, которые разные и имеют только одну длину. Non-monowidth не означает, что символы пунктуации должны быть тонкими; вам следует использовать другой немоно шрифт. «Подобные» символы не обязательно выглядят по-разному в моноширинном пространстве; SimHei, например, имеет идентичные O и 0. Это свойство шрифта, а не ширина. Наконец, если ваша команда действительно стандартизирует, тогда вы можете выбрать немоно и стандартизировать на «не позволяйте этому стекать с экрана».
bwerks

104

Я никогда раньше даже не задумывался о кодировании пропорциональным шрифтом. Так что в интересах науки я просто сменил своего редактора, чтобы попробовать.

Вот несколько наблюдений после исправления пары простых билетов:

  • Код кажется чрезвычайно плотным. Большая часть моего кода содержит около 80 столбцов, редко более 100. Пропорциональные шрифты сжимают его до крошечной полоски в левой части моего редактора. Может быть полезно, если у вас мало места на экране, но он кажется излишне компактным.
  • «Текстура» кода теряется. Трудно сказать, на какую структуру я смотрю - это просто большой кусок текста, который нужно читать почти посимвольно.
  • Это очень легко пропустить !оператор в if (!foo). (если (! foo), смотри!)
  • Знаки пунктуации очень плохо определены. Многих сложно отличить друг от друга ( {}[]()vs {} [] ())
  • Некоторые символы пунктуации намного крупнее других, что означает выделение там, где они не предназначены ( $@%против $ @%)
  • Некоторые символы очень узкие, и их очень сложно идентифицировать ( '"!;:,.vs '"!;:,.)
  • Некоторые цифры и буквы очень похожи (по 0Oo iIlсравнению с 0Oo iIl)
  • Я очень полагаюсь на подсветку синтаксиса, без нее почти невозможно делать такие вещи, как подтверждение баланса кавычек и т. Д.
  • Выравнивание (кроме простых отступов) полностью нарушено. Вы можете сортировать его, добавив лишние пробелы, но из-за пропорционального характера шрифтов строки могут не совпадать точно - код выглядит более запутанным .
  • Регулярные выражения ... интересны!

Но есть и положительные моменты. По общему признанию, я использую его совсем недавно, но, безусловно, есть некоторые аспекты, которые немного лучше работают с пропорциональными шрифтами:

  • "слова" легче читать - вам бросаются в глаза орфографические ошибки (например, неправильное написание переменной).
  • Мне лучше использовать более длинные и описательные имена переменных (возможно, потому, что они лучше сканируют, может быть, потому, что горизонтальный размер текста сжимается)
  • Кажется, такой код немного легче читать . Моему мозгу легче «токенизировать» каждое слово и понимать его значение. Хотя из-за того, что знаки препинания сложнее читать, это все еще сложно - но, возможно, это изменится, если немного времени, чтобы привыкнуть к этому.

Я обновлю этот ответ завтра снова (при условии, что я смогу прожить так целый день!)


7
Хорошая работа! Однако мне интересно, какой шрифт вы использовали, поскольку большинство ваших замечаний по поводу слишком похожих друг на друга персонажей меня совсем не беспокоит.
Rik

Я начал с Arial, перешел на Calibri. Я попробовал несколько других, но они тоже оказались лучшими, основываясь на 20 секундах крайне ненаучного нащупывания моего списка шрифтов и рекомендации Конрада Рудольфа.
Дэн

6
«Я никогда раньше даже не думал о кодировании с использованием пропорционального шрифта. Поэтому в интересах науки я просто переключил свой редактор, чтобы попробовать». Сколько лет вы программировали и привыкли к фиксированной ширине? Здесь у вас есть достойный ответ, но вы не учитываете собственную предвзятость (а это было бы трудно сделать без дополнительной работы), что не очень хорошая наука.

2
@ Роджер: Возможно, это плохая наука (провести такое исследование было бы почти невозможно и очень дорого!), Но причины вполне правдоподобны. А сломанный отступ - аргумент, который трудно превзойти (в текущих IDE / редакторах; эта проблема решается за счет разумного отступа с использованием позиций табуляции, которые соответствуют семантике).
Конрад Рудольф

5
Пропорциональный шрифт, разработанный специально для программирования, решит большинство обычных возражений. Есть несколько пропорциональных шрифтов для кодирования на code.google.com/p/i3project/wiki/Fonts
user287424

28

Мне нравится выстраивать связанные условные выражения, чтобы было более очевидно, что они сгруппированы. Например:

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

Шрифты переменной ширины усложняют задачу.


2
Действительный пункт. Но вертикальное выравнивание вещей имеет проблему: что, если вам нужно что-то изменить в этом операторе if? Вероятно, вам нужно будет все перестроить.
Calmarius 08

9
@Calmarius: "сделать его читабельным" - часть моего дневного программирования, я делаю это неосознанно. Если вы приложите усилия для изменения кода, вам также следует приложить усилия для снижения затрат на обслуживание.
Себастьян Мах

2
Лучший способ добиться этого - эластичные табуляторы , даже если вы используете моноширинный шрифт. Не то чтобы это практичная альтернатива в нынешних редакторах ...
Роман Старков

1
@endolith Ну, конечно, они умнее пробелов ... :) Вам все равно нужно решить, что вы хотите согласовать с чем; большое преимущество в том, что как только вы это сделаете, все останется на одном уровне, даже если другие вещи изменятся.
Роман Старков

2
@endolith Вы должны вставить табуляцию между двумя круглыми скобками в первой строке и табуляцию перед открывающей скобкой во второй строке. Теперь это добавило бы дополнительное пространство между двумя скобками в строке 1 в ванильной реализации, но вы бы получили выравнивание, которое сохраняется при редактировании, что для меня звучит как очень стоящий компромисс. На самом деле, я бы даже добавил табуляцию после закрывающих скобок в обеих строках. Посмотрите снимок экрана во всей красе шрифта переменной ширины или попробуйте сами .
Роман Старков

21

Одна вещь, которую я продолжаю видеть здесь, - это обсуждение «выравнивания кода» и отступов. Хочу отметить следующее:

  • восемь пробелов всегда будут вдвое длиннее четырех пробелов в любом шрифте.
  • две вкладки всегда будут вдвое длиннее одной вкладки любым шрифтом.
  • любой идентификатор в одной строке всегда будет такой же ширины в следующей строке ... любым шрифтом!
  • Конечно, если ваши товарищи по команде используют моноширинный режим, а вы нет, это будет выглядеть по-другому ... но вы должны стандартизировать что-то - что бы это ни было - и если это правда, то это будет выглядеть одинаково для всех. ..в ЛЮБОМ шрифте! Для смеха вы также можете попробовать оставить всех в моноширинном режиме и дать половине из них широкоэкранные мониторы ... посмотрим, как это получится.
  • Если вы делаете что-либо, основанное на выстраивании кода на основе столбца этих символов на экране, а не на объеме используемых вами идентификаторов, я утверждаю, что то, что вы делаете, является взломом. Идентификаторы никогда не должны ограничиваться определенным количеством символов за счет качества их имен. Помимо этого ... вы все еще не рисуете блоки ASCII со звездочками для комментариев в своем коде, не так ли?

Итак, если собрать все это вместе, если вы начинаете каждую строку в одном и том же месте, а постоянный интервал имеет одинаковую ширину, а идентификаторы не меняют ширину спонтанно на каждой строке, тогда ваш код действительно будет выстраиваться в линию! ... пока что-то не изменится.

например:

identifier.Method().Property.ToString();
identifier.Method().OtherGuy.ToString(); //how lined up and pretty!
identifier.Method().Sumthing.YouGetThePoint;
  • идентификатор.Метод (). Свойство.ToString ();
  • идентификатор.Method (). OtherGuy.ToString (); //о нет! смещено!
  • идентификатор.Method (). Sumthing.YouGetThePoint; //...но кого это волнует? они разные свойства!

Единственное, что я признаю, это то, что не буквенно-цифровые символы обычно не очень широкие; к ним относятся) (] [} {,: | "; ',`! и. Это, однако, можно исправить в редакторе шрифтов ... просто сделав их шире. Это не проблема, присущая немоноширинным шрифтам; там просто есть На него не было большого спроса, так что это еще не сделано.

Таким образом, личные предпочтения - это хорошо, но я думаю, что нет особых практических причин предпочитать моноширинный режим немоноширинному. Вам нравится, как это выглядит? Конечно, сделайте моноширинный. Хотите, чтобы на экране поместилось больше информации? Не моно. Но то, как люди относятся к немонопространству как к ереси, немного преувеличено.


3
+1, чтобы увидеть больше информации на вашем экране. А коробки ASCII ... ... ну, пустая трата времени.
Calmarius 08

2
+1; эти моменты на самом деле трудно оценить, пока кто-то не использует пропорциональный шрифт в течение некоторого времени.
Роман Старков

8
+1 за широкое понимание того, что пропорциональные шрифты, разработанные специально для программирования, могут быть созданы и не обязательно должны быть моноширинными. Если бы пропорциональные шрифты были более обычным явлением в программировании, могла бы возникнуть новая культура «типографики программирования». Не так с «ересью».
Timwi

3
Вы делаете радикальные предположения в своих точках: 1) выравнивание должно происходить только в начале строки, 2) выравнивание одинаковых вызовов на нескольких строках всегда будет в одном объекте "identifier.Method ()", 3) столбцовая позиция имеет какое-либо отношение к именам идентификаторов, 4) выравнивание в комментариях может потребоваться только для «блоков ASCII со звездочками». Извини, -1.
Droj

3
Я обижаюсь не потому, что вы проголосовали против меня, а потому, что не предлагает ни малейшего контраргумента. По сути, ты просто пересказал мне мою точку зрения, ха. Но да, согласен! Выравнивание имеет значение только до тех пор, пока линии не различаются; выравнивание вызовов методов с разными аргументами НЕ имеет значения, потому что вы не должны ограничивать длину ваших имен переменных; позиция столбца INDEED НЕ имеет ничего общего с именами идентификаторов; и единственное время, когда вам нужно выравнивание, - это когда вы занимаетесь искусством ascii за гроши компании.
bwerks

16

Мне стало любопытно в этой теме, потому что многие аргументы в пользу моноширинных шрифтов действительно можно легко опровергнуть с помощью некоторых настроек. Поэтому я переключил свою IDE на Calibri (потому что у нее красивое круглое лицо и она оптимизирована для удобочитаемости на экранах для пользовательского интерфейса - идеально). Теперь мне, очевидно, приходится использовать табуляцию вместо пробелов для отступов (игнорируя все проблемы), а ширины 4 пробелов явно недостаточно, поэтому я переключился на 10.

Теперь выглядит неплохо. Однако есть несколько очевидных проблем, которые я мог заметить. Больше может появиться позже, после того как я некоторое время протестирую эти настройки.

  • Как уже упоминалось, некоторые символы (особенно круглые скобки, точки с запятой) выглядят слишком тонкими. Я хочу, чтобы это было непрерывным текстом, но не в исходном коде. Думаю, это будет самая большая проблема.
  • Символы не совпадают. В качестве примера рассмотрим следующий код C #:

    var expr = x => x + 1;
    

    Стрелка ( =>) выглядит как единое целое в любом моноширинном шрифте. Это похоже на два соседних символа в других шрифтах. То же самое и с операторами вроде >>т. Д.

  • Пространства выглядят крошечными. Я активно размещаю свои исходные коды, чтобы улучшить читаемость. Это сходит на нет при переходе на пропорциональный шрифт. Если бы я мог контролировать ширину пробелов, это определенно помогло бы.
  • Контекстно-зависимые отступы полностью нарушены: в некоторых контекстах недостаточно отступа для фиксированного количества вкладок. Возьмите выражения LINQ, которые могут иметь следующий отступ:

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

    Вы просто не можете этого сделать с пропорциональным шрифтом.

В общем, персонажи слишком узкие. Опять же, дополнительный межбуквенный интервал может помочь, и это определенно необходимо в случае пунктуации. Однако у меня такое чувство, что вся эта настройка, чтобы сделать пропорциональные шрифты более читабельными, просто имитировала бы естественные моноширинные шрифты. Это, безусловно, верно для всех упомянутых выше моментов.


1
На самом деле Calibri немного лучше, чем Arial (это то, что я тестировал), хотя он по-прежнему демонстрирует аналогичные проблемы
Дэн

1
Пробовал несколько шрифтов. Calibri и Lucida Sans Unicode кажутся наиболее вероятными кандидатами. Неслучайно Lucida Sans Unicode (под псевдонимом «Lucida Grande») является шрифтом пользовательского интерфейса OS X.
Конрад Рудольф

1
Да, на самом деле эти двое очень похожи. Calibri выигрывает для меня, так как в нем немного более четкая пунктуация.
Дэн

Возможно, это только я, но я обнаружил, что интервалы Calibri невероятно непредсказуемы - некоторые пространства кажутся несуществующими, а другие кажутся огромными. Даже не обращая внимания на программирование, я отключил его на каждой машине, которую использую.
bwerks

@bwerks: что ты имеешь в виду - ты его «отключаешь»? Только не используйте его, если он вам не нравится. Кроме того, когда, кроме программирования, вы используете интервалы? Для форматирования? Не надо , это смертный грех. Более того, то, что вы наблюдаете, может быть просто следствием плохого алгоритма разрыва строки в Microsoft Word - поскольку интервал Calibri всегда один и тот же: пространство всегда имеет одинаковую ширину. В частности, это не влияет на кернинг.
Конрад Рудольф

11

Я использую Comic Sans MS, который выглядит вполне разумно для небольших кеглей (это только начинает выглядеть "шуткой" при размере заголовков). Это легко для глаз, но при этом сохраняет текст достаточно мелким, чтобы в текстовом окне было видно разумное количество кода при открытых пристыкованных панелях VS.

Вы можете отключить панель обозревателя решений и по-прежнему иметь 100 столбцов текста, читаемых без горизонтальной прокрутки. Кроме того, я могу открыть панель DXCore Documentor (отображающую отформатированные XMLDOC) достаточно широко, чтобы ее можно было читать, но при этом я могу видеть достаточно текста для документирования XMLdocs.


4
О чувак. Почему? Я хотел бы услышать ваше оправдание!
Дэн

4
Использование comic sans для чего угодно :)
Дэн

4
Ваше оправдание - «это мало»? Из всех особенностей Comic Sans, его «малость» редко позволяет ему часто выбирать среди других шрифтов. Кроме того, из-за этого ты выглядишь так, будто тебе 12. Если бы я работал с тобой, я бы определенно посмеялся над тобой за это сейчас :)
Дэн

5
Полностью макрель - я только что попробовал, и это работает. Джеймс, вероятно, обнаружил единственную оставшуюся причину существования Comic Sans - его легко читать до 7pt. В следующий раз, когда мне придется реорганизовать чей-то кодовый беспорядок с использованием методов тысячи строк, я буду использовать этот шрифт.
Bevan

7
Это очень хорошо может быть читаемым, но я все равно не стал бы признаваться в этом публично :)
patricksweeney

10

Если вы работаете в команде, то однотонные шрифты гарантируют, что код ясен и правильно разложен для всех, независимо от того, какой монотонный шрифт они предпочитают использовать.

Ваш код может выглядеть понятным при использовании шрифта переменной ширины, но вряд ли он будет выглядеть так же, если пользователь шрифта с одинарным интервалом откроет его.


10

Все, что нужно, - это несколько часов попытаться выяснить, почему поиск не находит чего-то, потому что у вас есть 2 пробела вместо 1 в вашем литерале, чтобы понять, что вам следует использовать моноширинные шрифты. Это случилось со мной однажды, когда я пытался исправить агент Lotus Notes, когда дизайнер не использовал моноширинный шрифт. Только когда я вставил код в CodeWright, чтобы распечатать его, стало очевидно, в чем проблема.


1
Ширина пространства постоянна при использовании пропорционального шрифта, не так ли?
Calmarius 08

7
Или вы можете использовать пропорциональный шрифт с более широким пространством. Пропорциональность сама по себе не вызывает проблемы, о которой вы говорите.
Роман Старков

10

Моноширинные шрифты значительно упрощают выстраивание кода.

Это особенно актуально при работе в команде; каждый в команде может использовать разные шрифты, и пока все они моноширинные, все будет выровнено. Точно так же, если один человек использует много разных инструментов разработки, все выровняется, если все они моноширинные. Если бы не все они были моноширинными, вам нужно было бы убедиться, что все они используют один и тот же шрифт, а если вы разрабатываете на двух платформах, это может быть сложно.

Фактически, некоторые инструменты разработки поддерживают только моноширинные шрифты.

Другая причина заключается в том, что в моноширинных шрифтах характерны более четкие символы. Сравните lIiO0 с lIiO0, и вы поймете, что я имею в виду. Они также значительно упрощают подсчет пробелов.


5
«все выровняется» - только если ваша команда решила «Единую священную войну» вкладок и пробелов и / или имеет одинаковую ширину вкладок.
Роман Старков

2
Даже если вы используете отступы табулятора, вы все равно должны использовать пробелы для выравнивания после отступа.
PeterAllenWebb

6

Я подозреваю, что моноширинные шрифты были предпочтением программистов, поскольку они были перенесены со времен текстовой DOS.

С другой стороны, я сам пробовал Verdana и пару других рекомендуемых пропорциональных шрифтов, но не смог с этим справиться. Мой глаз слишком хорошо натренирован для моноширинного пространства. Языки, в которых много символов, например: C / C ++, C #, Perl и т. Д., Кажутся мне слишком разными. Размещение символов делает код совершенно другим.


Кажется, это реальный ответ, я также думаю, что в основном это связано с привычками / историческими причинами, а все остальное - просто ограничения редактора кода или плохие шрифты.
Михаил V

6

По характеру кода, а не обычного языка, лучше правильно выстроить его. Кроме того, при редактировании кода иногда требуется заблокировать выделение, заблокировать копирование и заблокировать вставку. В Visual Studio вы можете выбрать блок, используя клавишу ALT при выборе мыши. Он может отличаться в разных редакторах, но я всегда считал, что этот параметр в редакторе очень важен в некоторых случаях, и он не будет работать очень хорошо, если вы не используете шрифт с одним интервалом.


Теперь есть новые комбинации клавиш, которых я раньше не знал. Ура.
Кев

5

Лично мне кажется, что монотонные шрифты легче читать в редакторах кода. Конечно, я почти слепой. Это может иметь значение. В настоящее время я использую шрифт consolas размером 15 пунктов на темном фоне с высококонтрастными буквами.


Consolas на самом деле представляет собой шрифт с одинарным интервалом. При этом очень хороший. Я тоже им пользуюсь.
Джоэл Мюллер,

+1 для Consolas и Inconsolata на Mac
the_mandrill

@ Джо Мюллер - понятия не имею, как я это написал. Я имею ввиду противоположное тому, что я написал. Позвольте мне отредактировать это .... хорошо. :)
Джон Крафт

Я бы порекомендовал вам попробовать найти хороший немоноширинный шрифт, оптимизированный для кода, и переключиться на светлый фон, прежде чем вы полностью ослепнете, без обид, просто то, что мне подсказывает мой опыт.
Михаил V

2

Использование пробелов для отступов станет проблемой, если вы перейдете на глубину более одного уровня.


6
Собственно, любая достойная IDE должна с этим справиться.
Рик

8
Это только еще одна причина использовать табуляцию для отступов (это причина, по которой добрый Господь дал табуляции в первую очередь)
Джеймс Карран

5
+1 за вкладки (теперь о местонахождении этих дебатов ...)
Бобби Джек

2

В основном для целей выравнивания (например, когда объявления параметров функции охватывают несколько строк, и вы хотите выровнять их, или выровнять комментарии и т. Д.).


1

Я думаю, что, как и в случае с символами табуляции, усложняющий фактор - это когда что-то имеет отступ для целей выравнивания, а у кого-то другие предпочтения. Вещи не совпадают.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.