Qualcuno preferisce i caratteri proporzionali? [chiuso]


51

Stavo leggendo l' articolo di Wikipedia sullo stile di programmazione e ho notato qualcosa in una discussione contro il codice allineato verticalmente:

Affidamento al carattere mono-spaziato; la formattazione tabulare presuppone che l'editor utilizzi un carattere a larghezza fissa. La maggior parte dei moderni editor di codice supporta caratteri proporzionali e il programmatore potrebbe preferire utilizzare un carattere proporzionale per la leggibilità .

Ad essere sincero, non credo di aver mai incontrato un programmatore che preferiva un carattere proporzionale. Né riesco a pensare a buoni motivi per usarli. Perché qualcuno dovrebbe preferire un carattere proporzionale?


11
Mi piacciono i caratteri proporzionali per la lettura, ma uso rigorosamente caratteri a spaziatura fissa per il codice. Sempre, sempre, sempre.
Frank Shearar,

12
Per citare anche Wikipedia: [citation needed]:)
dr Hannibal Lecter,

7
Molti anni fa, un professore che avevo al college diceva scherzosamente "... perché non è programmazione a meno che non sia un nuovo corriere".
Steven Evers,

12
La mia ragione per usare un font proporzionale è molto semplice. Non sono più gli anni '80. Siamo passati dai terminali dei personaggi. I giornali, i libri e i siti Web generalmente non usano i caratteri monospace per motivi di leggibilità. Penso che abbiano ragione.
Timwi,

4
Verdana 11px è eccezionale.
Czarek Tomczak,

Risposte:


47

Punti comuni contro caratteri proporzionali, commentati.

  • Non è possibile allineare con precisione il codice verticalmente con caratteri proporzionali. Voglio dire, si potrebbe codice proprio align verticalmente con font proporzionali, se tutti stava usando tabstops elastiche , ma ahimè ...
  • Alcuni caratteri proporzionali rendono difficile distinguere alcuni gruppi di caratteri. (es. mrnm). Tuttavia, non tutti i font di programmazione sono perfetti: Courier New ha identici 'O' e '0' e identici '1' e 'l'.
  • Alcuni IDE hanno uno scarso supporto per i caratteri a larghezza non fissa (come il già citato Visual Studio o l'IDLE di Python). In alcuni contesti, inoltre, non è possibile utilizzarne uno. (ad es. terminali.)
  • La scelta di un carattere proporzionale per la codifica ti porterà in infinite guerre sante. Qui, tuttavia, esiste il problema tra la tastiera e la sedia.

Punti a favore di caratteri proporzionali

Personalmente, ho usato con piacere sia il font 'Ubuntu' che WenQuanYi Zen Hei Mono e non riesco a preferire l'uno all'altro. :)

Ubuntu
WenQuanYi Zen Hei Mono
Ubuntu 10 e WenQuanYi Zen Hei Mono 9, a confronto. Non c'è nessun vincitore chiaro qui, se me lo chiedi.

Detto questo, i caratteri sono come il cibo. Alcuni come loro sono ben arrotondati, altri come quelli piccanti e piccanti - non esiste un carattere giusto, o tutti noi lo useremmo in questo momento. Yay per scelta!


Non mi ero reso conto che il carattere Ubuntu fosse stato rilasciato. Penso che funzioni bene lì.
Alan Pearce,

+1 per avermi mostrato WenQuanYi Zen Hei Mono, quel font è sorprendente. Quasi certamente lo userò nella mia tesi. Dipende da quanto appare stampato: sullo schermo sembra incredibile e non occupa molto spazio orizzontale, il che è molto importante nella stampa.
Konrad Rudolph,

9
Davvero, c'è solo un grosso punto in più rispetto al proporzionale: non puoi davvero allinearti perché a nessuno importa dei tablet elastici. Il che è assolutamente strano, dato che è vantaggioso sia per i monospace che per quelli che preferiscono leggere caratteri di larghezza variabile di bell'aspetto. Dai, mondo! Tabstop elastici!
Roman Starkov,

7
@romkyns: adotta uno stile di rientro che non si basa sull'allineamento con altre linee. Semplice.
Zan Lynx,

4
@ZanLynx L'ho fatto, perché mi piacciono i caratteri proporzionali più di quanto mi piaccia l'allineamento verticale in punti diversi dall'inizio della linea.
Roman Starkov,

29

C'è un motivo che rende praticamente impossibile usare caratteri diversi dal monospace per la codifica, ma non è stato menzionato in altre risposte: selezioni rettangolari .

Questa funzione, spesso non molto utile e poco conosciuta quando si lavora con il testo normale, è essenziale per gli sviluppatori. Puoi immaginare una moltitudine di scenari: rimuovere //commenti su più righe, aggiungere parentesi o altri caratteri, ecc. Ciò è ancora più prezioso con il supporto avanzato di selezioni rettangolari, come in Visual Studio 2010, in cui non puoi solo selezionare e rimuovere testo, ma selezionalo e sostituiscilo.

Facciamo un esempio:

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,
}

In questo codice legacy, voglio sostituire la valutazione in-code con un metodo che caricherà la mia valutazione dai siti Web Stack Exchange stessi, potendo avere sempre dati aggiornati. Ho iniziato a refactoring la MyReputationproprietà e ora voglio rimuovere l'inizializzazione, nell'ambito. Immagina di non avere quattro, ma tutti i siti Web 84 SE.

Ecco cosa succede quando si usa Consolas , un carattere monospace. Premo Backspace, e tutto qui, posso passare il tempo rimanente a fare qualcosa di veramente utile.

L'immagine mostra che con Console il rettangolo seleziona la proprietà reputazione.

E qui la stessa cosa con l' interfaccia utente di Segoe . Ahia!

L'immagine mostra che con l'interfaccia utente di Segoe, alcune proprietà di reputazione sono selezionate solo parzialmente, mentre su altre linee viene selezionata la proprietà di inizio della valutazione.


9
Ciò è accaduto perché hai utilizzato la spaziatura che corrispondeva al carattere monspace. Se avessi la spaziatura corretta con il carattere proporzionale, non avresti questo problema.
Kos,

6
@Kos: quindi invece di premere, diciamo, tre schede, premi quindici volte il tasto spazio, che noti che hai digitato troppo e che hai rimosso l'ultimo spazio? Sembra un po 'troppo complicato, non credi?
Arseni Mourzenko,

6
Eclipse in realtà supporta l'utilizzo di un font diverso per la modalità di selezione rettangolare, il che rende questo meno un problema.
Nicholas

8
@Kos RE: "spaziatura corretta w / r / t il font proporzionale": Ma se un programmatore diverso utilizza un font diverso sullo stesso file, non si allineerà. Se tutti gli editor utilizzano i caratteri monospace, si allinea sempre (supponendo che il codice non abusi delle schede per l'allineamento).
Max Nanasy,

5
Sto usando un carattere proporzionale per 2 anni senza tabs elastic. Non uso selezioni rettangolari perché c'è qualcos'altro che lo sostituisce completamente nella maggior parte degli IDE: selezione multi-caret. In questo esempio, selezionare "MyReputation =" quindi premere Seleziona occorrenza successiva utilizzando CTRL-Din SublimeText e VSCode, ALT-Jnegli editor IntelliJ / JetBrains. Successivamente, SHIFT-CTRL-RIGHT ARROWespande la selezione al token successivo a destra e il gioco è fatto. Il vantaggio principale è che nessuno ha bisogno di allineare le cose da modificare. Svantaggio, se hai qualcosa allineato, non lo sarà più.
Hay,

15

Usavo un carattere proporzionale, soprattutto perché trovo che la punteggiatura sia in realtà più facile da differenziare, ma nel tempo ho rinunciato perché nessun altro lo fa e tutti assumono inconsciamente caratteri mono spaziati (come menziona l'articolo di Wikipedia, cercando di fare tabellare formattazione, arte ascii nei commenti e così via).

Inoltre, i problemi di Visual Studio che Microsoft non vuole risolvere, fondamentalmente rendono impossibile utilizzare caratteri proporzionali ben progettati.


9
Adoro il tuo commento mini-battaglia con Microsoft su quel bug. E la loro risposta allegra che è fondamentalmente "Ciao! Grazie! Piacere di conoscerti! Non faremo nulla. OK, grazie adorabile per chattare con te!" Immagina se le persone si comportassero così nella vita reale ...
danio,

2
Ottieni un apprezzamento per la simpatia, dal momento che, sebbene non utilizzi un carattere di larghezza proporzionale per alcune delle ragioni stesse che citi, il mio tipografo interno desidera costantemente il supporto adeguato dell'editor, sia nella progettazione che nella programmazione.
Jon Purdy,

Strano, stavo solo pensando che la punteggiatura è in realtà più difficile da differenziare (in particolare i punti pieni) perché occupa meno spazio. Ricordo anche che Notepad ++ ha usato Comic Sans MS nei commenti per il tempo più lungo.
DisgruntledGoat

6
Se trovi la punteggiatura difficile da identificare in un font monospace, ci sono altri font monospace - ciò non significa che devi usare un font proporzionale.
Nessuno il

Proprio per meglio la punteggiatura, a volte uso EnvyCode A o B .
zanlok,

9

Personalmente non mi interessa. Fintanto che mantieni le mie schede allineate e il carattere leggibile, non mi può importare di meno se uso una spaziatura monospaziale, proporzionale o di altro tipo. Basta non iniziare a sostituire le mie schede con spazi e non avrai alcun litigio con me.


3
Sono completamente d'accordo. E con le schede (al contrario degli spazi codificati) è possibile alternare tra caratteri monospaziali e proporzionali e regolare la larghezza della scheda di conseguenza. Ciò che devo ancora vedere, tuttavia, è un editor in cui è possibile impostare la larghezza della scheda in unità di EM.
August Karlstrom,

6

Uso un font proporzionale (Arial è il migliore che ho trovato finora, Verdana un secondo classificato) e onestamente sono ancora confuso dal fatto che la gente usi font a larghezza fissa; perché vorresti sacrificare la leggibilità in quel modo? Potrei capire se la formattazione tabellare fosse desiderabile, ma non lo è, poiché crea un incubo di manutenzione indipendentemente dal carattere.


4
Sono sorpreso che ti piacciano Arial e Verdana. Li trovo un po 'agitati e poco professionali. Hai provato Calibri?
Timwi,

2
Sto usando 8pt Verdana. I nomi identificativi lunghi sono più facili da leggere. Posso visualizzare 70 righe di codice senza scorrere e le righe sono molto più brevi, quindi il codice è una colonna stretta, come in un giornale. Questo mi permette di dividere la vista dell'editor in due colonne verticali: visualizzo la dichiarazione in una vista e scrivo il codice in un'altra. Inoltre, durante il debug, lo schermo è pieno di finestre di debug, la vista del codice si adatta allo spazio ridotto. L'uso di caratteri proporzionali significa rimuovere il desiderio di allineare le cose verticalmente e mettere dei riquadri ascii di asterischi attorno ai commenti.
Calmarius,

2
Vedo 147 righe di codice in Visual Studio su un monitor 1920x1200 ruotato di 90 ° per una modalità verticale, usando il font Lucida Console.
zanlok,

158 righe con font Monaco in Vim ... Il mio schermo non è nemmeno HD
Mark K Cowan,

4

Ricordo che nel libro di Bjarne Stroustrup The C ++ Programming Language , i caratteri spaziati in modo propotiano venivano usati come codice. (Non riesco a trovare pagine di esempio sul Web)

Non ricordo i motivi esatti, ma penso che abbia menzionato questo e un altro cambiamento (penso il linguaggio C ++ stesso) come una nuova introduzione in quel libro.

Personalmente, preferisco quelli a spazio fisso. Consolas è il mio preferito.


1
Controllando la pagina 5 della mia edizione speciale: i caratteri proporzionali sono generalmente considerati migliori per il testo, usandoli consente meno interruzioni di riga illogiche e la maggior parte delle persone si abitua. Lo trovo facile da leggere. Stroustrup presenta qui il codice, non cerca di crearlo e ciò potrebbe rendere le cose diverse.
David Thornley,

4
@ David, sì, sta presentando il codice. Ma è presentato per la "lettura" e la vera questione del codice fisso vs proporzionale è per il codice "lettura", IMHO.
Nivas,

4

Per le lingue che hanno linee brevi e molto spazio aperto, preferisco i caratteri a spaziatura fissa. Trovo che i caratteri a larghezza variabile possano migliorare la leggibilità in presenza di righe lunghe e sintassi densa.

Il problema con la maggior parte dei caratteri proporzionali è che non sono stati progettati per la programmazione. Questa pagina mostra alcuni caratteri che erano.

Taglia carattere


4
link non funzionante a Google Code :(
Florian Castellane,

2

Gli ambienti Smalltalk come Pharo usano caratteri proporzionali e, grazie allo stile del linguaggio, ci stanno molto bene. Ma in linguaggi in stile C come Go o altri come Erlang o Python preferisco i caratteri a spaziatura fissa.


2

Ho trascorso un po 'di tempo a trovare un font ben leggibile per Eclipse qualche tempo fa e in XP ho usato Verdana per un bel po' di tempo. Consolas ha risolto questo perché è veramente eccezionale per la programmazione.

Questi sono i miei risultati:

  • La maggior parte dei caratteri proporzionali sono progettati per la prosa e solo una piccola punteggiatura (che a sua volta è di solito uno o raramente due caratteri). La famiglia di lingue C ha molti segni di punteggiatura, che a mio avviso semplicemente non sembrano buoni ed è più difficile da leggere del necessario.
  • I caratteri a lunghezza variabile indicano che la lunghezza delle linee varia. Ciò rende quasi impossibile indovinare dove finirà il cursore durante la navigazione usando i pulsanti freccia. Ho trovato questo fastidioso.
  • Anche la spaziatura verticale è importante. Questo di solito non è qualcosa che può essere facilmente ignorato e la maggior parte dei caratteri proporzionali ha meno spazio tra le linee di quanto vorrei.
  • Pochissimi IDE sono testati con caratteri proporzionali. Questo fa spazio a bug sottili come posizionare il cursore nella posizione sbagliata, ridipingere in modo errato caratteri e simili.

Quindi ho scoperto che non valeva la pena per me.


Nota sull'allineamento e altri layout: ho impostato Eclipse per formattare automaticamente ogni file ad ogni salvataggio, quindi tutti i layout di fantasia vengono ripristinati automaticamente. Eclipse utilizza le schede anziché più spazi e questi possono essere posizionati correttamente anche con caratteri proporzionali. Quindi i layout del formattatore possono essere uno sopra l'altro, ma usiamo la configurazione standard del formatter che non lo possiede.

Credo che l'applicazione della formattazione automatica per tutti su ogni salvataggio minimizzi i falsi positivi nel sistema di controllo del codice sorgente, quando si fa un'analisi forense.


0

Mai, mai, perché i caratteri a spaziatura fissa mi consentono di confrontare diversi attributi.

Confrontare:

name1 = ["William", "Shakespear", 1564, "Peotry"]

name2 = ["John", "Locke", 1632, "Filosofia"]

name3 = ["Jonathan", "Littell", 1967, "Prose"]

Per:

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

I caratteri proporzionali non possono posizionare attributi equivalenti esattamente uno sopra l'altro.


2
Sono interessato a sapere quale ambiente è un problema per te. È possibile utilizzare le schede con caratteri a larghezza sia proporzionale che fissa per allinearli in colonne. Il problema si presenta se si utilizzano spazi anziché schede.
temptar,

2
@temptar: considerare "iii12345", "AAA12345" e "nnn12354" uno sopra l'altro. L'errore ("345") è molto più facile da individuare. non puoi mettere le schede nel mezzo di un valore.
Adam Matan,

1
Le schede @temptar non sono consigliate da Python e la loro larghezza varia a seconda dei diversi editor, il che potrebbe portare a un codice disallineato.
Adam Matan,

2
@Adam Matan Questo è esattamente il motivo per cui non dovresti fare una formattazione elaborata.
August Karlstrom,

0

Sebbene ritenga che i caratteri proporzionali siano più carini, in alcuni di essi, in particolare i caratteri sans-serif, è impossibile vedere la differenza tra un "I" e un "l". Aspetta, come ho chiamato di nuovo quella variabile?


2
Verdana ha serif su I per una più facile differenziazione.
Calmarius,

1
0 e O è un altro grosso problema. Anche 'vs `e. anche contro. A volte & e $ sono un problema (preoccupante in perl / php) Tuttavia, Verdana è buono per la maggior parte di quanto sopra, anche se non eccezionale a 0s. Purtroppo, su progetti esistenti con schede mescolate a spazi malvagi, di solito mi arrendo e utilizzo Lucida Console. Se stai chiedendo informazioni sulla denominazione delle variabili, tuttavia, non stai utilizzando il completamento del codice moderno o almeno copia / incolla come dovresti.
zanlok,

Un font proporzionale che conosco che ha 0Oo1lLiI inequivocabile è "Latin Modern Mono Prop" di TeX, un parente spazialmente proporzionato di "Latin Modern Mono" che è stato assolutamente progettato per il codice (per la stampa non lo schermo, però, trovo il rendering un po 'sfocato) . La punteggiatura è ancora un problema, ha una spaziatura troppo piccola per la sua importanza nel codice IMHO e crea ambigui ad esempio due virgolette singole contro una virgoletta doppia: '' vs ",'' vs "
Beni Cherniavsky-Paskin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.