J'ai vu quelques sujets sur les polices sur SO et il semble qu'une majorité de gens utilisent des polices monospaces pour des tâches de programmation. J'utilise Verdana pour la programmation depuis quelques années et j'aime vraiment la lisibilité améliorée, sans rien manquer de monospace.
Pourquoi utilisez-vous une police monospace?
Dans une police monospace:
Il 0O
Je n'ai même jamais envisagé de coder dans une police proportionnelle auparavant. Donc, dans l'intérêt de la science, je viens de changer mon éditeur pour l'essayer.
Voici quelques observations après avoir corrigé quelques tickets faciles:
!
Dans if (!foo)
. (si (! foo), voyez!){}[]()
vs {} [] ())$@%
Vs $ @%)'"!;:,.
Vs '"!;:,.)0Oo iIl
Vs 0Oo iIl)Il y a sont quelques points positifs, cependant. Certes, je ne l'utilise que depuis un petit moment, mais il y a certainement certains aspects qui fonctionnent un peu mieux avec les polices proportionnelles:
Je mettrai à jour cette réponse à nouveau demain (en supposant que je puisse passer une journée entière comme ça!)
J'aime aligner les conditionnelles liées, pour essayer de rendre plus évident qu'elles sont groupées. Par exemple:
if ((var1 == FOO) && ((var2 == BAR) ||
(var2 == FOOBAR)))
Les polices à largeur variable rendent cela plus difficile.
Une chose que je continue de voir ici est la discussion sur "aligner le code" et l'indentation. Je voudrais souligner les choses suivantes:
Donc, en rassemblant tout cela, si vous commencez chaque ligne au même endroit, et que l'espacement constant est de la même largeur, et que les identificateurs ne changent pas spontanément de largeur sur chaque ligne, alors votre code s'alignera! ... jusqu'à ce que quelque chose soit différent.
par exemple:
identifier.Method().Property.ToString();
identifier.Method().OtherGuy.ToString(); //how lined up and pretty!
identifier.Method().Sumthing.YouGetThePoint;
Le seul point que je concède est que les caractères non alphanumériques ne sont généralement pas très larges; ceux-ci incluent) (] [} {,: | "; ',`! et. Cela pourrait cependant être corrigé dans un éditeur de polices ... simplement en les élargissant. Ce n'est pas un problème inhérent à la non-monospace; il n'y a tout simplement pas il n'y a pas eu beaucoup de demande pour cela, et donc cela n'a pas encore été fait.
En résumé, les préférences personnelles sont bonnes, mais je pense qu'il n'y a pas de raison pratique de préférer le monospace au non-monospace. Vous aimez son apparence? Bien sûr, monospace. Vous voulez que plus de choses tiennent sur votre écran? Passez en mono. Mais la façon dont les gens traitent le non-espace comme l'hérésie est un peu exagérée.
Je suis devenu curieux par ce fil parce que de nombreux arguments pour les polices à espacement fixe peuvent vraiment être réfutés facilement avec quelques ajustements. J'ai donc changé mon IDE en Calibri (car il a un joli visage rond et est optimisé pour la lisibilité sur les écrans pour l'interface utilisateur - parfait). Maintenant, je dois évidemment utiliser des tabulations à la place des espaces pour l'indentation ( en ignorant tous les problèmes) et la largeur de 4 espaces ne suffit clairement pas, je suis donc passé à 10.
Ça a l'air bien maintenant. Cependant, il y a quelques problèmes évidents que j'ai pu repérer. D'autres pourraient apparaître plus tard, après avoir testé ces paramètres pendant un certain temps.
Les symboles ne s'alignent pas bien. Par exemple, considérons le code C # suivant:
var expr = x => x + 1;
La flèche (=>
) ressemble à une unité dans n'importe quelle police à espacement fixe. Il ressemble à deux caractères adjacents dans d'autres polices. Il en va de même pour les opérateurs comme >>
etc.
L'indentation contextuelle est complètement rompue: dans certains contextes, il ne suffit pas d'indenter un nombre fixe d'onglets. Prenez des expressions LINQ qui pourraient être mises en retrait de la manière suivante:
var r = from c in "This, apparently, is a test!"
where !char.IsPunctuation(c)
select char.ToUpper(c);
Vous ne pouvez tout simplement pas le faire avec une police proportionnelle.
Dans l'ensemble, les personnages sont trop étroits. Encore une fois, un espacement des lettres supplémentaire pourrait aider et c'est certainement nécessaire dans le cas de la ponctuation. Cependant, j'ai le sentiment que tous ces ajustements pour rendre les polices proportionnelles plus lisibles imiteraient naturellement les polices à espacement normal. C'est certainement vrai pour tous les points mentionnés jusqu'à présent.
J'utilise Comic Sans MS, qui semble assez raisonnable en tant que petites tailles de points (il ne commence à regarder "jokey" qu'aux tailles de titre). C'est facile pour les yeux, mais gardez toujours le texte suffisamment petit pour avoir une quantité raisonnable de code visible dans la fenêtre de texte, avec plusieurs panneaux ancrés de VS ouverts.
Vous pouvez désactiver le panneau Explorateur de solutions et disposer de 100 colonnes de texte lisibles sans défilement horizontal. De plus, je peux avoir le panneau DXCore Documentor (affichant les XMLDOC formatés) suffisamment ouvert pour lire tout en étant capable de voir suffisamment de texte pour documenter les XMLdocs.
Si vous travaillez en équipe, les polices mono-espacées garantissent que le code est clair et correctement mis en page pour tout le monde, quelle que soit la police mono-espacé qu'ils préfèrent utiliser.
Votre code peut vous sembler clair lorsque vous utilisez une police à largeur variable, mais il est peu probable qu'il ait la même apparence si un utilisateur de police à espacement mono l'ouvre.
Il suffit de quelques heures pour essayer de comprendre pourquoi une recherche ne trouve rien parce que vous avez 2 espaces au lieu de 1 dans votre littéral, pour vous rendre compte que vous devriez utiliser les polices Monospace. Cela m'est arrivé une fois lors de la tentative de correction d'un agent Lotus Notes, lorsque le concepteur n'utilisait pas de police monospace. Ce n'est que lorsque j'ai collé le code dans CodeWright pour l'imprimer qu'il était évident quel était le problème.
Les polices espacées facilitent beaucoup l'alignement du code.
Cela est particulièrement vrai lorsque vous travaillez avec une équipe; tout le monde dans l'équipe peut utiliser des polices différentes, et tant qu'ils sont tous à espacement fixe, tout s'alignera. De même, si une seule personne utilise de nombreux outils de développement différents, tout s'alignera s'ils sont tous à espacement fixe. S'ils n'étaient pas tous à espacement fixe, vous devez vous assurer qu'ils utilisent tous la même police, et si vous développez sur deux plates-formes, cela peut être difficile.
En fait, certains outils de développement ne prennent en charge que les polices à espacement fixe.
Une autre raison est que les polices à espacement fixe ont tendance à avoir des caractères plus distincts. Comparez lIiO0 à lIiO0
, et vous verrez ce que je veux dire. Ils facilitent également le comptage des espaces.
Je soupçonne que les polices à espacement fixe étaient la préférence d'un programmeur comme report des jours DOS basés sur du texte.
D'un autre côté, j'ai moi-même essayé Verdana et quelques autres polices proportionnelles recommandées, mais je n'ai pas pu faire face au changement. Mon œil est trop bien entraîné pour le monospace. Les langages chargés de symboles, comme: C/C++, C #, Perl, etc., me semblent trop différents. L'emplacement des symboles rend le code complètement différent.
De par la nature du code plutôt que du langage ordinaire, il est plus agréable de l'aligner correctement. De plus, dans l'édition de code, vous souhaitez parfois bloquer la sélection, bloquer la copie et bloquer la pâte. Dans Visual Studio, vous pouvez effectuer la sélection de bloc en utilisant la touche ALT tout en faisant votre sélection de souris. Cela peut être différent dans différents éditeurs, mais j'ai toujours trouvé cette option dans un éditeur très importante dans certains cas, et cela ne fonctionnerait pas très bien, sauf si vous utilisez une police à espacement mono.
Personnellement, je trouve les polices mono-espacées plus faciles à lire dans les éditeurs de code. Bien sûr, je suis presque aveugle. Cela pourrait faire une différence. J'exécute actuellement la police consolas à 15 points avec un fond sombre avec des lettres à contraste élevé.
L'utilisation d'espaces pour l'indentation serait un problème une fois que vous auriez atteint plus d'un niveau.
Principalement à des fins d'alignement (comme lorsque les déclarations de paramètres de fonction s'étendent sur plusieurs lignes et que vous souhaitez les aligner, ou aligner des commentaires, etc.).
Je pense, tout comme la question des caractères de tabulation, le facteur de complication est lorsque quelque chose est mis en retrait à des fins d'alignement, et que quelqu'un d'autre a des préférences différentes. Les choses sont mal alignées.