Une bonne documentation DOIT avoir:
- les types de données specs - souvent plus essentiel que les fonctions réelles. Ne PAS traiter à la légère.
- fonction spécifications (c'est évident). Y compris Ce que la fonction fait, pourquoi il le fait (pas si évident), et les mises en garde, le cas échéant.
- un document qui lie le tout en une entité logique, en expliquant les intentions, l'utilisation correcte des modèles et des idées au-delà de la portée effective de code de l'API. Normalement, vous êtes donné 50 fonctions différentes et vous ne savez pas qui doit être utilisé, ce qui ne doit pas être utilisé en dehors de cas particuliers, qui sont recommandés pour les plus obscures des solutions de rechange et pourquoi doivent-ils être utilisés de cette façon.
- des exemples. Parfois, ils sont plus importants que tout le reste
Je sais comment dessiner une forme arbitraire de l'arbitraire de la couleur dans GTK+. Je n'ai toujours aucune idée pourquoi un changement de couleur de tracé nécessite trois très longues lignes de très sombre, assez peu intuitive de lignes de code. Se souvenir de SVGAlib setcolorRGB(r,g,b); draw(x1,y1,x2,y2);
je trouve ça vraiment difficile de comprendre ce qui poussa les auteurs de GTK+ pour compliquer les choses à ce point. Peut-être que si ils ont expliqué les concepts sous-jacents au lieu de simplement documenter les fonctions qui les utilisent, je comprendrais...
Un autre exemple: hier, j'ai eu une réponse qui m'a permis de comprendre SQLite. J'ai compris une fonction d'extraction de données à partir d'une colonne renvoie signed long long
. J'ai compris les colonnes de type entier pourrait être 1,2,4,6 et 8 octets de long. J'ai compris que je peux définir une colonne "UNSIGNED INT8", ou "de type TINYINT". Je n'ai pas très bien ce que "affinité" voulait dire, je savais juste que les deux avaient des "INTEGER" affinité. J'ai passé des heures à chercher si les horodatages doit être ENTIER non signé ou INT8, si INT8 est de 8 chiffres ou 8 octets, et quel est le nom de cette ésotérique de 6 octets int?
Ce que j'ai remarqué, c'est que "UNSIGNED INT8", "TINYINT" et les autres sont tous un sucre syntaxique synonymes de type "ENTIER" (qui est toujours signed long long
), et les longueurs indiquées sont pour le stockage de disque interne seulement, sont ajustés automatiquement et de manière transparente pour l'adapter à toute valeur sur moins de bits et sont totalement invisibles et inaccessibles à partir de l'API de côté.