La verbosité étant une tendance à utiliser de grandes quantités de texte, et la concision à utiliser très peu de texte ...
La verbosité est mauvaise parce que:
- il introduit plus de possibilité d'erreur typographique
- cela rend plus difficile la lecture du code à l'écran ou sur papier, et / ou la saisie sur une carte perforée
- cela augmente les temps de débogage
- cela complique la compréhension du code pour la mise à niveau / la maintenance
- cela peut conduire à une duplication involontaire de code
- cela augmente quelque peu la probabilité d'erreur de syntaxe
- cela diminue la flexibilité de codage, en ce sens que la plupart des langages verbeux sont très structurés et n'ont pas plusieurs façons de dire la même chose.
- il augmente les temps de codage et de compilation
- cela peut prendre plus d'espace de stockage.
Un certain niveau de verbosité est essentiel pour la clarté, cependant ...
un niveau minimal de verbosité est bon pour les raisons suivantes:
- il est plus facile pour l'homme de lire et d'attacher une valeur sémantique à un code purement symbolique
- En nommant les variables et les fonctions, cela facilite le débogage, le portage et la maintenance du code
- dans les opérations de langage de niveau de base et les mots-clés de langages complexes, il en résulte moins d'attributions d'opérations / mots-clés incorrects.
Parmi les merveilleux exemples de commandes trop laconiques pour de nombreuses personnes, on peut citer les anciennes bases BASIC de val(x$)
, str$(x)
et chr$(x)
... renvoyer un nombre à partir de sa représentation sous forme de chaîne, renvoyer une chaîne pour un nombre et renvoyer un seul caractère ayant la valeur ascii x en tant que chaîne.
Ou le pointeur C / C ++ et par les opérateurs de référence &
et *
par rapport au byref
mot clé BASIC . En C / C ++, je peux avoir une variable X et passer un pointeur sur cette variable, mais je dois me rappeler quel est le pointeur et quel est le "pointeur d'utilisation comme variable à laquelle il pointe"; en basic, je passe simplement la référence avec un mot clé byref dans l'appel de fonction, ce qui est plus clair, mais moins flexible:
def fn Foo(x byref as float) foo= (x += x+1)
...
Foo(x)
Dans ce code, le contenu de x est modifié en raison de l'indicateur byref. Certaines saveurs autorisent les appels externes à l'appel, d'autres dans leur définition, d'autres dans l'un ou l'autre.
La verbosité est importante pour que les programmeurs occasionnels puissent utiliser le symbolisme plus facilement. BASIC ou python sont plus lisibles par l'homme et plus verbeux que le C / C ++, et sont donc beaucoup plus utiles pour les programmeurs occasionnels; la rareté de C / C ++ le rend bien meilleur pour les programmeurs plus expérimentés, qui ont besoin de voir plus de code et de code plus complexe en même temps, mais qui ont dû apprendre les différentes conventions de structure symbolique. À l'autre extrémité se trouve APL, qui est presque illisible pour l'homme.
La clarté est un problème intimement lié: le code abrégé manque souvent de clarté et le code trop détaillé (comme dans AppleScript) peut l'être également. La familiarité avec un langage donné augmente la clarté du code laconique au sein de ce langage - un débutant, confronté au code C ++, ne sera probablement capable d’analyser que les formules, et même une grande partie du code fonctionnel BASIC ou Python est trop concise pour la compréhension, mais l’apple être perplexe, généralement, sans avoir recours aux dictionnaires de langue. Le moins clair que j'ai rencontré sans obscurcissement intentionnel est Inform 7 ...
Dans les temps anciens
Une autre considération importante dans le passé, mais qui n’est plus aussi importante pour le codeur amateur, est l’utilisation et l’espace de stockage. (Il est toujours essentiel au haut de gamme.) Gardant à l’esprit que de nombreuses langues ont été interprétées, en particulier les versions BASIC, et beaucoup d’autres compilées au moment de l’exécution, l’espace codé était important, en particulier lorsque les disques ne contenaient que 128 Ko, et les cartes perforées individuelles, 80B.
Plusieurs solutions existaient - la tokenization était extrêmement courante dans BASIC; les mots-clés de chaque langue ont été réduits à un mot de 1 ou 2 octets dans les 128 caractères supérieurs ou dans l'espace des caractères de contrôle. La tokénisation conduit également à la compilation de codes temporels (comme dans Inform et Z-Machine).
La compilation et la liaison de plusieurs objets ont également été utilisées pour contourner les limitations d’espace. Une section de code Pascal de 100 Ko pourrait être compilée avec seulement 5 Ko; en liant plusieurs fichiers compilés, il est possible de créer des applications volumineuses sans avoir accès à des disques de grand format (en se rappelant que 10 Mo est incroyablement volumineux et acheter une nouvelle voiture chère).
Cependant, des langages plus complexes ont introduit plus de code dans un bloc donné de disque et de bélier, et ont ainsi compilé de plus gros morceaux à la fois. Il ne faut pas oublier que les "mini-ordinateurs" du début des années 1970 n’avaient que 64 Ko de mémoire vive (le Honeywell 800 disposait d’une installation de base de 4 banques de 2048 mots de 8B chacune). APL et les langages symboliques similaires ont approché 1B par instruction plus ses opérandes, par rapport au beaucoup plus grand 3B-10B par instruction plus des opérandes. (C'était un cauchemar de taper sur des cartes perforées, d'autant plus que les symboles étaient essentiellement une police de caractères sur une boule de frappe, et que beaucoup de cardpunches n'avaient pas les symboles sur les touches ...)
De plus, n'oubliez pas que les cartes ne peuvent pas être effacées ... et de nombreux programmes ont été entrés sur des cartes. Bien que cela ne coûte pas cher individuellement, plus votre code peut être compressé sur la carte, moins vous en avez besoin, plus les programmes sont volumineux ou moins coûteux. Cela explique en partie le fait que BASIC concatène plusieurs instructions par ligne dans la plupart des versions - il a été introduit pour économiser sur les cartes perforées. (Ou bien, dit mon texte de programmation Vax Basic.) Bien que je n’ai pas programmé de lecteur de carte, j’ai perforé une carte pour un Honeywell 800 en FORTRAN, BASIC, APL et quelques autres langages hautement symboliques.