Drozor

Reprise de YouAds

a marqué ce sujet comme résolu.
  • Ne code jamais en Français, 100% Anglais
  • Pour les noms de fichiers, […] mets les toujours en Anglais
  • Côté GitHub, commit en Anglais

ThuleMalta

Nope. Ça, c'est une pure question de goût. Et comme dit artragis, il vaut mieux qu'il code dans une langue qu'il maîtrise que d'écrire un globish dégueulasse.

+3 -0

Merci de vos premiers retours :)

Si je répond pas un point c'est que j'ai répondu plus haut, ou que c'est prévu ;)

@ThuleMalta :
1 - Ben comme dit plus bas c'est plus une question de gout ;)
2 - prévu :p
3 - mélanger php/html dans un fichier respect le MVC je crois ;)
4 - Pour les noms de fichiers je vais réfléchir à une charte de nommage car cela n'est pas la première fois qu'on me le dit
5 - C'est a venir comme les commentaires :P
6 - voir 1
7 - je peux faire en klinglais sinon ? Le pire c'est que je le fait pas exprès xD. Ça va être corrigé aussi.

@artragis :
1 - Tu peux préciser ?
2 - idem :P
5? - améliorer l'organisation générale est prévu ;)

@Dominus Carnufex : Oui je les ai changés ^^

EDIT : Oups Markdown :P

+0 -0

Voici donc mes remarques:

  • On passera donc les remarques sur l'organisation qui est une catastrophe
  • htmlspecialchars, ça s'utilise uniquement à l'affichage, comme expliqué ici

Or toi, tu fais tes html specialchars....... partout. Même pour simplement regarder dans la bdd (faire un select) ou pour… jouer avec des entiers.

D'ailleurs revenons à ce fichier : tu supposes que $_GET['id'] est un entier qui vaut entre 1 et 4 inclus. Mais si je mets "Ikillyou" ou même 42, tout ce que tu auras c'est "Warning $width is not defined" (idem pour height).

$d = date('Y-m-d'); est une mauvaise pratique car tu ne sais pas quelle est la timezone que tu utilises.

1
2
3
<?php
$today = new DateTime("today", new DateTimezone("Europe/Paris"));
$date_string = $today->format("Y-m-d");

te permet de t'assurer de tout ça tranquillement. Toujours dans les mauvaises pratiques, tes nommages de variables sont.... WTF?

1
2
3
4
5
6
<?php
$one = $pdo->prepare('SELECT id_prop FROM site WHERE ID=:id');
    $one->bindValue(':id', $id_aff, PDO::PARAM_INT);
    $one->execute();
    $ones = $one->fetch();
    $id_prop = $ones['id_prop'];

Qui peut comprendre ce que tu fais avec ton $one et $ones qui ne présentent rien du tout. De plus, comme tu n'utilises pas la propriété PDO::FETCH_ASSOC, il me semble que tu charges les choses en double (équivalent à PDO::FETCH_BOTH). Ce qui n'est pas une bonne méthode. (par contre pas sûr quoi).

Je ne peux pas commenter les lignes qui suivent car sans commentaire ni nom de variable utile, ton code est juste… illisible.

1
2
3
4
5
6
<?php
for ($nb_lignes = 0; $nb_lignes <= $donnees['score']; $nb_lignes++)
            {
                $liste[] = $donnees['ID'];
                $nb_lignes ++;
            }

what the hell? si tu veux vraiment incrémenter ton compteur par deux, pourquoi tu ne fais pas un $nb_lignes+=2 dans ton for? Et sinon, pourquoi avoir fait ça? Surtout que j'ai l'impression que tu veux juste faire un array_fill, qui est une fonction déjà existante.

Tu remarqueras que je n'ai toujours pas quitté le ficher "add.php" qui semble être un fichier certes important mais très buggé. Où est le découpage en fonctions de ton code?

1
2
3
<?php
$id = $liste[rand(0, count($liste)-1)];
    if (!empty($id)){

quel sens donnes-tu à ça? Cette condition ne peut échouer que si $id vaut 0. Or si $id est bien tiré d'une bdd c'est… impossible.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$reponse = $pdo->prepare('SELECT * FROM vues WHERE id_site=:id AND dat=:dat');
        $reponse->bindValue(':id', $id, PDO::PARAM_INT);
        $reponse->bindValue(':dat', $d, PDO::PARAM_STR);
        $reponse->execute();
        $donnees = $reponse->fetch();
        $reponse->closeCursor();
        if (!empty($donnees)){
            $vues = $donnees['nb'];
            $vues ++;
            $reponse = $pdo->prepare('UPDATE vues SET nb=:vues WHERE id_site=:id AND dat=:dat');
            $reponse->bindValue(':vues', $vues, PDO::PARAM_INT);
            $reponse->bindValue(':id', $id, PDO::PARAM_INT);
            $reponse->bindValue(':dat', $d, PDO::PARAM_STR);
            $reponse->execute();
            $reponse->closeCursor();
        }else{
            $reponse = $pdo->prepare('INSERT INTO vues(nb, id_site, dat) VALUES(1, :id, :dat)');
            $reponse->bindValue(':id', $id, PDO::PARAM_INT);
            $reponse->bindValue(':dat', $d, PDO::PARAM_STR);
            $reponse->execute();
            $reponse->closeCursor();
        }

la requête de sélection est en trop. Il te suffit d'envoyer la requête UPDATE vues SET nb=nb+1 WHERE id_site=:id AND dat=:dat et de regarder le retour de la fonction execute. Si ce dernier est égal à 0 alors tu fais on INSERT, sinon tu peux rester.

Autre aspect : tu n'utilises pas les transactions, du coup tu es sensible aux accès concurrent. Et tu auras un jour ou l'autre des warning pour variable inexistante.

L'utilisation de die pour un oui ou pour un non est aussi une mauvaise pratique, tu ne veux pas que la génération de ta page meurt, tu veux qu'en cas d'erreur elle s'adapte.

echo '<META HTTP-EQUIV="Refresh" CONTENT="0;URL= /dashboard">';

NON !

1
header('Location: /dashboard');

et si possible sans avoir les include bas et haut qui ne servent à rien.

Comme tes fichiers ne sont pas organisés, on peut accéder à des fichiers intermédiaires sans aucun soucis. Passons à inscript.php

1
2
<?php
if ((gettype($pseudo) == "string") AND (gettype($mail) == "string") AND (gettype($mdp) == "string") AND (gettype($verif) == "string"))

Pourquoi? OSEF, non? outre que la fonction is_str existe ça n'a aucun intérêt puisque :

  • tu te sers directement des $_POST qui sont TOUJOURS des strings (sauf quand ils n'existent pas… ce que tu ne vérifie pas)
  • tu utilises (très mal mais tu l'utilise quand même) htmlspecialchars qui retourne un string.

md5 n'est pas sécurisé pour stocker des mots de passes.

J'ajouterai que l'unicité d'une clef (utilisateur, email) c'est le travail de la bdd, pas du php. Il faut donc que tu ajoutes une contrainte d'unicité et que tu insères directement (sans vérification). S'il y a doublon, la bdd renvoie une erreur que tu peux attraper (try/catch). En plus cela accélèrera ta bdd.

Je n'ai pas tout inspecté tes fichiers car il y en a trop, trop mal rangés, avec un code trop mal rédigé. J'espère que mes commentaires te serviront à t'améliorer. En tout cas, tu as bien compris comment utiliser les requêtes préparées et tu n'es pas vulnérable aux injections SQL. C'est plutôt une bonne chose.

+6 -0

Whaou :) !

Merci pour ce rapport géant !

Vu la longueur, je peut pas répondre à tout, les endroits où je ne répond pas, c'est que j'ai compris mon erreur ;)

De plus, comme tu n'utilises pas la propriété PDO::FETCH_ASSOC, il me semble que tu charges les choses en double (équivalent à PDO::FETCH_BOTH). Ce qui n'est pas une bonne méthode. (par contre pas sûr quoi).

ça je n'ai pas compris, même après un peu de recherche :P

what the hell? si tu veux vraiment incrémenter ton compteur par deux, pourquoi tu ne fais pas un $nb_lignes+=2 dans ton for? Et sinon, pourquoi avoir fait ça? Surtout que j'ai l'impression que tu veux juste faire un array_fill, qui est une fonction déjà existante.

En effet c'est WTF cette deuxième incrémentation dans la boucle :D (je ne peux pas te dire pourquoi c'est là :p, en tout cas je peux te dire que ça a rien a y faire :p). C'est bien un array_fill que je veut faire, sauf que je veux y ajouter à la suite du tableau liste, donc j'ai juste à rajouter un array_merge, et finalement ma boucle je peux la faire en une seule fonction :) !

1
$liste = array_merge($liste, array_fill(count($liste), $donnees['score'], $donnees['ID']));

Quand je suis repassé sur le code ce matin j'ai halluciné aussi sur ça XD

1
2
3
<?php
$id = $liste[rand(0, count($liste)-1)];
    if (!empty($id)){

(15 minutes de réflexion plus tard…) En fait c'est au cas ou il n'y aurais pas de publicité a afficher ;) (mais j'ai modifié le code car la c'est barbare et un peu tard…)

Autre aspect : tu n'utilises pas les transactions, du coup tu es sensible aux accès concurrent. Et tu auras un jour ou l'autre des warning pour variable inexistante.

et

Comme tes fichiers ne sont pas organisés, on peut accéder à des fichiers intermédiaires sans aucun soucis.

Pas compris :P

Merci encore pour ce retour qui m'est bien utile :) !

+0 -0

Je ne suis pas un pro du commentaire et les autres dirons si ils sont de mon avis, mais ce qui me frappe dans ton code c'est les commentaires :

  • Il y en à trop peu je trouve. Pour moi chaque bloc de code devrait être commenté pour indiquer ce qu'il fait. Par exemple quand tu as un enchainement de if/elseif pour adapter les dimensions de l'image selon le format de la pub il n'existe aucun commentaire qui dit ce que fait ce code. On m'a toujours dis qu'un bon programme c'était 50% de commentaires.

  • Pourquoi tu commentes un bloc en écrivant le commentaire en dessous ? Je trouve ça illogique, c'est mieux de commenter au dessus du bloc, du style "on se connecte a la bdd" et le code qui correspond en dessous.

  • Je ne sais pas si il existe des bonnes pratiques pour commenter, mais en général je commente soit un bloc avec une ligne de commentaire au dessus, soit si je commente dans le bloc je met le commentaire après le code. Par exemple ici je trouve que ça ne vas pas :

1
2
3
4
if (!empty($id_aff)){
        //si on ne sait pas qui affiche la publicité
        $id_aff = 0;
    }

J'aurai plutôt fait comme ceci :

1
2
3
4
//si on ne sait pas qui affiche la publicité
if (!empty($id_aff)){
        $id_aff = 0;
    }

ou alors :

1
2
3
if (!empty($id_aff)){
        $id_aff = 0; //si on ne sait pas qui affiche la publicité
    }

De plus tes commentaires ne sont pas forcement complet. Celui que je cite au dessus est peu précis: si on ne sait pas qui affiche la pub on fait quoi ? On initialise une variable à 0 mais à quoi correspond cette variable ?

Un code bien commenté est un code facile à relire et à maintenir, et cela te permet aussi de facilement le partager et avoir des retours. Je sais que ça peut sembler être une perte de temps de commenter souvent, mais tu vas voir que c'est une bonne pratique à terme :)

+1 -0

Pour cette cascade de else/if, pourquoi tu ne fais pas un tableau avec les différents formats et tu vérifies juste que la clé du tableau existe ?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
if ($format == 1){
        $width=468;
        $height=60;
    }elseif ($format == 2){
        $width=250;
        $height=250;
    }elseif ($format == 3){
        $width=120;
        $height=600;
    }elseif ($format == 4){
        $width=300;
        $height=250;
    }

fichier add.php

Tu devrais faire une classe qui gérerait ces formats car on en retrouve partout:

1
2
3
4
<input type="radio" name="format" value="1" id="un" selected><label for="1">468x60</label><br>
            <input type="radio" name="format" value="2" id="deux" selected><label for="1">250x250</label><br>
            <input type="radio" name="format" value="3" id="trois" selected><label for="1">120x600</label><br>
            <input type="radio" name="format" value="4" id="quatre" selected><label for="1">300x250</label><br>

fichier add_pub.php

Ici tu devrais faire une boucle. De plus tu te plante entre les for (qui sont tout le temps les mêmes), id; le for du label doit correspondre à l'id de l'input à focusser.

Dans ces fichiers suivant, c'est la même chose, tu devrais n'avoir qu'un seul tableau avec la liste des formats car si tu as besoin d'en ajouter un tu dois aller fouiller dans tous tes fichiers avec le risque d'en oublier un:

  • add_pub.php
  • code.php
  • add.php
  • dashboard.php

C'est quoi la différence entre le fichier add_pub et ajouter_pub (après relecture je me rends compte qu'il a été renommé; tu devrais supprimer l'ancien).

$_SESSION['vvefjf']

C'est quoi ce nom ? Si tu ne veux garder ce nom de variable commentes au moins ce qu'elle fait, à quoi elle correspond ;)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
function GetDomaine($ur)
{
    $param = parse_url("http://" . $ur); 
    $urlvar = $param["host"];
    $ht = strstr($urlvar, '.', true);
    if ($ht == "www"){
        $urlvar = str_replace("www.", "", $urlvar);
    }
    return $urlvar;
}

C'est pareil ici, tu te trompes dans le nom de ta variable qui devrais être url.

1
2
3
4
5
6
7
8
9
$rep = $pdo->prepare('SELECT * FROM clics WHERE IP=:ip AND domain=:domain');
    $rep->bindValue(':ip', $ip, PDO::PARAM_STR);
    $rep->bindValue(':domain', $domain, PDO::PARAM_STR);
    $rep->execute();
    $no = count($rep->fetchAll());
    if ($no == 0 OR $no == ""){
        // du code
    }
    $rep->closeCursor();

fichier clic.php

Pourquoi ici tu ne fais pas le count directement dans ta requête ?

1
if (!empty($pseudo) AND !empty($mdp))

fichier co.php

Tu devrais plutôt utiliser la fonction isset et non vérifier l'inverse de la fonction inverse.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
$reponse = $pdo->prepare('SELECT pseudo, mdp, ID FROM users WHERE pseudo=:pseudo');
                $reponse->bindValue(':pseudo', $pseudo, PDO::PARAM_STR);
                $reponse->execute();
                while ($donnees = $reponse->fetch())
                {
                    if ($donnees['mdp'] == $mdp_crypt)
                    {
                        $_SESSION['pseudo'] = $pseudo;
                        $_SESSION['mdp'] = $mdp_crypt;
                        $_SESSION['ID'] = $donnees['ID'];
                        $user_exist = 1;
                        echo '<META HTTP-EQUIV="Refresh" CONTENT="0;URL= /dashboard">';
                    }else{
                        echo '<h1>Connexion</h1><br><p class=\"message\">Pseudo ou Mot de passe invalide.</p>';
                                            }
                }
                $reponse->closeCursor();
                if (empty($user_exist))
                {
                    echo '<h1>Connexion</h1><br><p class=\"message\">Pseudo ou Mot de passe invalide.</p>';
                }

fichier co.php

Je trouve ceci vraiment horrible:

  • Tu fais une boucle sur quelque chose qui est théoriquement unique.
  • Si on suit ton raisonnement et qu'il y a plusieurs utilisateurs qui ont le même mot de passe, il y a un gros problème: quelqu'un peut se retrouver avec le compte de l'autre. Si ils n'ont pas le même mot de passe, ils vont se retrouver avec des dizaines de messages d'erreur et des dizaines de formulaire de connexion.
  • le echo '<META HTTP-EQUIV="Refresh" CONTENT="0;URL= /dashboard">'; à ne surtout pas utiliser car l'utilisateur peut théoriquement le bloquer. Il faut utiliser header('Location: /dashboard');
  • je ne comprends pas l'utilité d'un deuxième if (quoique dans ton cas, si la requête n'a rien récupéré …)

Le fichier clic_chart est vraiment horrible, il y a du javascript, du HTML et du PHP mélangé et dans tous les sens. Théoriquement ca devrait marché comme ca:

  • tu fais ton traitement coté PHP dans ton controller
  • tu renvoies tes données à ta vue qui génère le js à partir des variables PHP.

Alors que la tu mélanges tout en mettant du js, tes requêtes vers ta bdd et des fonctions dans le même fichier ....

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
function GetDomaine($ur)
    {
        $param = parse_url("http://" . $ur); 
        $urlvar = $param["host"];
        $ht = strstr($urlvar, '.', true);
        if ($ht == "www"){
            $urlvar = str_replace("www.", "", $urlvar);
        }
        return $urlvar;
    }

fichier compteur.php

C'est la deuxième fois que je vois cette fonction …

J'ai pas fait les derniers fichiers mais je vois clairement que l'architecture MVC n'est pas respecté (un tout petit peu par moment). Il faut vraiment que tu découpes mieux ton code et tes fichiers:

  • un dossier Fonctions/ avec toutes les fonctions que tu vas ensuite réutilisé dans ton code
  • un dossier Modele/ avec toutes les fonctions qui vont correspondre aux requêtes
  • un dossier Controleur/ avec toutes les fonctions qui vont générés les variables pour tes vues
  • un dossier Vues/ avec des fichiers dans lesquels tu te contentes de générer ton html et ton js sans aucun traitement PHP

J'ai rajouté/modifié/déplacé des commentaires, c'est mieux ?

https://github.com/AzeStudio/Drozor/blob/d9ebbab0705a13b0a5caa62519d19ce276e2ecf2/add.php

Aze

C'est beaucoup mieux :)

Là sans lire le code je comprends ce qu'il fait. Par contre comme le dit albert73 tu ne respectes pas du tout l'architecture MVC… Par contre pourquoi on à du html dans ton fichier php à la fin ?

Tu as déja regardé du coté des framework php "simples" qui sont idéals pour commencer, du genre CakePhp ou CodeIgniter ? Ca te permettrait d'avoir un code bien organisé, plus propre, d'écrire moins de choses etc…

Et POURQUOI tu mets ton css dans ton code html? Tu devrais le mettre dans un fichier séparé et avoir une class adaptée.

+0 -0

J'ai rajouté/modifié/déplacé des commentaires, c'est mieux ?

https://github.com/AzeStudio/Drozor/blob/d9ebbab0705a13b0a5caa62519d19ce276e2ecf2/add.php

Aze

C'est beaucoup mieux :)

Là sans lire le code je comprends ce qu'il fait.

Demandred

Ce qui ne devrait pas etre le cas. Les commentaires devraient etre reserves a la necessite, c'est a dire lorsque le code est un peu tricky ou ne se suffit pas a lui meme.

Par exemple ceci n'a pas lieu d'etre:

1
2
//si il n'y a pas de publicité à afficher dans ce format on affiche l'image par défaut
echo '<a href="https://drozor.com/" target="_blank"><img src="images/default'.$format.'.png" alt="drozor" width="'.$width.'" height="'.$height.'"></a>';

Je sais tres bien ce qui que fait ce code dans son contexte.

Idem, aucun interet du commentaire:

1
2
3
//récupération de la date pour le stockage en base de donnée
$today = new DateTime("today", new DateTimezone("Europe/Paris"));
$d = $today->format("Y-m-d");

Et les exemples sont a la pelle.

Un bon code ce n'est pas 50% de commentaire, c'est un code qui a un besoin minimal de commentaires.

+3 -4

Je me demande où tu as trouvé ce genre de pratiques… J'imagine aussi que pour toi "tester c'est douter" ? :D

En théorie si on respecte les bonnes pratique on doit commenter CHAQUE fonction/classe qu'on utilise en indiquant ce qu'elle fait, les paramètres attendus, les différents types de retour etc.. Ce qui fait au final qu'il y à en général autant voir plus de commentaires que de code.

Voici à titre d'exemple un extrait du code source d'Angular JS :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/**
 * @ngdoc function
 * @name angular.lowercase
 * @module ng
 * @kind function
 *
 * @description Converts the specified string to lowercase.
 * @param {string} string String to be converted to lowercase.
 * @returns {string} Lowercased string.
 */
var lowercase = function(string) {return isString(string) ? string.toLowerCase() : string;};
var hasOwnProperty = Object.prototype.hasOwnProperty;

/**
 * @ngdoc function
 * @name angular.uppercase
 * @module ng
 * @kind function
 *
 * @description Converts the specified string to uppercase.
 * @param {string} string String to be converted to uppercase.
 * @returns {string} Uppercased string.
 */
var uppercase = function(string) {return isString(string) ? string.toUpperCase() : string;};


var manualLowercase = function(s) {
  /* jshint bitwise: false */
  return isString(s)
      ? s.replace(/[A-Z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) | 32);})
      : s;
};
var manualUppercase = function(s) {
  /* jshint bitwise: false */
  return isString(s)
      ? s.replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);})
      : s;
};

Un débutant ne vas pas forcement respecter toutes ces bonnes pratiques d'un coup car ça serait un peu "verbeux" pour un petit projet, mais commencer à mettre une description à chaque bloc est un bon début…

Le commentaire n'a pas grand chose à voir avec la qualité du code ou non, désolé… Tu peux avoir un code absolument horrible très bien commenté, et vis versa un code super propre sans commentaires. C'est juste une bonne pratique qui permet de mieux se retrouver dans son code, de le maintenir et de le partager.

La description de chaque bloc est un peu comme un sommaire : si tu cherches une fonction précise dans ton code tu as juste à lire les @description pour la retrouver facilement. Sinon comment tu fais avec ta méthode qui consiste à mettre le moins de commentaires possibles et uniquement pour des choses tricky? Tu cherches dans tous le code jusqu'à trouver la bonne fonction ? :D

PS : j'espère que tu es meilleur en économie qu'en coding ^^

+0 -0

Si deja tu confonds documentation et commentaires, on est mal barre.

"en coding", j'ai ri.

Le commentaire n'a pas grand chose à voir avec la qualité du code ou non, désolé… Tu peux avoir un code absolument horrible très bien commenté, et vis versa un code super propre sans commentaires. C'est juste une bonne pratique qui permet de mieux se retrouver dans son code, de le maintenir et de le partager.

Cela a tout a voir. Si tu nommes correctement tes variables, c'est a dire de maniere semantique, si tu respectes les idiomes du langage que tu utilises, etc. ton code n'a pas besoin d'etre commente. Les rares besoins pour commenter ce serait pour des parties un peu techniques, des choses qui sortent du commun ou peuvent surprendre.

La description de chaque bloc est un peu comme un sommaire : si tu cherches une fonction précise dans ton code tu as juste à lire les @description pour la retrouver facilement. Sinon comment tu fais avec ta méthode qui consiste à mettre le moins de commentaires possibles et uniquement pour des choses tricky? Tu cherches dans tous le code jusqu'à trouver la bonne fonction ?

Non, j'ai la documentation qui est generee et auto-regeneree. Lorsque je cherche une fonction, ce qui arrive rarement vu que mon IDE fait de l'auto-completion, je grep dans ladite documentation.

+2 -0

Je penses que c'est toi qui confonds :) Les commentaires servent à la documentation, en général via un générateur automatique. Mais ce sont bien des commentaires et non la documentation à proprement parler.

Prend doxygen , ils indiquent bien qu'ils générent la documentation à partir du code source commenté :)

Si tu veux on peut appeler ça des commentaires de documentation, histoire de les différencier des commentaires classiques… mais ça reste des commentaires, et tu peux très bien commenter ton code selon ces pratiques sans pour autant générer de documentation derrière.

PS: si tu pensais "documentation" au lieu de commentaire pourquoi ne pas avoir dit dans ton premier message quelque chose comme "c'est important de documenter son code, c'est ce que t'explique Demandred" ? Car là on dirait que tu lui conseille ne pas commenter son code, juste pour le plaisir d'être en désaccord avec moi.. Le but est d'aider l'auteur à mieux coder, ce qui passe par documenter/commenter (appel ça comme tu veux) son code correctement.

EDIT : tu sais très bien que aze est débutant, il ne sais pas commenter son code, tu crois vraiment qu'il va le documenter et générer une doc pour trouver ses fonctions? Surtout pour un petit projet comme ça… Il utilise à peine Git. Si il commente simplement son code avec un commentaire à chaque bloc pour indiquer son utilité c'est un bon début et ça rends les choses plus propre (et ça permet déja de mieux comprendre son code).

Quand il aura l'habitude de faire ça et voudra aller plus loin il pourra apprendre à commenter dans les règles de l'art et à générer une documentation. Essaye de d'adapter un peu à la demande de la personne au lieu d'arriver avec des gros sabots.

+0 -1

Sérieusement les mecs, arrêtez-vous. To comment or not to comment, on a eu plusieurs pages de « débats » sur le sujet dans le topic sur les habitudes de programmation et il n'en est strictement rien ressorti, parce que personne n'a de vrais arguments. C'est purement dogmatique. Alors arrêtez de pourrir un topic qui n'a rien à voir avec des engueulades oiseuses…

+9 -1
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte