Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

COMMENTAIRES SANS DOULEUR


Information sur le tutorial

Catégorie :Optimisation du code Date de création : 25/09/2006 19:22:53 Vu : 7 700 fois

Note :
5,5 / 10 - par 2 personnes
5,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

Description

Résumé de toute mon expérience dans les commentaires: ne rien oublier d'essentiel.

Tutorial

" Les débutants ne commentent rien;
les novices commentent l'évident;
les initiés commentent la raison du code;
les gurus commentent la raison du code non utilisé."
Richard C Haven

Il y a plusieurs niveaux de commentaires. Je vais illustrer ici ceux que j'utilise basé sur mon expérience de programmeur commercial.

LE PROGRAMME

Ces commentaires sont ceux contenus dans les propriétés du projet. Ne pas les négliger dès que votre programme a des chances de se retrouver sur quelque réseau de distribution car c'est votre carte de visite.
Ils sont visibles dans le dialogue "Properties" quand vous cliquez avec le bouton droit sur votre application et devraient ètre lisible dans votre dialogue "About"

Dans l'ordre:

Comments: mettez ce qui ne va dans aucune autre section et qui pourrait servir dans votre dialogue "About".
Company name: Inventez-en une  (Barn Cat Software, Three Bits Cie...) Mème humoristique, ça fait plus sérieux.
File Description: que fait votre application en language simple.
Legal copyright: soit "Copylefted 2006"(tout le monde copie) soit "Copyright © 2006 <MaCompagnie>. All rights reserved."
Certaines personnes mettent ici toute sortes d'avertissements à propos d'avocats et de poursutes...les gars, soyons sérieux.
Legal trademark: <MonApplication>© est la propriété exclusive de <MaCompagnie>©. Toute autres marques de commerce sont la propriété de leurs propriétaires respectifs. (Le © est obtenu en tapant ALT 000169)
Product name: <MonApplication>©

MODULE, CLASSE, FORME, USERCONTROL

Le haut de chacun de ceux-ci devrait avoir un bloc de type
'=====================================================================================
' <MonProgramme>
' frmTips va montrer un commentaire aléatoire lors de son ouverture.
'
' Copyright © 2006 <MaCompagnie>. All rights reserved.
'=====================================================================================


FONCTIONS ET SUBS

Les fonctions et les subs devraient toutes avoir un bloc de commentaire qui permettent à un non-initié de savoir ce que fait cette fonction et sous quelles conditions, les paramètres à passer  avec certaines valeurs limites et les valeurs de retour.

Une bloc example dont je me sert:
'=====================================================================================
' Appele la routine "Decrypt", changera l'extension de "dmE" (encrypté)
'   à "dmS" (décrypté)
'
' Parameters
'   strFilename     : nom de document existant à décrypter [IN][OUT]
'   nKey            : integer variant de 1 à 9  [IN] Zéro non valide.
'
' Return
'   Boolean         : TRUE si décrypté, FALSE autrement
'                   Un document de longueur zéro causera une erreur fatale de
'                 décryption.
'=====================================================================================


Vous noterez l'usage de [IN] pour les ByVal et de [IN][OUT] pour les ByRef, ByRef étant utilisé à la fois pour recevoir un argument et pour passer une valeur vers la foncton appelante.

Ce cas simple peut sembler puéril mais voyons celui-ci:
'=====================================================================================
' Crée une archive de type Zip dans le dossier cible.
' Ces archives doivent ètre de vrai documents et non des raccourcis.
' Ces archives doivent être en un seul endroit.
' L'utilisateur doit ête admin de la machine source.
' Les noms de dossiers doivent ètre unique à chaque niveau.
' Caractêres illégaux: _ . , (accentués)
' Cette routine prends 2 sec par Megs de données.
'
' Parameters
'   strRoot         : path du root d'archive; peut être en réseau [IN][OUT]
'   blnFlags       : /PIC ;/DOC ;/XML; /OTH    [IN] La présence d'un flag indique VRAI
'
' Return
'   long         : err_NOERROR si succès, sinon err_<cause d'erreur>
'            : Vor liste de constantes
'=====================================================================================


Pour résumer:
'===============================================================
' Action: une seule est nécessaire. Sinon faire plusieurs functions.
' Ajouter toutes notes d'utilisation utiles pour quelqu'un qui ferait du copier/coller d'un projet vers un autre.
' Celles-ci seront tout à fait vitales si cette fonction se ramasse dans une librairie de code commune.
'
' Paramêtres:
'   <param_Nom>    : mettre non le type mais sa raison d'être ByVal = [IN], ByRef = [IN][OUT]
'
' Return value:
'   Type  : si un BOOLEAN, mettre pourquoi FAUX, pourquoi VRAI.
'         : si une valeur d'erreur, mettre la constante NoError et notez ou sont les autres valeurs    
'        ; Si une vrai valeur de retour mettre la valeur si Succes, et celle si Erreur.
' Calls:
'   Quelquefois, pour les fonctions complexes, je mets les nom des fonction appelées.
'
'===============================================================


CLASSE, USERCONTROLs

Les classes et les usercontrols sont un peu spéciaux en ceci qu'ils servent à faire (ou sont déjà) des objets qui exposent des méthodes, des propriétés et des événements.

Pour une classe simple, un nom peut suffire mais pour un objet complexe, il faut commenter le API (Application Programming Interface) au complet avec des exemples. C'est indigeste mais essentiel car c'est le mode d'utilisation de votre oeuvre.

Comme ceci:(Deux méthodes et une 'event' sont illustrées seulement)
'===============================================================
'==================== classe activityMAKE API ==================
'===============================================================
' Property InputMaterial
' 'Set' ou 'Get' le materiel de type 'oMatNonDuplicable'
' Note d'usage:
'    <objectName>.InputMaterial(aMat)
'    Set anotherMat = <objectName>.InputMaterial
' Un materiel 'NULL' créera un materiel par défaut.
' Un materiel avec des champs vide (EMPTY) va créer un materiel
'    incohérent.
' --------------------------------------------------------------
'
Property SetCalendar
' Etablira le calendier selon le document XML ou selon défaut.
' La méthode Init de l'object doit avoir mise les valeurs par défaut.
' Note d'usage:
'    <objectName>.SetCalendar(XMLfilename)
'    <objectName>.SetCalendar("")
'    PAS DE METHODE 'Get'
' --------------------------------------------------------------
' Event MaterialReleased
' Renvoie la date et l'heure sous format 'YYYYMMDD;HHMMSS'
'    en String
.....
'===============================================================
'========================= END OF API ==========================
'===============================================================

Mettre ce pavé en haut de la classe.

CODE

Tout commenter n'est guère utile.

En règle générale, je mets:
1- la raison d'une étape,
2- le détail d'un algo si ce détail n'est pas évident du premier coup d'oeil,
3- la structure de donnée qui doit être manipulée,
4- la raison d'un maniement d'erreur,
5- toute chose qui risque de ne pas être comprises plus tard ou qui peut sauver du temps et des source d'erreurs à la relecture.

Voici quelqures examples de chaque règle un peu en vrac:

1 ---------------------------------------------
If j > 0 Then
    ' impossible d'enlever le dernier tab d'un TabStrip.
    tabMaps.Tabs.Remove j
    ' dernier controle d'un array ne peut être enlevé
    Unload ucPictureSiz1(j)

2 ---------------------------------------------
' Note: La méthode <PictureBox>.Line ne supporte pas
'   un block "With/End With"


3 ---------------------------------------------
Pour un document XML chargé dans une ListView

For j = 0 To nAttCount - 1 Step 1
    '<PLAYER
    '   onmap="Wall1"
    '   id="DaRoq"
    '   name="DaRoq"
    '   posx="25"
    '   posy="25"
    '   icon="F:\__DATA\_Cie\MapIcons\01pone.ico"
    '       />

    Select Case aNode.Attributes.Item(j).baseName
        Case "onmap"
            strwhichmap = aNode.Attributes.Item(j).Text
                                            
        Case "id"
            strID = aNode.Attributes.Item(j).Text
                                            
        Case "name"
            strName = aNode.Attributes.Item(j).Text
                                            
        Case "posx"
            strposX = aNode.Attributes.Item(j).Text
                                            
        Case "posy"
            strposY = aNode.Attributes.Item(j).Text
                                            
        Case "icon"
            strsymbol = aNode.Attributes.Item(j).Text
                                            
        Case Else
            '
    End Select
Next j

' now we can start adding to the lists
'------------------------------------------------------------------------
' lsvPlayers
'  col#     what
'------------------------------------------------------------------------
'   0       playerID
'   1       name
'   2       whichmap    map ID
'   3       posX        upperleft corner X coord of avatar
'   4       posY        upperleft corner X coord of avatar
'   5       symbol      key for custom symbol (unused for now)
'------------------------------------------------------------------------

Set itm = lsvPlayers.ListItems.Add(, strID, strName)
itm.SubItems(1) = strwhichmap
itm.SubItems(2) = strposX
itm.SubItems(3) = strposY
itm.SubItems(4) = strsymbol


4 ---------------------------------------------
Input #nfilenum, frm_strLastCampaignDate
' détecter une ancienne version
If Err.Number <> 0 Then' 62 Input past end of file
    ' données n'existent pas: mettre valeur par défaut
    ' format: YYYY;MM;DD as ####;0#;0#
    '   "Janvier 1, 2006" serait "2006;01;01"


5 ---------------------------------------------
' format: YYYY;MM;DD as ####;0#;0#
'   "Janvier 1, 2006" serait "2006;01;01"


signaler à un administrateur
Commentaire de us_30 le 25/09/2006 22:20:21

Bonsoir,

En guise de commentaire, je dirais qu'avant tout, commenter un code c'est une affaire personnelle. A chacun de voir ce qui lui correspond le mieux... même si c'est pour travailler en groupe... (je vais faire hurler...)

Pour ma part, je pense que trop de commentaire tue le commentaire ! et un bon code bien commenter, c'est lorsqu'on lit des commentaires pertinents, courts et claires.
En somme, écrire la moindre action que le code effectue, n'est pas pertinent. Ecrire un recueil dans un code n'est pas court. S'il faut se souvenir de ce que fait une API et comment on l'utilise en détail avec des exemples, mieux vaut s'écrire un tutoriel perso ! On commente un code, on ne fait pas une bibliothèque. Ecrire un commentaire, n'est peut-être pas un exercice de style, mais... utiliser des termes mal ciblés, rends la relecture future très difficile. (Je sais de quoi je parle !)

ET surtout n'oublions pas le seul objectif d'un commentaire : aider à comprendre un code, et c'est tout !

=

JE trouve ton tutoriel pas trop mal dans l'ensemble, mais j'aurais aimé trouver plus d'alternatives (dit autrement, plus de façons de faire), donnant des principes (efficaces) pour commenter son code... en gros, une espèce de synthèse de façon de faire, en retenant celles qui semblent pertinentes. Ton expérience est intéressante, mais comment font les autres ? c'est probablement aussi intéressant...

DE plus, c'est peut-être bête, mais le côté esthétique de commenter, c'est aussi un point intéressant. JE ne sais pas, si je suis le seul à avoir expérimenter les soulignements, espaces et autres "slash", avant de tout refaire autrement, sans vraiment trouver une façon qui me convienne... mais bon.

Bref, c'est mon avis sur le sujet "COMMENTAIRE" qui n'est pas une chose si évidente, malgré la relative légèreté au premier abord, d'où l'intérêt de ton tutoriel...

Amicalement,
Us.

signaler à un administrateur
Commentaire de interkira le 31/10/2006 17:04:30

Bonjour

pareil, un petit commentaire en debut de fonction pour dire en claire ce qu'elle fait c'est déjà simple et éfficase pour comprendre, puis après il faut voir ce qui doit-être expliqué plus en détail dans le code des particularitées ou des "bidouilles" (on va me tuer) obligatoire pour faire le traitement voulu afin de savoir pourquoi on a fait ca et pas autrement à un temps donné.

Trop de commentaires c'est lourd et puis on est programmeur ou pas, un if ou un for quelque soit le language on comprend ce que cela fait quand même... ;)

Perso j'en met de moins en moins, le strict nécessaire quoi sinon on écrit un livre au lieu de coder. ;)

La clarté du code apporte bcp plus je trouve, bien aérer son code c'est bien aussi.

Cordialement

signaler à un administrateur
Commentaire de olixelle le 08/12/2006 13:42:09

Salut les gens :)

"trop de commentaire tue le commentaire..."
--> c'est n'importe quoi. Il y a 2 optiques à commenter un code:
1. De s'y retrouver soi mm et la 2 lignes peuvent suffir
2. de permettre à un autre codeur de reprendre le projet et la il peut etre nécessaire de mettre 50 lignes pour bien expliquer les règles métier

BitShifter, ton tuto est interressant, je pense qu'il manque cependant l'utilisation d'outils comme ndoc ou vbcommenter qui illustreraient parfaitement tes remarques

voila,

Olixelle

PS: us_30 & Interkira: entièrement d'accord avec vous sinon :)

signaler à un administrateur
Commentaire de bitshifter le 08/12/2006 14:07:09

Merci olixelle, mais je suis du genre vieille école, à utiliser NotePad pour faire du HTML et du XML.

Je vais jeter un coupd d'oeil aux deux apps que vous avez eu l'obligeance de me signaler.

signaler à un administrateur
Commentaire de Sbt le 21/06/2007 12:28:24

Bonjour,
Les commentaires sont plus que nécessaires... Et Olixelle donne bien les deux sens aux commentaires...
Mais attention, il faut bien faire la différence avec les commentaires du CODE et ceux en tete de fonction, classes etc......
Les commentaires pour donner l'explication d'une focntion, d'une classes sont à mon gout les plus important.
C'est avec eux que l'on fait une doc technique sur un programme (la c'est le programmeur qui parle)
...
Il faut faire attention au commentaire du code, si c'est pour donner une regle de gestion, je suis d'accord...
Un commentaire pour expliquer qu'une commande n'accepte pas un bloc With, n'a pas sa place dnas le code... C'est de l'explication du langage, pour cela il y a la documentation en ligne du dit langage...

Pour ma part, dans mon boulot, les commentaires servent à générer la documentation technique du programme (équivalent à ce que fait javadoc...).
Quand un débutant en VB arrive sur le projet, on ne lui explique pas le langage, mais on lui donne soit des sites, soit des bouquins, des doc...


signaler à un administrateur
Commentaire de legrandLynx le 07/09/2007 19:46:40

programmeur amateur mais persistant depuis msdos 3.2 je ne peut que regretter (sans excès) la flemme qui m'a fait négliger les différents niveaux de commentaire dans mes activités de codage.Des secondes pour écrire un petit texte valent parfois des heures de recherche dès que le projet atteint un certain volume.
Que dire des fonctions ré-écrites car non repérables ou non documentées!
Non les commentaires ne sont jamais trop longs et s'il en était, nul besoin alors de les lire!
Mais quel bonheur des mois ou des années apres de retrouver le fil de sa pensée du moment.
Une petite pique aux ennemis des commentaires: la non maitrise du clavier... problème qui amène a coder en économisant sur les noms de fonctions,de variables et les commentaires,en bref qui rend le code impénétrable même à son auteur.
Mais bien sur, chacun a toute liberté de ses choix en informatique (entre autre).

signaler à un administrateur
Commentaire de bitshifter le 08/09/2007 15:49:48

Merci, LeGrandLynx.

C'est plaisant de se voir validé sur ce qui passe trop souvent pour secondaire...jusqu'à ce qu'on soit obligé de corriger du code 'legacy' fait par un pseudo gourou disparu depuis longtemps.

signaler à un administrateur
Commentaire de magicgus le 22/07/2008 23:07:14

Bonsoir, perso je cherche à savoir comment integré des commentaire pour les paramètres de mes fonctions (vb6) pour que quand je les appel je puisse savoir de quoi il s'agit...

Exemple :
'Fonction
Public Function MaFonction (MonParam As String ???Comentaire???) As String
  ...Code...
End Function

'Appel de la fonction
  MaFonction "Valeur"

Comment afficher un commentaire dans intelisence lors de la saisie de l'appel de fonction ?

Merci d'avance pour d'éventuelles réponces.

Bonne prog à tous, Guillaume

signaler à un administrateur
Commentaire de PCPT le 23/07/2008 01:20:33 administrateur CS

salut,

magicgus ->
"???Comentaire???", pas possible en VB6. d'ailleurs les autres méthodes VBRUN/VBA ne le sont pas non plus

par contre
"Public Function MaFonction", c'est ce qu'indiquait legrandLynx : alors préférer quelques lettres de plus, avec alors un nom de fonction plus explicite
pas besoin de 15 lignes de commentaires pour function GetFileCountLines(byval sPath....
le nom est clair :
Get => obtenir, tu sais que la fonction va retourner un résultat et qu'elle va faire une opération d'obtention (de quelque chose)
File => en rapport à un fichier
Count => un nombre de quelque chose
Lines => ah bin les lignes du file
paramètre => chemin


une autre chose, pour usercontrol et class, est la possibilité de documenter les propriétés et méthodes pour les avoir par F2 ou par la fenêtre de propriétés.
c'est rarement fait et pourtant bien utile

menu outils > attributs de procédures

++ ;)

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,06 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.