SlideShare une entreprise Scribd logo
1  sur  19
CLEAN CODE
Writing clean code is what
you must do in order to
call yourself a
professional.
There is no reasonable
excuse for doing anything
less than your best.
Vue d’ensemble
• Noms significatifs
• Fonction
• Commentaire
• Objets et structures de données
• Gestion des erreurs
• SOLID
• Test unitaire
• Emergence
2
Pourquoi clean code
• Simple et direct
• Élégant
• Efficace
• Lisible
• Facile à améliorer
• Pas de doublons
3
Noms significatifs
• Pourquoi existent-t-ils?
• Qu'est-ce qu'ils font ?
• Comment sont-ils utilisés?
4
Noms significatifs
Évitez d'utiliser le même mot
Choisir un mot par concept
Faire des distinctions significatives
Utiliser des noms prononçables
Utiliser des noms consultables
Éviter les encodages
Éviter la cartographie mentale 5
Les Fonctions
• Coeur des programmes.
• « La première règle des fonctions est qu'elles doivent être petites ».
• La forte cohésion.
• Le nombre idéal d'arguments est Zéro
• Pas d'effets secondaires.
• Préférer les exceptions.
• Plus que trois arguments ne doivent pas être utilisés.
6
Les Fonctions
Préférer une exception que retourner un message d'erreur
7
Les Fonctions
- Pas d'effets secondaires
8
Commentaires
9
Commentaires
• Commentaires API publics
• Commentaires légaux
• Explication de l'intention
• Avertissement pour les conséquences
• real TODO Commentaires
• Commentaires redondants
• Commentaire bruyant
• Marqueurs de position
• Code commenté
• Commentaires obsolètes
10
Commentaires
• Le seul commentaire vraiment bon est le commentaire que vous avez trouvé
un moyen de ne pas écrire.
11
Objets et structures de données
• Exprimer nos données en termes abstraits
• La différence entre les objets et les structures de données :
 Les objets cachent leurs données derrière des abstractions et exposent les fonctions
qui fonctionnent sur ces données.
 Les structure des données exposent leurs données et n‘ont aucune fonction
significative.
12
Objets et structures de données
- La loi de Demeter
- Une méthode f d'une classe C devrait seulement appeler les méthodes de :
- C
- Un objet créé par f
- Un objet passé comme argument à f
- Un objet détenu dans une variable d'instance de C
13
Gestion des erreurs
• Utilisation des exceptions.
• Définir des classes d'exception
• Ne Jamais retourner Nul
14
SOLID
• Single responsibility principle
• Open/closed principle :
 Abstraction
 Polymorphisme.
• Liskov substitution principle
• Interface segregation principle
• Dependency inversion principle
 Les modules de haut niveau ne doivent pas dépendre des modules de bas niveau.
Les deux doivent dépendre d'abstractions.
 Les abstractions ne doivent pas dépendre des détails. Les détails doivent dépendre
des abstractions.
15
Test Unitaire
• Les trois lois de TDD :
1. Ecrire un test qui échoue avant d’écrire tout code de production
2. Ne pas écrire plus d’un test suffisant pour échouer, ou qui échouera à la
compilation
3. Ne pas écrire plus de code que nécessaire pour faire passer le test en cours
16
Cela évite souvent des erreurs de conception dues à une précipitation
dans l'implémentation avant d'avoir défini les objectifs.
Test Unitaire
• F.I.R.S.T les principes de test unitaire:
1. Fast
2. Independent
3. Repeatable
4. Self-Validating
5. Timely
17
Emergence
Règles 4: Classes et
méthodes minimales
Règle 3: Expressive
Règle 2: pas de duplication
Règle 1: Exécute tous les tests
18
Autre Conseils
• N’écrivez pas de Singleton !
 Mettez en place l’injection de dépendances
 Et gérez la durée de vie de vos objets
• Ne pensez pas héritage, pensez polymorphisme
 Sinon : "a un" au lieu de "est un“
• Ne pensez pas "switch/if", pensez polymorphisme
 Design Pattern strategy
• Un code non testé n’est pas maintenable
19

Contenu connexe

En vedette

Dubai Food Carnival 2015
Dubai Food Carnival 2015Dubai Food Carnival 2015
Dubai Food Carnival 2015Michael Eberle
 
VHeB Presentation at CFICC 2012
VHeB Presentation at CFICC 2012VHeB Presentation at CFICC 2012
VHeB Presentation at CFICC 2012Faiyaz Naveed
 
GIFT_Presentation_July_03072015
GIFT_Presentation_July_03072015GIFT_Presentation_July_03072015
GIFT_Presentation_July_03072015Avi Maniar
 
KINI ANTHONY OTOHO CV
KINI ANTHONY OTOHO CVKINI ANTHONY OTOHO CV
KINI ANTHONY OTOHO CVKini Anthony
 
Storing passwords-honey words
Storing passwords-honey wordsStoring passwords-honey words
Storing passwords-honey wordskandulasindhu
 
Kawal Career Connections - Recruitment proposal
Kawal Career Connections - Recruitment proposalKawal Career Connections - Recruitment proposal
Kawal Career Connections - Recruitment proposalKawalpreet Sethi
 
Nick Fleetwood, Head of Financial Services, Oracle’s Maxymiser - Optimization...
Nick Fleetwood, Head of Financial Services, Oracle’s Maxymiser - Optimization...Nick Fleetwood, Head of Financial Services, Oracle’s Maxymiser - Optimization...
Nick Fleetwood, Head of Financial Services, Oracle’s Maxymiser - Optimization...Mezzo Labs
 
Нехай квітне моя Україна,як єдина і мирна сім´я!!!
Нехай квітне моя Україна,як єдина і мирна сім´я!!! Нехай квітне моя Україна,як єдина і мирна сім´я!!!
Нехай квітне моя Україна,як єдина і мирна сім´я!!! Рая Матерецька
 
7lastplagues 140401115541-phpapp02
7lastplagues 140401115541-phpapp027lastplagues 140401115541-phpapp02
7lastplagues 140401115541-phpapp02Nick Pellicciotta
 
Aplicaciones modernas con React.js
Aplicaciones modernas con React.jsAplicaciones modernas con React.js
Aplicaciones modernas con React.jsOctavio Luna Bernal
 

En vedette (13)

Dubai Food Carnival 2015
Dubai Food Carnival 2015Dubai Food Carnival 2015
Dubai Food Carnival 2015
 
VHeB Presentation at CFICC 2012
VHeB Presentation at CFICC 2012VHeB Presentation at CFICC 2012
VHeB Presentation at CFICC 2012
 
GIFT_Presentation_July_03072015
GIFT_Presentation_July_03072015GIFT_Presentation_July_03072015
GIFT_Presentation_July_03072015
 
GeniusPlacement_Corporate Profile
GeniusPlacement_Corporate ProfileGeniusPlacement_Corporate Profile
GeniusPlacement_Corporate Profile
 
KINI ANTHONY OTOHO CV
KINI ANTHONY OTOHO CVKINI ANTHONY OTOHO CV
KINI ANTHONY OTOHO CV
 
Storing passwords-honey words
Storing passwords-honey wordsStoring passwords-honey words
Storing passwords-honey words
 
Kawal Career Connections - Recruitment proposal
Kawal Career Connections - Recruitment proposalKawal Career Connections - Recruitment proposal
Kawal Career Connections - Recruitment proposal
 
Nick Fleetwood, Head of Financial Services, Oracle’s Maxymiser - Optimization...
Nick Fleetwood, Head of Financial Services, Oracle’s Maxymiser - Optimization...Nick Fleetwood, Head of Financial Services, Oracle’s Maxymiser - Optimization...
Nick Fleetwood, Head of Financial Services, Oracle’s Maxymiser - Optimization...
 
Нехай квітне моя Україна,як єдина і мирна сім´я!!!
Нехай квітне моя Україна,як єдина і мирна сім´я!!! Нехай квітне моя Україна,як єдина і мирна сім´я!!!
Нехай квітне моя Україна,як єдина і мирна сім´я!!!
 
Hematology mnemonics
Hematology mnemonicsHematology mnemonics
Hematology mnemonics
 
7lastplagues 140401115541-phpapp02
7lastplagues 140401115541-phpapp027lastplagues 140401115541-phpapp02
7lastplagues 140401115541-phpapp02
 
12 sabba (1)
 12 sabba (1) 12 sabba (1)
12 sabba (1)
 
Aplicaciones modernas con React.js
Aplicaciones modernas con React.jsAplicaciones modernas con React.js
Aplicaciones modernas con React.js
 

Similaire à Clean code

[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?
[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?
[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?Christophe HERAL
 
Test Driven Development (aka TDD) for agile teams
Test Driven Development (aka TDD) for agile teamsTest Driven Development (aka TDD) for agile teams
Test Driven Development (aka TDD) for agile teamsThierry Gayet
 
7 astuces pour améliorer vos tests unitaires
7 astuces pour améliorer vos tests unitaires7 astuces pour améliorer vos tests unitaires
7 astuces pour améliorer vos tests unitairesPascal Laurin
 
SOLID Maitrisez votre programmation Objet​
SOLID Maitrisez votre programmation Objet​SOLID Maitrisez votre programmation Objet​
SOLID Maitrisez votre programmation Objet​Vincent Petetin
 
AgileTour Toulouse 2012 : clean code en pratique
AgileTour Toulouse 2012 : clean code en pratiqueAgileTour Toulouse 2012 : clean code en pratique
AgileTour Toulouse 2012 : clean code en pratiqueAgile Toulouse
 
Top 5 des meilleures façon d'améliorer ton code
Top 5 des meilleures façon d'améliorer ton codeTop 5 des meilleures façon d'améliorer ton code
Top 5 des meilleures façon d'améliorer ton codeEric De Carufel
 
C'est quoi, du bon code ?
C'est quoi, du bon code ?C'est quoi, du bon code ?
C'est quoi, du bon code ?Rémi Lesieur
 
Une architecture agile et testable
Une architecture agile et testableUne architecture agile et testable
Une architecture agile et testablemartinsson
 
L'amélioration des tests unitaires par le refactoring
L'amélioration des tests unitaires par le refactoringL'amélioration des tests unitaires par le refactoring
L'amélioration des tests unitaires par le refactoringMSDEVMTL
 
[Agile Testing Day] Test Driven Development (TDD)
[Agile Testing Day] Test Driven Development (TDD)[Agile Testing Day] Test Driven Development (TDD)
[Agile Testing Day] Test Driven Development (TDD)Cellenza
 
Commencer avec le tdd
Commencer avec le tddCommencer avec le tdd
Commencer avec le tddEric Hogue
 
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)French Scrum User Group
 
Tester c'est douter - Linkvalue tech
Tester c'est douter - Linkvalue techTester c'est douter - Linkvalue tech
Tester c'est douter - Linkvalue techMarine Karam
 
Code Review Cocoaheads Lyon 2018
Code Review Cocoaheads Lyon 2018Code Review Cocoaheads Lyon 2018
Code Review Cocoaheads Lyon 2018Benjamin Lavialle
 

Similaire à Clean code (20)

[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?
[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?
[Agile Tour Paris 2014] Comment rendre testable du code qui ne l'est pas ?
 
Test Driven Development (aka TDD) for agile teams
Test Driven Development (aka TDD) for agile teamsTest Driven Development (aka TDD) for agile teams
Test Driven Development (aka TDD) for agile teams
 
7 astuces pour améliorer vos tests unitaires
7 astuces pour améliorer vos tests unitaires7 astuces pour améliorer vos tests unitaires
7 astuces pour améliorer vos tests unitaires
 
Université du soir - TDD
Université du soir - TDDUniversité du soir - TDD
Université du soir - TDD
 
SOLID Maitrisez votre programmation Objet​
SOLID Maitrisez votre programmation Objet​SOLID Maitrisez votre programmation Objet​
SOLID Maitrisez votre programmation Objet​
 
Flex Unit Testing
Flex Unit TestingFlex Unit Testing
Flex Unit Testing
 
AgileTour Toulouse 2012 : clean code en pratique
AgileTour Toulouse 2012 : clean code en pratiqueAgileTour Toulouse 2012 : clean code en pratique
AgileTour Toulouse 2012 : clean code en pratique
 
Top 5 des meilleures façon d'améliorer ton code
Top 5 des meilleures façon d'améliorer ton codeTop 5 des meilleures façon d'améliorer ton code
Top 5 des meilleures façon d'améliorer ton code
 
C'est quoi, du bon code ?
C'est quoi, du bon code ?C'est quoi, du bon code ?
C'est quoi, du bon code ?
 
Clean code en pratique
Clean code en pratiqueClean code en pratique
Clean code en pratique
 
Une architecture agile et testable
Une architecture agile et testableUne architecture agile et testable
Une architecture agile et testable
 
L'amélioration des tests unitaires par le refactoring
L'amélioration des tests unitaires par le refactoringL'amélioration des tests unitaires par le refactoring
L'amélioration des tests unitaires par le refactoring
 
[Agile Testing Day] Test Driven Development (TDD)
[Agile Testing Day] Test Driven Development (TDD)[Agile Testing Day] Test Driven Development (TDD)
[Agile Testing Day] Test Driven Development (TDD)
 
Commencer avec le tdd
Commencer avec le tddCommencer avec le tdd
Commencer avec le tdd
 
Qualité de code et bonnes pratiques
Qualité de code et bonnes pratiquesQualité de code et bonnes pratiques
Qualité de code et bonnes pratiques
 
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
 
Tester c'est douter - Linkvalue tech
Tester c'est douter - Linkvalue techTester c'est douter - Linkvalue tech
Tester c'est douter - Linkvalue tech
 
Code Review Cocoaheads Lyon 2018
Code Review Cocoaheads Lyon 2018Code Review Cocoaheads Lyon 2018
Code Review Cocoaheads Lyon 2018
 
Test unitaire
Test unitaireTest unitaire
Test unitaire
 
Rails 3 au Djangocong
Rails 3 au DjangocongRails 3 au Djangocong
Rails 3 au Djangocong
 

Clean code

  • 1. CLEAN CODE Writing clean code is what you must do in order to call yourself a professional. There is no reasonable excuse for doing anything less than your best.
  • 2. Vue d’ensemble • Noms significatifs • Fonction • Commentaire • Objets et structures de données • Gestion des erreurs • SOLID • Test unitaire • Emergence 2
  • 3. Pourquoi clean code • Simple et direct • Élégant • Efficace • Lisible • Facile à améliorer • Pas de doublons 3
  • 4. Noms significatifs • Pourquoi existent-t-ils? • Qu'est-ce qu'ils font ? • Comment sont-ils utilisés? 4
  • 5. Noms significatifs Évitez d'utiliser le même mot Choisir un mot par concept Faire des distinctions significatives Utiliser des noms prononçables Utiliser des noms consultables Éviter les encodages Éviter la cartographie mentale 5
  • 6. Les Fonctions • Coeur des programmes. • « La première règle des fonctions est qu'elles doivent être petites ». • La forte cohésion. • Le nombre idéal d'arguments est Zéro • Pas d'effets secondaires. • Préférer les exceptions. • Plus que trois arguments ne doivent pas être utilisés. 6
  • 7. Les Fonctions Préférer une exception que retourner un message d'erreur 7
  • 8. Les Fonctions - Pas d'effets secondaires 8
  • 10. Commentaires • Commentaires API publics • Commentaires légaux • Explication de l'intention • Avertissement pour les conséquences • real TODO Commentaires • Commentaires redondants • Commentaire bruyant • Marqueurs de position • Code commenté • Commentaires obsolètes 10
  • 11. Commentaires • Le seul commentaire vraiment bon est le commentaire que vous avez trouvé un moyen de ne pas écrire. 11
  • 12. Objets et structures de données • Exprimer nos données en termes abstraits • La différence entre les objets et les structures de données :  Les objets cachent leurs données derrière des abstractions et exposent les fonctions qui fonctionnent sur ces données.  Les structure des données exposent leurs données et n‘ont aucune fonction significative. 12
  • 13. Objets et structures de données - La loi de Demeter - Une méthode f d'une classe C devrait seulement appeler les méthodes de : - C - Un objet créé par f - Un objet passé comme argument à f - Un objet détenu dans une variable d'instance de C 13
  • 14. Gestion des erreurs • Utilisation des exceptions. • Définir des classes d'exception • Ne Jamais retourner Nul 14
  • 15. SOLID • Single responsibility principle • Open/closed principle :  Abstraction  Polymorphisme. • Liskov substitution principle • Interface segregation principle • Dependency inversion principle  Les modules de haut niveau ne doivent pas dépendre des modules de bas niveau. Les deux doivent dépendre d'abstractions.  Les abstractions ne doivent pas dépendre des détails. Les détails doivent dépendre des abstractions. 15
  • 16. Test Unitaire • Les trois lois de TDD : 1. Ecrire un test qui échoue avant d’écrire tout code de production 2. Ne pas écrire plus d’un test suffisant pour échouer, ou qui échouera à la compilation 3. Ne pas écrire plus de code que nécessaire pour faire passer le test en cours 16 Cela évite souvent des erreurs de conception dues à une précipitation dans l'implémentation avant d'avoir défini les objectifs.
  • 17. Test Unitaire • F.I.R.S.T les principes de test unitaire: 1. Fast 2. Independent 3. Repeatable 4. Self-Validating 5. Timely 17
  • 18. Emergence Règles 4: Classes et méthodes minimales Règle 3: Expressive Règle 2: pas de duplication Règle 1: Exécute tous les tests 18
  • 19. Autre Conseils • N’écrivez pas de Singleton !  Mettez en place l’injection de dépendances  Et gérez la durée de vie de vos objets • Ne pensez pas héritage, pensez polymorphisme  Sinon : "a un" au lieu de "est un“ • Ne pensez pas "switch/if", pensez polymorphisme  Design Pattern strategy • Un code non testé n’est pas maintenable 19

Notes de l'éditeur

  1. Robert Cecil Martin (familièrement connu sous le nom de Oncle Bob) est un ingénieur logiciel américain et auteur, La mission de cette série est d'améliorer l'état de l'art de l'artisanat logiciel. Les livres de cette série sont techniques, pragmatiques et substantiels.
  2. Les noms de variables, de fonctions ou de classes doivent répondre à toutes les grandes questions:
  3. Noms des classes Nom des méthodes Ne soyez pas mignon Évitez d'utiliser le même mot Ajouter un contexte significatif
  4. What we call them: functions, methods, modules La forte cohésion : FONCTIONS DOIVENT FAIRE UNE CHOSE. IL DEVRAIT LE FAIRE BIEN. ILS DOIVENT LE FAIRE SEULEMENT. Un niveau d'abstraction par fonction Nom reflète la seule tâche qu'il accomplit Lorsqu'une fonction semble avoir besoin de plus de deux ou trois arguments, il est probable que certains de ces arguments doivent être enveloppés dans une classe de leur propre. Considérons, par exemple, la différence entre les deux déclarations suivantes: Réduire le nombre d'arguments en créant des objets hors d'eux peut sembler tricher, mais ce n'est pas le cas.
  5. L'effet secondaire est l'appel à Session.initialize (), bien sûr. La fonction checkPassword, par son nom, indique qu'elle vérifie le mot de passe. Le nom n'implique pas qu'il initialise la session. Ainsi, un appelant qui croit que le nom de la fonction dit courir le risque d'effacer les données de session existante quand il ou elle décide de vérifier la validité de l'utilisateur. Cet effet secondaire crée un couplage temporel. C'est-à-dire, checkPassword ne peut être appelé qu'à certains moments (en d'autres termes, quand il est sûr d'initialiser la session). Si elle est appelée hors service, les données de session peuvent être perdues par inadvertance. Les couplages temporels sont déroutants, surtout lorsqu'ils sont cachés comme effets secondaires. Si vous devez avoir un couplage temporel, vous devriez le préciser au nom de la fonction. Dans ce cas, nous pouvons renommer la fonction checkPasswordAndInitializeSession, bien que cela viole certainement "Do one thing."
  6. Le but d'un commentaire est d'expliquer le code qui ne s'explique pas. " Les commentaires ne compensent pas le mauvais code N'utilisez pas de commentaire lorsque vous pouvez utiliser une fonction ou une variable Les commentaires peuvent contenir des mensonges
  7. Gardez à l'esprit, cependant, que
  8. Il y a une raison pour que nous gardions nos variables privées. Nous ne voulons pas que d'autres dépendent d'eux. Nous ne voulons pas exposer les détails de nos données, Nous voulons plutôt Ce n'est pas seulement accompli en utilisant des interfaces et / ou getters et setters. La pensée sérieuse doit être mise de la meilleure façon de représenter les données qu'un objet contient. La pire option est d'ajouter joyeusement getters et setters.
  9. Le code 3 suivant semble violer la loi de Demeter parce qu'il appelle la fonction getScratchDir () sur la valeur de retour de getOptions () et appelle getAbsolutePath () sur la valeur de retour de getScratchDir ().
  10. Single responsibility principle Every object should have a single responsibility, and that responsibility should be entirely encapsulated by the class doit être à la fois ouverte (à l'extension) et fermée (à la modification). « Ouverte » signifie qu'elle a la capacité d'être étendue. « Fermée » signifie qu'elle ne peut être modifiée que par extension, sans modification de son code source. L'idée est qu'une fois qu'une classe a été approuvée via des revues de code, des tests unitaires et d'autres procédures de qualification, elle ne doit plus être modifiée mais seulement étendue. Si S est un sous-type de T, les objets de type T peuvent être remplacés par des objets de type S (Barbara Liskov in a 1987 ) Etat qu'aucun client ne doit être forcé de dépendre de méthodes qu'elle n'utilise pas
  11. Ces tests permettent aussi de préciser les spécifications du code. Ce qui facilite la production d'un code valide en toutes circonstances. On obtient donc un code plus juste et plus fiable, L'utilisation de TDD permet la construction conjointe du programme et d'une suite de tests de non-régression.
  12. Fonctionne rapidement Les tests ne doivent pas dépendre les uns des autres Les tests doivent être répétables dans n'importe quel environnement. Vous devriez être en mesure d'exécuter les tests dans l'environnement de production, Les tests doivent avoir une sortie booléenne. Soit ils passent ou échouent, Doit couvrir chaque scénario de cas d'utilisation et ne vise pas seulement à 100% de couverture. Doit essayer de viser Test Driven Development (TDD) de sorte que le code n'a pas besoin de refactoring plus tard.
  13. Et si il y avait quatre règles simples qu’on peut suivre qui pour nous aider à créer de bonnes conceptions? Et si ces quatre règles facilitent l'émergence de bonnes conceptions? Selon Kent, une conception est «simple» si elle suit ces règles: Vous pouvez vous exprimer en choisissant de bons noms. Vous pouvez également vous exprimer en gardant vos fonctions et classes de petite taille. Les petites classes et les fonctions sont généralement faciles à nommer, faciles à écrire et faciles à comprendre. Vous pouvez également vous exprimer en utilisant la nomenclature standard. votre conception à d'autres développeurs.