Alguém prefere fontes proporcionais? [fechadas]

51

Eu estava lendo o artigo da wikipedia sobre estilo de programação e notei algo em um argumento contra código alinhado verticalmente:

Confiança na fonte mono-espaçada; A formatação tabular assume que o editor usa uma fonte de largura fixa. A maioria dos editores de código modernos oferece suporte a fontes proporcionais, e o programador pode preferir usar uma fonte proporcional para facilitar a leitura .

Para ser sincero, acho que nunca conheci um programador que preferisse uma fonte proporcional. Nem consigo pensar em boas razões para usá-las. Por que alguém prefere uma fonte proporcional?

Jason Baker
fonte
11
Gosto de fontes proporcionais para leitura, mas uso estritamente fontes monoespaçadas para código. Sempre, sempre, sempre.
precisa saber é o seguinte
12
Para citar também a Wikipedia: [citation needed]:)
dr Hannibal Lecter
7
Muitos anos atrás, um professor que eu tinha na faculdade meio brincando disse "... porque não é programação, a menos que seja correio novo".
Steven Evers
12
Minha razão para usar uma fonte proporcional é muito simples. Não é mais a década de 1980. Passamos dos terminais de personagens. Jornais, livros e sites geralmente não usam fontes monoespaçadas por razões de legibilidade. Eu acho que eles têm razão.
Timwi
4
Verdana 11px é ótimo.
Czarek Tomczak

Respostas:

47

Pontos comuns contra fontes proporcionais, comentou.

  • Você não pode alinhar o código com precisão verticalmente às fontes proporcionais. Quero dizer, você poderia alinhar com precisão o código verticalmente com fontes proporcionais, se todo mundo estivesse usando tabstops elásticos , mas, infelizmente ...
  • Algumas fontes proporcionais dificultam a distinção de alguns grupos de caracteres. (por exemplo, mrnm). Porém, nem todas as fontes de programação são perfeitas: Courier New tem idênticos 'O' e '0' e idênticos '1' e 'l'.
  • Alguns IDEs têm pouco suporte para fontes de largura não fixa (como o Visual Studio mencionado anteriormente ou o IDLE do Python). Em alguns contextos, também, você simplesmente não pode usar um. (por exemplo, terminais.)
  • A escolha de uma fonte proporcional para codificação o levará a inúmeras guerras sagradas. Aqui, no entanto, o problema existe entre o teclado e a cadeira.

Pontos a favor de fontes proporcionais

Pessoalmente, eu tenho usado tanto a fonte 'Ubuntu' quanto o WenQuanYi Zen Hei Mono com prazer e me vejo incapaz de preferir uma à outra. :)

Ubuntu
WenQuanYi Zen Hei Mono
Ubuntu 10 e WenQuanYi Zen Hei Mono 9, comparados. Não há vencedor claro aqui, se você me perguntar.

Dito isto, as fontes são como comida. Alguns como eles são bem arredondados, outros como quentes e picantes - não há uma fonte certa, ou todos nós a estaríamos usando agora. Yay para a escolha!

badp
fonte
Não sabia que a fonte do Ubuntu havia sido lançada. Eu acho que funciona bem lá.
Alan Pearce
+1 por me mostrar o WenQuanYi Zen Hei Mono, essa fonte é incrível. Eu quase certamente vou usá-lo na minha tese. Depende de quão bem parece impressa - na tela parece incrível e não ocupa muito espaço horizontal, o que é muito importante na impressão.
Konrad Rudolph
9
Realmente, há apenas um grande ponto contra o proporcional: você não pode realmente se alinhar porque ninguém se importa com tabstops elásticos. O que é totalmente estranho, considerando como isso beneficia tanto os obstinados monoespaçados quanto aqueles que realmente preferem ler fontes bonitas de largura variável. Vamos, mundo! Tabstops elásticos!
Roman Starkov
7
@romkyns: adote um estilo de recuo que não dependa de alinhamento com outras linhas. Simples.
Zan Lynx
4
@ZanLynx Gostei, porque gosto mais de fontes proporcionais do que de alinhamento vertical em outros lugares que não o início da linha.
Roman Starkov
29

Há uma razão que torna praticamente impossível o uso de fontes diferentes da monoespaçada para codificação, mas não foi mencionado em outras respostas: seleções retangulares .

Esse recurso, geralmente pouco útil e pouco conhecido ao trabalhar com texto comum, é essencial para os desenvolvedores. Você pode imaginar vários cenários: remover //comentários em várias linhas, adicionar parênteses ou outros caracteres etc. Isso é ainda mais valioso com o suporte avançado a seleções retangulares, como no Visual Studio 2010, onde você não pode apenas selecionar e remover texto, mas selecione e substitua-o.

Vamos dar um exemplo:

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

Neste código legado, desejo substituir a classificação no código por um método que carregará minha classificação nos próprios sites do Stack Exchange, podendo sempre ter dados atualizados. Comecei a refatorar a MyReputationpropriedade e agora quero remover a inicialização no escopo. Imagine que eu não tenho quatro, mas todos os sites da 84 SE.

Aqui está o que acontece ao usar o Consolas , uma fonte monoespaçada. Pressiono Backspace, e é tudo, posso gastar o tempo restante para fazer algo realmente útil.

A imagem mostra que, com o Consolas, o retângulo seleciona a propriedade da reputação.

E aqui a mesma coisa com Segoe UI . Ai!

A imagem mostra que, com a interface do usuário do Segoe, algumas propriedades de reputação são selecionadas apenas parcialmente, enquanto em outras linhas, o início da propriedade de classificação é selecionado.

Arseni Mourzenko
fonte
9
Isso aconteceu porque você usou o espaçamento correspondente à fonte do monspace. Se você tivesse um espaçamento adequado com a fonte proporcional, não teria esse problema.
Cós
6
@ Kos: então, em vez de pressionar, digamos, três guias, você pressionaria quinze vezes a tecla espaço, do que perceber que digitou demais e remover o último espaço? Parece um pouco complicado, você não acha?
Arseni Mourzenko
6
O Eclipse realmente suporta o uso de uma fonte diferente para o modo de seleção retangular, o que torna isso menos problemático.
Nicholas
8
@Kos RE: "espaçamento adequado com a fonte proporcional": Mas se um programador diferente usar uma fonte diferente no mesmo arquivo, ele não ficará alinhado. Se todos os editores usarem fontes monoespaçadas, elas sempre serão alinhadas (supondo que o código não abuse das guias para alinhamento).
precisa saber é o seguinte
5
Estou usando uma fonte proporcional por 2 anos sem tabstops elásticos. Não uso seleções retangulares porque há algo mais que a substitui completamente na maioria dos IDEs: seleção com vários caracteres. Neste exemplo, eu selecionaria "MyReputation =" e pressione Selecionar próxima ocorrência usando CTRL-DSublimeText e VSCode, ALT-Jnos editores IntelliJ / JetBrains. Em seguida, SHIFT-CTRL-RIGHT ARROWpara expandir a seleção para o próximo token à direita e pronto. A principal vantagem é que ninguém precisa alinhar as coisas para editar. Desvantagem, se você tiver algo alinhado, não será mais.
Hay
15

Eu costumava usar uma fonte proporcional, principalmente porque acho que a pontuação é realmente mais fácil de diferenciar, mas com o tempo desisti porque ninguém mais faz isso e todo mundo inconscientemente assume fontes mono espaçadas (como o artigo da wikipedia menciona, tentando fazer tabular formatação, arte ascii nos comentários e assim por diante).

Além disso, os problemas no Visual Studio , que a Microsoft não deseja corrigir, basicamente tornam impossível o uso de fontes proporcionais bem projetadas.

Dean Harding
fonte
9
Ame sua mini-batalha de comentários com a Microsoft sobre esse bug. E a resposta animada deles, que é basicamente "Oi! Obrigada! Prazer em conhecê-lo! Não vamos fazer nada. OK, obrigado, adorável em conversar com você!" Imaginem se as pessoas agiam assim na vida real ...
Danio
2
Você recebe um voto positivo de simpatia, pois, embora eu não use uma fonte de largura proporcional por alguns dos motivos citados, meu tipógrafo interno anseia constantemente pelo suporte adequado do editor, tanto no design quanto na programação.
Jon Purdy
Estranho, eu estava pensando que a pontuação é realmente mais difícil de diferenciar (particularmente pontos finais) porque ocupa menos espaço. Também me lembro que o Notepad ++ usou o Comic Sans MS nos comentários por um longo tempo.
DisgruntledGoat
6
Se você achar que a pontuação é difícil de identificar em uma fonte monoespaçada, existem outras fontes monoespaçadas - isso não significa que você precise usar uma fonte proporcional.
Ninguém
Exatamente para uma melhor pontuação, eu às vezes uso EnvyCode A ou B .
Zanlok
9

Pessoalmente, eu não ligo. Contanto que você mantenha minhas guias alinhadas e a fonte legível, eu não me importaria menos se utilizasse espaçamento monoespaço, proporcional ou outro espaçamento fora da parede. Só não comece a substituir minhas abas por espaços, e você não terá nenhuma briga comigo.

Aeo
fonte
3
Eu concordo plenamente. E com guias (em oposição a espaços codificados), você pode alternar entre fontes monoespaçadas e proporcionais e ajustar a largura da guia de acordo. O que ainda tenho que ver, no entanto, é um editor no qual você pode definir a largura da guia em unidades de EMs.
August Karlstrom 08/09/12
6

Eu uso uma fonte proporcional (Arial é a melhor que encontrei até agora, Verdana é a segunda colocada) e, sinceramente, ainda estou confuso que as pessoas usem fontes de largura fixa; por que você gostaria de sacrificar a legibilidade assim? Eu poderia entender se a formatação tabular era desejável, mas não é, pois cria um pesadelo de manutenção, independentemente da fonte.

rwallace
fonte
4
Estou surpreso que você goste de Arial e Verdana. Acho-os um pouco ásperos e pouco profissionais. Já experimentou o Calibri?
Timwi
2
Estou usando o 8pt Verdana. Nomes longos de identificadores são mais fáceis de ler. Eu posso ver 70 linhas de código sem rolar e as linhas são muito mais curtas; portanto, o código é uma coluna estreita, como em um jornal. Isso me permite dividir a visualização do editor em duas colunas verticais: visualizo a declaração em uma visualização e escrevo código em outra. Além disso, durante a depuração, a tela está cheia de janelas de depuração, a visualização do código se encaixa no espaço pequeno. Usar fontes proporcionais é remover o desejo de alinhar verticalmente as coisas e colocar caixas ascii de asteriscos nos comentários.
Calmarius
2
Vejo 147 linhas de código no Visual Studio em um monitor 1920x1200 girado 90 ° para o modo retrato, usando a fonte do Lucida Console.
Zanlok 1/11
158 linhas com a fonte Monaco no Vim ... Minha tela não é nem HD
Mark K Cowan
4

Lembro-me que no livro de Bjarne Stroustrup, The C ++ Programming Language , fontes espaçadas de forma pró-ativa foram usadas como código. (Não consigo encontrar páginas de amostra na web)

Não me lembro das razões exatas, mas acho que ele mencionou essa e outra mudança (acho que a própria linguagem C ++) como uma nova introdução nesse livro.

Pessoalmente, prefiro os de espaço fixo. Consolas é o meu favorito.

Nivas
fonte
11
Verificando a página 5 da minha Edição especial: as fontes proporcionais são geralmente consideradas melhores para o texto, usá-las permite menos quebras de linha ilógicas e a maioria das pessoas se acostuma. Acho fácil de ler. Stroustrup está apresentando o código aqui, não tentando criá-lo, e isso pode tornar as coisas diferentes.
David Thornley
4
@ David, sim, ele está apresentando código. Mas, é apresentado para "leitura" e a própria questão de fixo versus proporcional é para "ler" o código, IMHO.
Nivas
4

Para idiomas com linhas curtas e muito espaço aberto, prefiro fontes monoespaçadas. Acho que as fontes de largura variável podem melhorar a legibilidade quando você tem linhas longas e sintaxe densa.

O problema com a maioria das fontes proporcionais é que elas não foram projetadas para programação. Esta página mostra algumas fontes que foram.

Aparar fonte

user287424
fonte
4
link morto para o Google Code :(
Florian Castellane
2

Os ambientes smalltalk, como o Pharo, usam fontes proporcionais e, devido ao estilo do idioma, parecem muito bons lá. Mas em linguagens de estilo C como Go ou outras como Erlang ou Python, prefiro fontes monoespaçadas.

themue
fonte
2

Passei algum tempo encontrando uma fonte boa e legível para o Eclipse há algum tempo, e no XP usei Verdana por algum tempo. Consolas decidiu isso porque é realmente excelente para a programação.

Estas são as minhas descobertas:

  • A maioria das fontes proporcionais são projetadas para prosa e apenas pouca pontuação (que, por sua vez, geralmente é de um ou raramente dois caracteres). A família de idiomas C tem muita pontuação, o que simplesmente - na minha opinião - não parece bom e é mais difícil de ler do que o necessário.
  • Caracteres de comprimento variável significam que o comprimento das linhas varia. Isso torna quase impossível adivinhar onde o cursor terminará ao navegar usando os botões de seta. Eu achei isso irritante.
  • O espaçamento vertical também é importante. Normalmente, isso não é algo que possa ser substituído facilmente, e a maioria das fontes proporcionais tem menos espaço entre as linhas do que eu gostaria.
  • Muito poucos IDE são testados com fontes proporcionais. Isso abre espaço para erros sutis, como colocar o cursor no local errado, repintar caracteres incorretamente e coisas do gênero.

Por isso, descobri que não valia a pena o trabalho para mim.


Nota sobre o alinhamento e outros layouts: configurei o Eclipse para formatar automaticamente cada arquivo a cada salvamento, para que todos os layouts sofisticados sejam redefinidos automaticamente. O Eclipse usa guias em vez de vários espaços e eles podem ser posicionados corretamente, mesmo com fontes proporcionais. Portanto, os layouts do formatador podem se sobrepor, mas usamos a configuração padrão do formatador que não possui isso.

Acredito que a aplicação da formatação automática para todos os salvos minimiza os falsos positivos no sistema de controle de origem, ao fazer análises forenses.


fonte
0

Nunca, porque as fontes monoespaçadas me permitem comparar diferentes atributos.

Comparar:

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

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

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

Para:

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

As fontes proporcionais simplesmente não podem colocar atributos equivalentes exatamente um acima do outro.

Adam Matan
fonte
2
Estou interessado em saber em que ambiente isso é um problema para você. Você pode usar guias com fontes de largura proporcional e fixa para alinhá-las em colunas. Onde o problema surge é se você usar espaços em vez de guias.
temptar
2
@temptar: considere "iii12345", "AAA12345" e "nnn12354" um acima do outro. O erro ("345") é muito mais fácil de detectar. você não pode colocar guias no meio de um valor.
Adam Matan
11
As guias @temptar não são recomendadas pelo Python, e sua largura varia em diferentes editores, o que pode levar a códigos desalinhados.
Adam Matan
2
@ Adam Matan É exatamente por isso que você não deve fazer uma formatação sofisticada.
August Karlstrom 08/09/12
0

Embora eu sinta que as fontes proporcionais são mais bonitas, em algumas delas, especialmente as fontes sem serifa, é impossível ver a diferença entre um "eu" e um "l". Espere, como nomeei essa variável novamente?

Billjk
fonte
2
Verdana usa serifas para facilitar a diferenciação.
Calmarius
11
0 e O é outro grande problema. Também 'vs `e. vs também. Às vezes, & e $ são um problema (preocupante em perl / php). No entanto, Verdana é bom para a maioria dos itens acima, embora não seja ótimo em 0s. Infelizmente, em projetos existentes com abas misturadas com espaços ruins, geralmente desisto e uso o Lucida Console. Se você está perguntando sobre nomes de variáveis, no entanto, não está usando a conclusão de código moderna ou, pelo menos, copia / cola como deveria.
fácil
Uma fonte proporcional que eu sei que tem 0Oo1lLiI inequívoca é o "Latin Modern Mono Prop" da TeX, um parente proporcionalmente espaçado de "Latin Modern Mono" que foi absolutamente projetado para código (para impressão, não para a tela, porém, acho a renderização um pouco embaçada) . Pontuação ainda é um problema, tem muito pouco espaço para a sua importância na IMHO código, e cria ambiguties por exemplo, duas aspas simples contra um aspas: '' vs",'' vs "
Beni Cherniavsky-Paskin