ti-enxame.com

Alguém prefere fontes proporcionais?

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. Também não consigo pensar em boas razões para usá-las. Por que alguém prefere uma fonte proporcional?

53
Jason Baker

Pontos comuns em relação às fontes proporcionais, comentados.

  • 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 acima mencionado Visual Studio ou 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' e WenQuanYi Zen Hei Mono com prazer e me vejo incapaz de preferir um ao outro. :)

Ubuntu
WenQuanYi Zen Hei Mono
Ubuntu 10 e WenQuanYi Zen Hei Mono 9, comparados. Não há um 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!

47
badp

Existe uma razão que torna praticamente impossível o uso de fontes diferentes do monoespaço 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 uma infinidade de cenários: removendo // comenta várias linhas, adicionando parênteses ou outros caracteres etc. Isso é ainda mais valioso com o suporte avançado de seleções retangulares, como no Visual Studio 2010, onde você pode não apenas selecionar e remover o texto, mas também selecioná-lo e substituí-lo.

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 propriedade MyReputation 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 Consolas , uma fonte monoespaçada. Pressiono Backspace, e é tudo, posso gastar o tempo restante para fazer algo realmente útil.

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

E aqui a mesma coisa com Segoe UI . Ai!

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

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 com espaçamento mono (como o artigo da wikipedia menciona, tentando fazer tabular formatação, arte ascii nos comentários e assim por diante).

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

15
Dean Harding

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.

9
Aeo

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.

6
rwallace

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.

Trim font

4
user287424

Lembro-me no livro de Bjarne Stroustrup A linguagem de programação C++ , fontes espaçadas de forma proporcional foram usadas para o código. (Não consigo encontrar nenhuma página 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 novas introduções livro.

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

4
Nivas

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).

2
themue

Passei algum tempo encontrando uma fonte boa e legível para o Eclipse há algum tempo, e em XP usei Verdana por algum tempo. Consolas estabeleceu 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 possui lotes de 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 sobrepõem, 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.

2
user1249

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.

0
Adam Matan

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?

0
Billjk