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.