Je lisais article wikipedia sur le style de programmation et j'ai remarqué quelque chose dans un argument contre le code aligné verticalement:
Recours à une police mono-espacée; la mise en forme tabulaire suppose que l'éditeur utilise une police à largeur fixe. La plupart des éditeurs de code modernes prennent en charge les polices proportionnelles et le programmeur peut préférer utiliser une police proportionnelle pour plus de lisibilité .
Pour être honnête, je ne pense pas avoir rencontré de programmeur qui préfère une police proportionnelle. Je ne peux pas non plus penser à de très bonnes raisons de les utiliser. Pourquoi quelqu'un préférerait-il une police proportionnelle?
Points communs contre les polices proportionnelles, commentés.
Points en faveur des polices proportionnelles
m
dans le même espace d'un n
ou un i
rend vraiment difficile de concevoir un bien, police monospace lisible .rnW
et Ill
dans cette capture d'écran Proggy Clear pour un exemple d'espacement des polices mal fait.Personnellement, j'ai utilisé à la fois la police 'Ubuntu' et WenQuanYi Zen Hei Mono avec plaisir et je ne peux pas préférer l'un à l'autre. :)
Ubuntu 10 et WenQuanYi Zen Hei Mono 9, comparés. Il n'y a pas de gagnant clair ici, si vous me demandez.
Cela dit, les polices sont comme de la nourriture. Certains les aiment bien arrondis, certains les aiment chauds et épicés - il n'y a pas une seule bonne police, ou nous l'utiliserions tous en ce moment. Ouais pour le choix!
Il y a une raison qui rend pratiquement impossible l'utilisation de polices autres que monospace pour le codage, mais n'a pas été mentionnée dans d'autres réponses: sélections rectangulaires.
Cette fonctionnalité, souvent peu utile et peu connue lorsque l'on travaille avec du texte ordinaire, est essentielle pour les développeurs. Vous pouvez imaginer une multitude de scénarios: supprimer //
des commentaires sur plusieurs lignes, l'ajout de parenthèses ou d'autres caractères, etc.
Prenons un exemple:
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,
}
Dans ce code hérité, je veux remplacer la notation dans le code par une méthode qui chargera ma note à partir des sites Web Stack Exchange eux-mêmes, en ayant toujours la possibilité de disposer de données à jour. J'ai commencé à refactoriser la propriété MyReputation
, et maintenant je veux supprimer l'initialisation, dans la portée. Imaginez que je n'en ai pas quatre, mais les 84 sites Web SE.
Voici ce qui se passe lorsque vous utilisez Consolas , une police monospace. J'appuie sur Retour arrière, et c'est tout, je peux passer le temps restant à faire quelque chose de réellement utile.
Et voici la même chose avec Segoe UI . Aie!
J'avais l'habitude d'utiliser une police proportionnelle, principalement parce que je trouve que la ponctuation est en fait plus facile à différencier, mais au fil du temps j'ai abandonné parce que personne d'autre ne le fait et tout le monde suppose inconsciemment des polices mono espacées (comme le mentionne l'article de wikipedia, essayant de faire un tableau) mise en forme, art ascii dans les commentaires, etc.).
De plus, problèmes dans Visual Studio , que Microsoft ne veut pas résoudre, rend de toute façon impossible l'utilisation de polices proportionnelles bien conçues.
Personnellement, je m'en fiche. Tant que vous gardez mes onglets alignés et la police lisible, je m'en fiche que j'utilise un espacement monospace, proportionnel ou autre. Ne commencez simplement pas à remplacer mes onglets par des espaces, et vous ne vous querellerez pas avec moi.
J'utilise une police proportionnelle (Arial est la meilleure que j'ai trouvée jusqu'à présent, Verdana un finaliste proche) et honnêtement, je suis toujours perplexe que les gens utilisent des polices à largeur fixe; pourquoi voudriez-vous sacrifier la lisibilité comme ça? Je pouvais comprendre si la mise en forme tabulaire était souhaitable, mais ce n'est pas le cas, car cela crée un cauchemar de maintenance quelle que soit la police.
Pour les langues qui ont des lignes courtes et beaucoup d'espace ouvert, je préfère les polices à espacement fixe. Je trouve que les polices à largeur variable peuvent améliorer la lisibilité là où vous avez de longues lignes et une syntaxe dense.
Le problème avec la plupart des polices proportionnelles est qu'elles n'ont pas été conçues pour la programmation. Cette page montre quelques polices qui l'étaient.
Je me souviens dans le livre de Bjarne Stroustrup Le langage de programmation C++ , des polices espacées de manière propotienne ont été utilisées pour le code. (Je ne trouve aucun exemple de page sur le Web)
Je ne me souviens pas des raisons exactes, mais je pense qu'il a mentionné cela et un autre changement (je pense que le langage C++ lui-même) en tant que nouvelles introductions dans ce livre.
Personnellement, je préfère les espaces fixes. Consolas est mon préféré.
Les environnements Smalltalk comme Pharo utilisent des polices proportionnelles et en raison du style de langue, il semble très bien là-bas. Mais dans les langages de style C comme Go ou d'autres comme Erlang ou Python je préfère les polices à espacement fixe.
J'ai passé un certain temps à trouver une bonne police lisible pour Eclipse il y a quelque temps, et sous XP j'ai utilisé Verdana pendant un certain temps. Consolas l'a réglé car il est vraiment superbe pour la programmation.
Ce sont mes conclusions:
Par conséquent, j'ai trouvé que cela ne valait pas la peine pour moi.
Remarque sur l'alignement et les autres mises en page: J'ai configuré Eclipse pour formater automatiquement chaque fichier à chaque enregistrement, de sorte que toutes les mises en page fantaisie sont automatiquement réinitialisées. Eclipse utilise des tabulations au lieu de plusieurs espaces et ceux-ci peuvent être positionnés correctement même avec des polices proportionnelles. Par conséquent, les dispositions du formateur peut être superposées, mais nous utilisons la configuration standard du formateur qui n'a pas cela.
Je crois que l'application du formatage automatique pour tout le monde à chaque sauvegarde minimise les faux positifs dans le système de contrôle de source, lors de l'analyse médico-légale.
Jamais, jamais, car les polices espacées me permettent de comparer différents attributs.
Comparez:
name1 = ["William", "Shakespear", 1564, "Peotry"]
name2 = ["John", "Locke", 1632, "Philosophy"]
name3 = ["Jonathan", "Littell", 1967, "Prose"]
À:
name1=["William", "Shakespear", 1564, "Peotry" ]
name2=["John", "Locke", 1632, "Philosophy" ]
name3=["Jonathan", "Littell", 1967, "Prose" ]
Les polices proportionnelles ne peuvent tout simplement pas placer les attributs équivalents exactement les uns au-dessus des autres.
Bien que je pense que les polices proportionnelles sont plus jolies, dans certaines d'entre elles, en particulier les polices sans empattement, il est impossible de voir la différence entre un "I" et un "l". Attendez, comment ai-je de nouveau nommé cette variable?