Czy ktoś woli czcionki proporcjonalne? [Zamknięte]


51

Czytałem artykuł na Wikipedii o stylu programowania i zauważyłem coś w sporze przeciwko wyrównanemu pionowo kodowi:

Poleganie na czcionce o jednolitym odstępie; formatowanie tabelaryczne zakłada, że ​​edytor używa czcionki o stałej szerokości. Większość współczesnych edytorów kodu obsługuje czcionki proporcjonalne, a programista może preferować użycie czcionki proporcjonalnej dla zapewnienia czytelności .

Szczerze mówiąc, chyba nie spotkałem programisty, który wolałby czcionkę proporcjonalną. Nie mogę też wymyślić żadnych naprawdę dobrych powodów, aby z nich korzystać. Dlaczego ktoś miałby preferować czcionkę proporcjonalną?


11
Do czytania lubię proporcjonalne czcionki, ale do kodu używam wyłącznie czcionek o stałej szerokości. Zawsze, zawsze, zawsze.
Frank Shearar,

12
Cytując również Wikipedię: [citation needed]:)
dr Hannibal Lecter

7
Wiele lat temu pewien profesor, który miałem na studiach, żartobliwie powiedział: „... ponieważ to nie jest programowanie, chyba że jest to nowy kurier”.
Steven Evers,

12
Mój powód używania proporcjonalnej czcionki jest bardzo prosty. To już nie jest lata 80. Przeszliśmy od terminali postaci. Gazety, książki i strony internetowe na ogół nie używają czcionek o stałej szerokości ze względu na czytelność. Myślę, że mają rację.
Timwi

4
Verdana 11px jest świetna.
Czarek Tomczak

Odpowiedzi:


47

Skomentowano wspólne punkty w stosunku do czcionek proporcjonalnych.

  • Nie można dokładnie wyrównać kodu w pionie z czcionkami proporcjonalnymi. Chodzi mi o to, że można dokładnie wyrównać kod w pionie z czcionkami proporcjonalnymi, jeśli wszyscy używają elastycznych tabstopsów , ale niestety ...
  • Niektóre czcionki proporcjonalne utrudniają rozróżnienie niektórych grup znaków. (np. mrnm). Jednak nie wszystkie czcionki programistyczne są idealne: Courier New ma identyczne „O” i „0” oraz identyczne „1” i „l”.
  • Niektóre środowiska IDE mają słabą obsługę czcionek o stałej szerokości (np. Wspomniane wcześniej Visual Studio lub IDLE Pythona). W niektórych kontekstach też nie można użyć. (np. terminale.)
  • Wybór proporcjonalnej czcionki do kodowania doprowadzi cię do niekończących się świętych wojen. Tutaj jednak występuje problem między klawiaturą a krzesłem.

Wskazuje na proporcjonalne czcionki

Osobiście korzystam zarówno z czcionki „Ubuntu”, jak i WenQuanYi Zen Hei Mono z przyjemnością i nie jestem w stanie preferować jednej z nich. :)

Ubuntu
WenQuanYi Zen Hei Mono
Porównanie Ubuntu 10 i WenQuanYi Zen Hei Mono 9. Nie ma tutaj wyraźnego zwycięzcy, jeśli mnie o to poprosisz.

To powiedziawszy, czcionki są jak jedzenie. Niektórzy lubią je dobrze zaokrąglone, inni lubią ostre i pikantne - nie ma jednej właściwej czcionki, albo wszyscy byśmy jej teraz używali. Tak do wyboru!


Nie zdawałem sobie sprawy, że czcionka Ubuntu została wydana. Myślę, że tam działa dobrze.
Alan Pearce

+1 za pokazanie mi WenQuanYi Zen Hei Mono, ta czcionka jest niesamowita. Prawie na pewno wykorzystam to w mojej pracy magisterskiej. Zależy od tego, jak dobrze wygląda wydrukowany - na ekranie wygląda niesamowicie i nie zajmuje dużo poziomego miejsca, co jest bardzo ważne w druku.
Konrad Rudolph

9
Naprawdę, jest tylko jeden duży punkt krytyczny w stosunku do proporcjonalności: nie można tak naprawdę wyrównać, ponieważ nikt nie dba o elastyczne tabstopy. To jest zupełnie dziwne, biorąc pod uwagę, że przynosi korzyści zarówno monospacowym matrycom, jak i tym, którzy wolą czytać dobrze wyglądające czcionki o zmiennej szerokości. Chodź, świecie! Elastyczne tabstopsy!
Roman Starkov

7
@romkyns: Przyjmij styl wcięcia, który nie opiera się na zestawianiu z innymi wierszami. Prosty.
Zan Lynx,

4
@ZanLynx Zrobiłem to, ponieważ bardziej lubię czcionki proporcjonalne niż pionowe w miejscach innych niż początek linii.
Roman Starkov,

29

Istnieje powód, który praktycznie uniemożliwia użycie czcionek innych niż monospace do kodowania, ale nie został wspomniany w innych odpowiedziach: zaznaczenia prostokątne .

Ta funkcja, często niezbyt przydatna i mało znana podczas pracy ze zwykłym tekstem, jest niezbędna dla programistów. Możesz sobie wyobrazić wiele scenariuszy: usuwanie //komentarzy do kilku wierszy, dodawanie nawiasów lub innych znaków itp. Jest to nawet bardziej wartościowe dzięki zaawansowanemu wsparciu zaznaczania prostokątnego, tak jak w Visual Studio 2010, w którym możesz nie tylko zaznaczać i usuwać tekst, ale wybierz i zamień go.

Weźmy przykład:

private IEnumerable<SELove> StackExchangeRocks()
{
    var howILoveSEWebsites = new []
    {
        new SELove { SiteName = "Stack Overflow", MyReputation = 5269,  MyRating = Rating.Outstanding, },
        new SELove { SiteName = "Programmers",    MyReputation = 16937, MyRating = Rating.Outstanding, },
        new SELove { SiteName = "Super User",     MyReputation = 650,   MyRating = Rating.QuiteGood,   },
        new SELove { SiteName = "Server Fault",   MyReputation = 489,   MyRating = Rating.Good,        },
        // Initialize other websites here.
    };

    return howILoveSEWebsites.OrderByDescending(c => c.MyRating);
}

private class SELove
{
    public string SiteName { get; set; }
    public int MyReputation { get; set; }
    public Rating MyRating { get; set; }
}

private enum Rating
{
    Outstanding,
    Good,
    QuiteGood,
}

W tym starszym kodzie chcę zastąpić ocenę w kodzie metodą, która załaduje moją ocenę z samych stron Stack Exchange, mając zawsze dostęp do aktualnych danych. Zacząłem refaktoryzować MyReputationwłaściwość, a teraz chcę usunąć inicjalizację w zakresie. Wyobraź sobie, że nie mam czterech, ale wszystkie 84 strony internetowe SE.

Oto, co się stanie, gdy użyjesz jednolitej czcionki Consolas . Naciskam Backspace i to wszystko, mogę poświęcić pozostały czas na zrobienie czegoś naprawdę przydatnego.

Obraz pokazuje, że w Consolas prostokąt wybiera właściwość reputacji.

I to samo z Segoe UI . Ojej!

Obraz pokazuje, że w Segoe UI niektóre właściwości reputacji są wybierane tylko częściowo, podczas gdy w innych liniach zaznacza się początek właściwości oceny.


9
Stało się tak, ponieważ użyłeś odstępów pasujących do czcionki monspace. Jeśli masz odpowiednie odstępy w / r / t czcionki proporcjonalnej, nie miałbyś tego problemu.
Kos

6
@Kos: więc zamiast naciskać, powiedzmy, trzy tabulatory, naciskasz piętnaście razy klawisz spacji, niż zauważysz, że wpisałeś za dużo i usunąłeś ostatnią spację? Wydaje się to zbyt skomplikowane, nie sądzisz?
Arseni Mourzenko

6
Eclipse faktycznie obsługuje używanie innej czcionki w trybie wyboru prostokątnego, co sprawia, że ​​jest to mniejszy problem.
Nicholas,

8
@Kos RE: „właściwe odstępy w / r / t czcionki proporcjonalnej”: Ale jeśli inny programista użyje innej czcionki w tym samym pliku, to nie będzie w linii. Jeśli wszyscy redaktorzy używają czcionek monospace, zawsze będą się układać w linii (zakładając, że kod nie wykorzystuje tabulatorów do wyrównania).
Max Nanasy

5
Używam proporcjonalnej czcionki przez 2 lata bez żadnych elastycznych tabstopsów. Nie używam selekcji prostokątnej, ponieważ istnieje coś, co całkowicie zastępuje ją w większości IDE: selekcja wielozakresowa. W tym przykładzie wybrałbym „MyReputation =”, a następnie naciśnij Wybierz następne wystąpienie za pomocą CTRL-Dw SublimeText i VSCode, ALT-Jw edytorach IntelliJ / JetBrains. Następnie, SHIFT-CTRL-RIGHT ARROWaby rozszerzyć zaznaczenie do następnego tokena po prawej stronie i gotowe. Główną zaletą jest to, że nikt nie musi wyrównywać elementów do edycji. Wada, jeśli coś jest wyrównane, już nie będzie.
Hay

15

Kiedyś używałem proporcjonalnej czcionki, głównie dlatego, że uważam, że interpunkcja jest w rzeczywistości łatwiejsza do rozróżnienia, ale z czasem zrezygnowałem, ponieważ nikt inny tego nie robi i wszyscy nieświadomie zakładają czcionki z odstępami mono (jak wspomina artykuł w Wikipedii, próbując zrobić tabelę formatowanie, grafika ascii w komentarzach i tak dalej).

Ponadto problemy w Visual Studio , których Microsoft nie chce naprawiać, w zasadzie uniemożliwiają użycie dobrze zaprojektowanych proporcjonalnych czcionek.


9
Uwielbiam twój komentarz mini-bitwa z Microsoftem na temat tego błędu. I ich radosna odpowiedź, która jest w zasadzie „Cześć! Dzięki! Świetnie cię poznać! Nic nie zrobimy. OK, dziękuję miło z tobą porozmawiać!” Wyobraź sobie, że ludzie tak postępowali w prawdziwym życiu ...
Danio

2
Otrzymujesz poparcie dla współczucia, ponieważ chociaż nie używam czcionki o proporcjonalnej szerokości z kilku powodów, które przytaczasz, mój wewnętrzny typograf nieustannie pragnie odpowiedniego wsparcia edytora, zarówno w projektowaniu, jak i programowaniu.
Jon Purdy,

Dziwne, myślałem tylko, że interpunkcja jest trudniejsza do odróżnienia (szczególnie kropki), ponieważ zajmuje mniej miejsca. Pamiętam również, że Notepad ++ najdłużej używał Comic Sans MS w komentarzach.
DisgruntledGoat

6
Jeśli interpunkcja jest trudna do zidentyfikowania w czcionce Monospace, istnieją inne czcionki Monospace - nie oznacza to, że musisz użyć czcionki proporcjonalnej.
Nikt

Dokładnie na lepszą interpunkcji, czasami używać EnvyCode A lub B .
zanlok

9

Osobiście mnie to nie obchodzi. Tak długo, jak trzymasz moje zakładki w jednej linii, a czcionka czytelna, nie przejmuję się tym, czy używam monospace, proporcjonalności, czy innych odstępów od ściany. Po prostu nie zaczynaj zastępować moich zakładek spacjami, a nie będziesz się ze mną kłócił.


3
W pełni się zgadzam. Za pomocą tabulatorów (w przeciwieństwie do spacji zakodowanych na stałe) możesz przełączać między czcionkami monospace i proporcjonalnymi i odpowiednio dostosowywać szerokość tabulatorów. Muszę jednak zobaczyć edytor, w którym możesz ustawić szerokość tabulatora w jednostkach EM.
August Karlstrom,

6

Używam czcionki proporcjonalnej (Arial jest najlepszym, jaki do tej pory znalazłem, Verdana jest drugą wiceministką) i szczerze mówiąc, wciąż jestem zaskoczony, że ludzie używają czcionek o stałej szerokości; dlaczego miałbyś chcieć poświęcić taką czytelność? Mogłem zrozumieć, czy formatowanie tabelaryczne jest pożądane, ale tak nie jest, ponieważ tworzy koszmar konserwacji bez względu na czcionkę.


4
Jestem zaskoczony, że lubisz Arial i Verdana. Uważam je za nieco szorstkie i nieprofesjonalne. Próbowałeś Calibri?
Timwi

2
Używam 8pt Verdana. Długie nazwy identyfikatorów są łatwiejsze do odczytania. Mogę wyświetlić 70 wierszy kodu bez przewijania, a wiersze są znacznie krótsze, więc kod jest wąską kolumną, jak w gazecie. Pozwala mi to podzielić widok edytora na dwie pionowe kolumny: Deklarację przeglądam w jednym widoku, a kod piszę w innym. Również podczas debugowania ekran jest pełny okien debugowania, widok kodu mieści się na małej przestrzeni. Używanie czcionek proporcjonalnych eliminuje potrzebę pionowego wyrównywania elementów i umieszczania pól ascii gwiazdek wokół komentarzy.
Calmarius

2
Widzę 147 linii kodu w Visual Studio na monitorze 1920x1200 obróconym o 90 ° w trybie portretowym, przy użyciu czcionki Lucida Console.
zanlok

158 linii czcionką Monaco w Vimie ... Mój ekran nie jest nawet HD
Mark K Cowan

4

Pamiętam, że w książce Bjarne Stroustrup The C ++ Programming Language użyto w kodzie czcionek o rozstawie propotianitycznym. (Nie mogę znaleźć żadnych przykładowych stron w Internecie)

Nie pamiętam dokładnych powodów, ale myślę, że wymienił to i jedną inną zmianę (myślę, że sam język C ++) jako nowe wprowadzenie do tej książki.

Osobiście wolę te o stałej przestrzeni. Consolas jest moim ulubionym.


1
Sprawdzanie strony 5 mojej edycji specjalnej: czcionki proporcjonalne są ogólnie uważane za lepsze dla tekstu, ich użycie pozwala na mniej nielogicznych podziałów linii i większość ludzi przyzwyczaja się do tego. Łatwo to odczytać. Stroustrup prezentuje tutaj kod, nie próbuje go tworzyć, a to może coś zmienić.
David Thornley,

4
@David, tak, prezentuje kod. Ale jest on prezentowany do „odczytu”, a samo pytanie ustalone vs proporcjonalne dotyczy „odczytu” kodu, IMHO.
Nivas,

4

W przypadku języków, które mają krótkie linie i dużo otwartej przestrzeni, wolę czcionki o stałej szerokości. Uważam, że czcionki o zmiennej szerokości mogą poprawić czytelność w przypadku długich linii i gęstej składni.

Problem z większością proporcjonalnych czcionek polega na tym, że nie zostały one zaprojektowane do programowania. Ta strona pokazuje niektóre czcionki, które były.

Przytnij czcionkę


4
martwy link do Google Code :(
Florian Castellane

2

Środowiska Smalltalk, takie jak Pharo, używają czcionek proporcjonalnych, a ze względu na styl języka wygląda tam bardzo dobrze. Ale w językach w stylu C, takich jak Go lub innych, takich jak Erlang lub Python, wolę czcionki o stałej szerokości.


2

Spędziłem trochę czasu, szukając dobrej, czytelnej czcionki dla Eclipse, a pod XP korzystałem z Verdana przez dłuższy czas. Consolas postanowił to, ponieważ jest naprawdę znakomity do programowania.

Oto moje ustalenia:

  • Większość czcionek proporcjonalnych zaprojektowano z myślą o prozie i tylko niewielkiej interpunkcji (która z kolei zwykle składa się z jednego lub rzadko dwóch znaków). Rodzina języków C ma wiele znaków interpunkcyjnych, które po prostu nie - moim zdaniem - dobrze wyglądają i są trudniejsze do odczytania niż to konieczne.
  • Znaki o zmiennej długości oznaczają, że długość linii jest różna. To sprawia, że ​​prawie niemożliwe jest odgadnięcie, gdzie kończy się kursor podczas nawigacji za pomocą przycisków strzałek. Uważam to za denerwujące.
  • Liczy się także odstęp pionowy. Zwykle nie jest to coś, co można łatwo zastąpić, a większość czcionek proporcjonalnych ma mniej miejsca między wierszami niż chciałbym.
  • Bardzo niewiele IDE jest testowanych przy użyciu czcionek proporcjonalnych. Daje to miejsce na subtelne błędy, takie jak umieszczenie kursora w niewłaściwym miejscu, niepoprawne odświeżenie postaci i tym podobne.

Dlatego odkryłem, że nie było to dla mnie warte kłopotu.


Uwaga na temat wyrównania i innych układów: Ustawiłem Eclipse na automatyczne formatowanie każdego pliku przy każdym zapisie, więc wszystkie fantazyjne układy są automatycznie resetowane. Eclipse używa tabulatorów zamiast wielu spacji, które mogą być poprawnie ustawione nawet w przypadku czcionek proporcjonalnych. W związku z tym układy formatyzatora mogą się nakładać na siebie, ale używamy standardowej konfiguracji formatera, która tego nie ma.

Uważam, że wymuszenie automatycznego formatowania dla każdego przy każdym zapisie minimalizuje fałszywe alarmy w systemie kontroli źródła podczas analizy sądowej.


0

Nigdy, ponieważ czcionki Monospaced pozwalają mi porównywać różne atrybuty.

Porównać:

name1 = [„William”, „Shakespear”, 1564, „Peotry”]

name2 = [„John”, „Locke”, 1632, „Philosophy”]

name3 = [„Jonathan”, „Littell”, 1967, „Proza”]

Do:

name1=["William",  "Shakespear", 1564, "Peotry"     ]
name2=["John",     "Locke",      1632, "Philosophy" ]
name3=["Jonathan", "Littell",    1967, "Prose"      ]

Czcionki proporcjonalne po prostu nie mogą umieszczać równoważnych atrybutów dokładnie jeden nad drugim.


2
Chciałbym wiedzieć, w jakim środowisku jest to dla ciebie problem. Możesz używać kart z czcionkami proporcjonalnymi i o stałej szerokości, aby wyrównać je w kolumnach. Problem pojawia się wtedy, gdy używasz spacji zamiast tabulatorów.
temptar

2
@temptar: rozważ „iii12345”, „AAA12345” i „nnn12354” jeden nad drugim. Błąd („345”) jest znacznie łatwiejszy do wykrycia. nie można umieszczać tabulatorów pośrodku wartości.
Adam Matan

1
Karty @temptar nie są zalecane przez Python, a ich szerokość różni się w różnych edytorach, co może prowadzić do nieprawidłowego wyrównania kodu.
Adam Matan

2
@Adam Matan Właśnie dlatego nie powinieneś robić fantazyjnego formatowania.
August Karlstrom,

0

Chociaż wydaje mi się, że czcionki proporcjonalne są ładniejsze, w niektórych z nich, zwłaszcza czcionek bezszeryfowych, nie można dostrzec różnicy między „I” a „l”. Zaraz, jak nazwałam tę zmienną ponownie?


2
Verdana ma serifs na I dla łatwiejszego różnicowania.
Calmarius

1
0 i O to kolejny poważny problem. Również „vs” i. a także. Czasami & i $ stanowią problem (niepokojące w perlu / php) Jednak Verdana jest dobra na większość z powyższych, chociaż nie jest świetna na zero. Niestety, przy istniejących projektach z zakładkami zmieszanymi ze złymi przestrzeniami zwykle rezygnuję i używam konsoli Lucida. Jeśli jednak pytasz o nazwy zmiennych, nie używasz nowoczesnego uzupełniania kodu ani przynajmniej kopiuj / wklej tak, jak powinieneś.
zanlok

Jedną proporcjonalną czcionką, którą znam, która ma jednoznaczną wartość 0Oo1lLiI, jest „Latin Modern Mono Prop” TeXa, proporcjonalnie rozłożony krewny „Latin Modern Mono”, który został absolutnie zaprojektowany dla kodu (jednak w przypadku drukowania nie ekranu, renderowanie jest nieco rozmyte) . Interpunkcja jest nadal problemem, ma zbyt mało odstępów, aby mogła mieć znaczenie w kodzie IMHO, i tworzy ambicje, np. Dwa pojedyncze cudzysłowy vs jeden podwójny cudzysłów: „vs”,'' vs "
Beni Cherniavsky-Paskin
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.