Навіщо використовувати монопросторові шрифти у своїй IDE? [зачинено]


83

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

Чому ви використовуєте монопростірний шрифт?


4
У когось є поважні причини не використовувати шрифти сценарію? :)
Джаммус,

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

Я думаю, що Trim йде навіть далі, ніж Вердана, роблячи код читабельним. ( code.google.com/p/i3project/wiki/Fonts )
користувач287424

Принаймні, я не єдиний єретик, який використовує Вердану. :)
Calmarius

16
Відкрийте це знову. Знаючи правильний інструмент / техніку для роботи та причини її, безумовно, варто обговорити.
Thomas Eding

Відповіді:


107

Монопростірним шрифтом:

  • Рядові літерали однакової довжини виглядають рівними.
  • Простіше побачити тонкі розділові знаки, такі як: () {}
  • Подібні символи виглядають по-різному: Il 0O vs. Il 0O
  • Ви знаєте, чи загортатиметься рядок у вікні шириною X символів. Це означає, що ваша команда може стандартизувати припустимо 100 символьних рядків, і рядок завжди буде виглядати як рядок

31
Другий і третій пункти насправді не є настільки специфічними для монопространства. Це більше питання про те, який шрифт particulr ви використовуєте, а не про те, чи є він одношаровим. Вердана добре працює в обох точках (краще, ніж у більшості одношарових шрифтів, imo), саме тому я її використовую
Рік,

8
Щоб виправити кожну з них: еквівалентні рядки виглядають рівною шириною, і я сумніваюся, чому ви дбаєте про різні рядки, які мають лише довжину. Немономірність не диктує, що розділові знаки тонкі; слід використовувати інший немонографічний шрифт. "Подібні" символи не обов'язково виглядають по-різному в монопросторі; Наприклад, SimHei має однакову O проти 0. Це властивість шрифту, а не ширина. Врешті-решт, якщо ваша команда насправді стандартизує, тоді ви можете вибрати немоно та стандартизувати на "нехай це не стікає з екрану".
bwerks

104

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

Ось кілька спостережень після виправлення декількох простих квитків:

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

Однак є деякі позитивні моменти. Слід визнати, що я використовую його лише деякий час, але, звичайно, є деякі аспекти, які працюють трохи краще з пропорційними шрифтами:

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

Завтра я знову оновлю цю відповідь (за умови, що зможу пройти цілий день, як це!)


7
Хороша робота! Цікаво, який шрифт ви використовували, однак, оскільки більшість пунктів про певні символи, які виглядають занадто схожими, мене зовсім не турбують.
Рік,

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

6
"Я ніколи раніше навіть не замислювався над кодуванням пропорційним шрифтом. Тому в інтересах науки я просто переключив редактора, щоб спробувати". Скільки років ви програмуєте і звикли до фіксованої ширини? Тут у вас є гідна відповідь, але ви не враховуєте власних упереджень (і це було б важко зробити без набагато більшої роботи), що не дуже добре.

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

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

28

Я люблю вибудовувати відповідні умови, намагаючись зробити більш очевидним, що вони згруповані. Наприклад:

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

Шрифти змінної ширини ускладнюють це.


2
Дійсний пункт. Але вертикальне вишикування речей має проблему: що, якщо вам потрібно щось змінити у цьому твердженні if? Ймовірно, вам доведеться перерівняти всі речі.
Calmarius

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;
  • ідентифікатор.Method (). Property.ToString ();
  • ідентифікатор.Метод (). OtherGuy.ToString (); //о ні! неправильно вирівняні!
  • ідентифікатор.Метод (). Sumthing.YouGetThePoint; //... але кого це цікавить? вони різні властивості!

Єдиний момент, за яким я визнаю, полягає в тому, що нелітерально-цифрові символи, як правило, не дуже широкі; до них належать) (] [} {,: | "; ',`! і. Однак це можна виправити в редакторі шрифтів ... просто зробивши їх ширшими. Це не проблема, властива немонопростору; просто немає На нього не було великого попиту, і тому це ще не зроблено.

Підводячи підсумок, особисті переваги - це нормально, але я думаю, що є мало практичних причин віддавати перевагу монопростору перед немонопростором. Вам подобається зовнішній вигляд? Звичайно, займіться монопростором. Ви хочете, щоб на вашому екрані було більше речей? Переходьте немоно. Але те, як люди ставляться до непросторового простору як до єресі, трохи перебільшено.


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

2
+1; ці пункти насправді важко оцінити, поки хтось не використовує пропорційний шрифт деякий час.
Роман Старков

8
+1 за широке розуміння того, що пропорційні шрифти, розроблені спеціально для програмування, можна створювати і не обов’язково бути однопросторовими. Якби пропорційні шрифти були більш звичним явищем у програмуванні, може виникнути нова культура «типографіки програмування». Інакше не стосується мислення «єресі».
Timwi

3
Ви робите широкі припущення у своїх точках: 1) вирівнювання має відбуватися лише на початку рядка, 2) вирівнювання подібних викликів на декількох рядках завжди буде на одному і тому ж об'єкті "identifier.Method ()", 3) стовпчаста позиція має щось спільне з іменами ідентифікаторів, 4) єдиний раз, коли комусь знадобиться вирівнювання в коментарях, це "ASCII поля з зірочками". Вибачте, -1.
Дрой

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
Я спробував кілька шрифтів. Калібрі та Люсіда Сансі Юнікод, мабуть, найбільш імовірні кандидати. Не випадково Lucida Sans Unicode (під псевдонімом "Lucida Grande") - це шрифт інтерфейсу користувача OS X.
Конрад Рудольф,

1
Так, насправді ці двоє дуже схожі. Калібрі перемагає для мене, оскільки має дещо чіткіші знаки пунктуації.
Ден,

Це може бути просто я, але я знайшов відстань Калібрі неймовірно непередбачуваним - деякі простори здаються відсутніми, а інші здаються величезними. Навіть не зважаючи на програмування, я відключив його на кожній машині, якою я користуюся.
bwerks

@bwerks: що ти маєш на увазі - ти "відключаєш" це? Просто не використовуйте його, якщо вам це не подобається. Крім того, коли, крім програмування, ви використовуєте інтервал? Для форматування? Не робіть , це смертний гріх. Крім того, те, що ви спостерігаєте, може бути наслідком поганого алгоритму розбиття рядків у Microsoft Word - оскільки інтервал Калібрі завжди однаковий: пробіл завжди має однакову ширину. Зокрема, на це не впливає кернінг.
Конрад Рудольф

11

Я використовую Comic Sans MS, який виглядає цілком розумно, оскільки малі розміри точок (він починає виглядати «жартівливо» лише при розмірах заголовків). Це легко для очей, але все одно тримайте текст досить дрібним, щоб у текстовому вікні було видно розумну кількість коду, відкривши кілька закріплених панелей VS.

Ви можете вимкнути панель Solution Explorer і мати 100 стовпців тексту для читання без горизонтальної прокрутки. Перемістившись, я можу мати панель DXCore Documentor (відображаючи відформатовані XMLDOC) достатньо широко відкритою для читання, але при цьому мати можливість бачити достатньо тексту, щоб документувати XML-документи.


4
О чувак. Чому? Я хотів би почути ваше виправдання цього!
Ден,

4
Використання комічного sans для, ну, чого завгодно :)
Дан,

4
Ваше обґрунтування "це маленьке"? З усіх особливостей Comic Sans, його "маленькість" рідко буває, що його часто вибирають серед інших шрифтів. Крім того, це робить тебе схожим на те, що тобі 12. Якби я працював з тобою, я б точно вже над цим посміявся :)
Ден,

5
Цілком скумбрія - я щойно спробував це, і це працює. Джеймс, мабуть, виявив єдину причину існування Comic Sans, яка залишилася - вона чітко читається до 7pt. Наступного разу, коли мені доведеться реконструювати чийсь халепський код, використовуючи тисячі рядкових методів, я використаю цей шрифт.
Беван,

7
Це цілком можна прочитати, але я все одно не хотів би визнавати це публічно :)
patricksweeney

10

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

Ваш код може здатися вам зрозумілим при використанні шрифту зі змінною шириною, але навряд чи він буде виглядати однаково, якщо його відкриває користувач шрифту з одним пробілом.


10

Все, що потрібно, - це кілька годин спроб з’ясувати, чому пошук щось не знаходить, оскільки у вашому буквалі є 2 пробіли замість 1, щоб зрозуміти, що ви повинні використовувати шрифти Monospace. У мене це траплялося одного разу при спробі виправити агент Lotus Notes, коли дизайнер не використовував шрифт monospace. Лише коли я вставив код у CodeWright, щоб роздрукувати його, стало очевидно, в чому проблема.


1
Ширина простору постійна при використанні пропорційного шрифту, чи не так?
Calmarius

7
Або ви можете використовувати пропорційний шрифт із ширшим простором. Пропорційність сама по собі не викликає проблеми, про яку ви згадали.
Роман Старков

10

Монорозмірні шрифти значно полегшують вибудовування коду.

Це особливо актуально при роботі з командою; кожен у команді може користуватися різними шрифтами, і поки вони всі мають монопростір, все буде вибудовуватися. Подібним чином, якщо одна людина використовує безліч різних інструментів розробки, все складеться, якщо всі вони мають монопростір. Якби всі вони не були моноширокими, вам довелося б переконатися, що всі вони використовують один і той же шрифт, а якщо ви розробляєте на двох платформах, це може бути важко.

Насправді, деякі засоби розробки підтримують лише одношарові шрифти.

Інша причина полягає в тому, що моноширинні шрифти мають, як правило, більш чіткі символи. Порівняйте lIiO0 з lIiO0, і ви зрозумієте, що я маю на увазі. Вони також значно полегшують підрахунок пробілів.


5
"все складеться" - лише якщо ваша команда врегулювала Єдину священну війну вкладок проти пробілів та / або має однаковий параметр ширини вкладок.
Роман Старков

2
Навіть якщо ви використовуєте відступ табуляції, ви все одно повинні використовувати пробіли для вирівнювання після відступу.
PeterAllenWebb

6

Я підозрюю, що моноширинні шрифти віддали перевагу програмісту як перенесення з текстових днів DOS.

З іншого боку, я сам пробував Вердану та ще пару рекомендованих пропорційних шрифтів, але не зміг впоратися зі змінами. Моє око занадто добре навчене для простору. Мови, важкі для символів, такі як: C / C ++, C #, Perl тощо, виглядають для мене занадто різними. Розміщення символів робить код абсолютно іншим.


Це, здається, справжня відповідь, я також думаю, що це, в основному, звички / історичні причини, а решта - це просто обмеження редактора коду або погані шрифти.
Михайло V

6

За характером коду, а не звичайною мовою, приємніше мати правильний вибудовування. Крім того, при редагуванні коду іноді потрібно заблокувати вибір, заблокувати копіювання та блокування вставки. У Visual Studio ви можете зробити вибір блоку за допомогою клавіші ALT під час вибору миші. Це може відрізнятися в різних редакторах, але я завжди вважав цей параметр у редакторі дуже важливим у деяких випадках, і він не працював би дуже добре, якщо ви не використовуєте шрифт із пробілами.


Тепер є нове натискання клавіші, якого я ніколи раніше не знав. Ура.
Кев

5

Мені особисто зручніше читати шрифти з інтервалом у редакторах коду. Звичайно, я майже сліпий. Це може змінити ситуацію. В даний час я запускаю консольний шрифт у 15 точках з темним фоном з висококонтрастними літерами.


Consolas - це насправді шрифт із пробілами. Дуже хороший. Я теж його використовую.
Джоел Мюллер,

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

@Joe Mueller - Я не уявляю, як я це написав. Я маю на увазі протилежне тому, що я писав. Дозвольте мені відредагувати це .... добре. :)
Джон Крафт,

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

2

Використання пробілів для відступу було б проблемою, як тільки ви заглибитесь на один рівень.


6
Насправді, будь-яка гідна IDE повинна впоратися з цим.
Рік,

8
Що є лише ще однією причиною використовувати вкладки для відступу (саме це причина, яку добрий Господь дав як вкладки в першу чергу)
Джеймс Керран,

5
+1 для вкладок (зараз місце дискусії триває ...)
Боббі Джек,

2

Переважно для цілей вирівнювання (наприклад, коли оголошення параметрів функції охоплюють кілька рядків, і ви хочете їх вибудувати, або вишикувавши коментарі тощо).


1

Я думаю, як і проблема з символами табуляції, ускладнюючим фактором є те, коли щось відступає з метою вирівнювання, а хтось інший має інші уподобання. Речі зміщуються між собою.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.