it-swarm.it

Qualcuno preferisce i caratteri proporzionali?

Stavo leggendo 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 degli editor di codice moderni supporta caratteri proporzionali e il programmatore può 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 dei buoni motivi per usarli. Perché qualcuno dovrebbe preferire un carattere proporzionale?

53
Jason Baker

Punti comuni contro caratteri proporzionali, commentati.

  • Non è possibile allineare con precisione il codice verticalmente con caratteri proporzionali. Voglio dire, tu Potresti allineare esattamente il codice verticalmente con caratteri proporzionali, se tutti stessero usando tabstops elastici , ma purtroppo ...
  • Alcuni caratteri proporzionali rendono difficile distinguere alcuni gruppi di caratteri. (ad 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 scarso supporto per i caratteri di larghezza non fissa (come sopra menzionato Visual Studio o Python's IDLE). 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 dei caratteri proporzionali

Personalmente, ho usato entrambi il carattere 'Ubuntu' e WenQuanYi Zen Hei Mono con piacere 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'è un 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!

47
badp

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, aggiunta di parentesi o altri caratteri, ecc. Ciò è ancora più prezioso con il supporto avanzato di selezioni rettangolari, come in Visual Studio 2010, in cui è possibile non solo selezionare e rimuovere il testo, ma selezionarlo e sostituirlo.

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 proprietà MyReputation 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 questo è tutto, posso passare il tempo rimanente a fare qualcosa di veramente utile.

The image shows that with Consolas, the rectangle selects reputation property.

Ed ecco la stessa cosa con Segoe UI . Ahia!

The image shows that with Segoe UI, some reputation properties are selected only partially, while on other lines, the beginning of rating property is selected.

30
Arseni Mourzenko

Usavo un carattere proporzionale, soprattutto perché trovo che la punteggiatura sia in realtà più facile da differenziare, ma col 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, problemi in Visual Studio , che Microsoft non vuole risolvere, fondamentalmente rende impossibile utilizzare caratteri proporzionali ben progettati.

15
Dean Harding

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.

9
Aeo

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.

6
rwallace

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.

Trim font

4
user287424

Ricordo nel libro di Bjarne Stroustrup Il linguaggio di programmazione C++ , i caratteri spaziati in modo propotiano venivano usati per il 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 nuove introduzioni in quello libro.

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

4
Nivas

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
themue

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 l'ha risolto perché è davvero 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 lotti di punteggiatura, che semplicemente non - a mio avviso - ha un bell'aspetto 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 utilizzando 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 elaborati vengono automaticamente ripristinati. Eclipse utilizza le schede anziché più spazi e questi possono essere posizionati correttamente anche con caratteri proporzionali. Quindi i layout del formatter possono si sovrappongono, 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 l'analisi forense.

2
user1249

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

Confronto:

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

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

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

A:

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.

0
Adam Matan

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

0
Billjk