JeuWeb - Crée ton jeu par navigateur
[Coding style] Vos solutions pour un code lisible ? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Coding style] Vos solutions pour un code lisible ? (/showthread.php?tid=4309)

Pages : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17


RE: [Coding style] Vos solutions pour un code lisible ? - zneman - 10-01-2011

De rien ! ^^
Oui, ça reste d'actualité, ça change si vite au niveau du web que je n'ai pas encore lancé ma version Alpha 4 de mon jeu et je pense déjà à revoir en partie la structure générale...
Que de boulot...


RE: [Coding style] Vos solutions pour un code lisible ? - Viciousity - 10-01-2011

Bah moi j'essaie de bien mettre en page les commentaires et de mettre une logique dans son organisation
# CURENT USER: Method to retrieve data for user.
# ==============================================
public
# Verify if user has correct password
def has_pass?(sub_password)
return true if encrypt(sub_password) == self.password_hash
end

private
# Hash a string with SHA-256.
def encrypt(string)
return Digest::SHA1.hexdigest(string)
end



RE: [Coding style] Vos solutions pour un code lisible ? - Sephi-Chan - 10-01-2011

(10-01-2011, 07:11 PM)Viciousity a écrit : Bah moi j'essaie de bien mettre en page les commentaires et de mettre une logique dans son organisation
# CURENT USER: Method to retrieve data for user.
# ==============================================
public
# Verify if user has correct password
def has_pass?(sub_password)
return true if encrypt(sub_password) == self.password_hash
end

private
# Hash a string with SHA-256.
def encrypt(string)
return Digest::SHA1.hexdigest(string)
end

Je pense que ce ne sont pas de bonnes méthodes. Je m'explique (tout ça n'est donc que mon avis).

Pour commencer, tu ne tires pas profit des idiomes de ton langage de programmation.
En Ruby, le return est optionnel. Tu retournes un booléen alors que l'opérateur de comparaison le fait pour toi, d'autant que si la condition n'est pas vraie, ta méthode va renvoyer false, ce qui est illogique.

Ensuite, tu nommes mal tes méthodes et leurs arguments.
Pourquoi has_pass? ? Ce nom laisse penser que la méthode renvoie true si l'utilisateur a un mot de passe et false dans le cas contraire. Ça ne colle pas avec le commentaire. Un meilleur nom pourrait être correct_password? ou password_matches?.
Pourquoi sub_password ? Une portion de mot de passe (comme dans substring) ? L'abréviation de submitted ? Pourquoi pas submitted_password ou juste password ?

Ensuite, tu commentes trop. Ces méthodes son documentées par leur nom.


Voilà comment je réécrirais ce code :


public

def password_matches?(password)
password_hash == encrypt(password)
end


private

def encrypt(string)
Digest::SHA1.hexdigest(string)
end

Voilà ! Qu'en penses-tu ? L'indentation après public ou private n'importe pas.


Sephi-Chan


RE: [Coding style] Vos solutions pour un code lisible ? - Viciousity - 10-01-2011

Code copier-coller de internet parce que j'avais la flemme d'en retaper un complet (a) (j'avoue j'aurai du regarder a ce qui avais dedans et le corriger :S)

L'exemple n'étant de montrer que comment je commentais mon code (Partie et méthodes).
Donc il est clair que dnas le cas comme celui présenté c'est inutile ;P (mais dans un model avec 12 méthode sa devient vite avantageux pour switcher et savoir ou on est Smile


RE: [Coding style] Vos solutions pour un code lisible ? - zneman - 10-01-2011

Étrangement... Moi ça me fait peur le Ruby ! ^^


RE: [Coding style] Vos solutions pour un code lisible ? - Viciousity - 10-01-2011

Ben passez de PHP a ruby c'est vrai que c'est très étrange au début :S (même en codant POO purement avant en PHP).

Ce qui choque c'est qu'on a l'impression qui 'manque du code' parce que les fonctions sont beaucoup plus courtes et aérée (pas d'accolades en général). Puis comme Sephi-Chan a expliqué plus haut, tout se contracte souvent avec logique. du coup les fonctions semblent "vide" (bine que maintenant ce sont les fonctions PHP qui me paraissent lourde Smile comme quoi on évolue Tongue)


RE: [Coding style] Vos solutions pour un code lisible ? - Sephi-Chan - 10-01-2011

La peur de l'inconnu ! Smile

C'est une question d'habitude et de goût ! Les langages permettent les mêmes choses, à chacun d'essayer différentes choses (ou ne jamais s'éloigner de ce qu'on connaît, même si je n'adhère pas à cette philosophie) et de choisir.

J'ai laissé tombé PHP pour Ruby car ce dernier avait une syntaxe que je trouvais plus concise, avec du code beaucoup moins encombré de caractères inutiles. Le sens du code, l'intention du développeur, toutes ces choses sont noyées dans une marée de symboles, de caractères, d'incohérence.

Regarde l'exemple donné sur le sujet Tchat en direct, c'est assez flagrant et les exemples sont issus de la vraie vie.


Sephi-Chan


RE: [Coding style] Vos solutions pour un code lisible ? - Plume - 10-01-2011

Tu peux toujours essayer Python plutôt que Ruby.


RE: [Coding style] Vos solutions pour un code lisible ? - Argorate - 10-01-2011

J'ai du mal a voir ce qu'on peut enlever a la syntaxe de PHP pour la simplifier... (PHP est déjà telement simple d'utilisation par rapport aux autres languages...)
Si le problème ce limite aux acolades, je préfére 100 fois des acolades qui indique clairement où on commence et où on fini, plutot qu'un "end" qui traine, mais c'est sans doute en partie une histoire de gout & d'habitude en effet.
Ensuite le seul truc "chian" c'est la fleche (->) au lieu du point qu'en ont fait de l'objet, mais vu que c'est pas mon cas, je m'en fou un peu Smile
A part ça... qu'es ce que vous enleveriez/modifiriez?


RE: [Coding style] Vos solutions pour un code lisible ? - Sephi-Chan - 11-01-2011

(10-01-2011, 11:58 PM)Argorate a écrit : J'ai du mal a voir ce qu'on peut enlever a la syntaxe de PHP pour la simplifier... (PHP est déjà telement simple d'utilisation par rapport aux autres languages...)
Si le problème ce limite aux acolades, je préfére 100 fois des acolades qui indique clairement où on commence et où on fini, plutot qu'un "end" qui traine, mais c'est sans doute en partie une histoire de gout & d'habitude en effet.
Ensuite le seul truc "chian" c'est la fleche (->) au lieu du point qu'en ont fait de l'objet, mais vu que c'est pas mon cas, je m'en fou un peu Smile
A part ça... qu'es ce que vous enleveriez/modifiriez?

Ce n'est pas une question d'enlever ou d'ajouter. C'est plutôt que le langage PHP n'est pas fait pour la concision. Il est lourd visuellement.

En Ruby, tu peux écrire des choses très courtes :


def has_enough_money_to_buy?(item)
item.price <= self.money
end

public function has_enough_money_to_buy($weapon){
return $weapon->price <= $this->money;
}

Là il y a un return, un point virgule, des dollars. On est encombré de choses inutiles : on ne va pas à l'essentiel. De plus, la possibilité de mettre des ? ou des ! dans le nom des méthodes permet de donner plus de sens au code.



name ||= 'Anonyme'
name = name || 'Anonyme' # Alternative.

$name = empty($name) ? 'Anonyme' : $name;

Là aussi, le code est moins concis, répétitif et donc moins clair. Alors que Ruby va à l'essentiel.



names = [ 'Pierre', 'Paul', 'Jacques' ]
attributes = { Confusedtrength => 25, :agility => 18 }
attributes = { strength: 25, agility: 18 } # Syntaxe alternative avec Ruby 1.9.
digits = (0..9).to_a
alphabet = ('a'..'z').to_a

$names = array('Pierre', 'Paul', 'Jacques');
$attributes = array('strength' => 25, 'agility' => 18);
$digits = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
$alphabet = array('a', ...., 'z');

PHP n'a pas de définitions littérales pour les tableaux, tableaux associatifs et regexp. C'est inutilement lourd.

Un exemple d'utilisation des ranges qui date d'aujourd'hui et que je verrais mal en PHP :


(200..300).include?(response.code.to_i)


Et ce n'est qu'un échantillon. Donne moi quelques fonctions que tu as et je te présente des équivalents en Ruby, tu verras qu'il n'y a pas ou peu de superflu.


Sephi-Chan