Comments on: Usages et dangers du null object pattern en Python http://sametmax.com/usages-et-dangers-du-null-object-pattern-en-python/ Du code, du cul Sat, 07 Nov 2015 11:08:18 +0000 hourly 1 http://wordpress.org/?v=4.1 By: GeoStoneMarten http://sametmax.com/usages-et-dangers-du-null-object-pattern-en-python/#comment-17166 Tue, 17 Dec 2013 19:01:20 +0000 http://sametmax.com/?p=3149#comment-17166 Hummm. En effet c’est dangereux mais pas besoin de levé une exception à chaque fois qu’un cas non souhaité est mis au placard. Le fait de rien renvoyé n’est pas problématique. Tu peux cependant ajouter un logger.debug dans le script si c’est nécessaire à certain endroit à la façon de JAVA.

C’est comme pour les conditions! if elif else.
j’aimerai bien savoir qui blinde son code et met dans le else les cas non étudié lors de la conception du programme.

Genre exemple simple: J’ai une ligne vide dans un fichier csv si celle-ci est vide je renvoi pas une erreur je l’ignore mais je le spécifie dans la doc comme étant un cas volontairement ignoré.

Programmer c’est aussi expliquer les limites d’un programme! Et donc la doc c’est important tous comme un bon modèle.

Au moins on le sais si c’est Null ben c’est Null.

]]>
By: JM http://sametmax.com/usages-et-dangers-du-null-object-pattern-en-python/#comment-3968 Sun, 09 Dec 2012 21:26:59 +0000 http://sametmax.com/?p=3149#comment-3968 Marrant, mais un peu dérangeant pour une méthode de masquage d’erreur. C’est bien d’avoir dit que c’est un outil dangereux.

“objections tout à fait valide//s/”

]]>
By: Réchèr http://sametmax.com/usages-et-dangers-du-null-object-pattern-en-python/#comment-3926 Fri, 07 Dec 2012 00:12:35 +0000 http://sametmax.com/?p=3149#comment-3926 Je m’en servirais probablement jamais, mais je trouve ça rigolo.

J’aime bien les différentes façons dont les langages de programmation expriment le vide. Ça amène parfois des concepts bizarres.
*void rien = NULL;
Tout ça …

]]>
By: Sam http://sametmax.com/usages-et-dangers-du-null-object-pattern-en-python/#comment-3904 Wed, 05 Dec 2012 22:49:29 +0000 http://sametmax.com/?p=3149#comment-3904 Le potentiel de foirage et la difficulté de debuggage est plus importante avec le Null object car il retourne un Null object. On peut donc “contaminer” tout son jeux de données avec plein de Null objects si on ne fait pas attention.

]]>
By: anthony http://sametmax.com/usages-et-dangers-du-null-object-pattern-en-python/#comment-3903 Wed, 05 Dec 2012 21:51:01 +0000 http://sametmax.com/?p=3149#comment-3903 Y a bien des fois où on fait un:

try:

except:
pass

sans que ça pose problème non ? Alors pourquoi le null object serait problématique en lui même ?

]]>
By: Sam http://sametmax.com/usages-et-dangers-du-null-object-pattern-en-python/#comment-3898 Wed, 05 Dec 2012 16:26:31 +0000 http://sametmax.com/?p=3149#comment-3898 Ok, j’ai fais un édit pour rajouter un exemple d’usage. Ça m’apprendra à faire ma feignasse en me disant “c’est bon, ça va passer” et en écoutant pas mes propres conseils.

]]>
By: Sam http://sametmax.com/usages-et-dangers-du-null-object-pattern-en-python/#comment-3897 Wed, 05 Dec 2012 15:56:41 +0000 http://sametmax.com/?p=3149#comment-3897 Je comprends bien ce que tu veux dire. Le message que j’essaye de faire passer c’est juste que, utilisé correctement, l’usage de Null() n’est pas fait pour masquer des erreurs, mais juste pour faire “rien” dans les cas où il n’y a rien à faire. C’est bel et bien du duck typing: on a la signature appropriée, on peut tout faire, c’est juste qu’il n’y a aucun effet.

Je crois que mon tort c’est de n’avoir pas posté un example d’utilisation concret.

]]>
By: Moumoutte http://sametmax.com/usages-et-dangers-du-null-object-pattern-en-python/#comment-3895 Wed, 05 Dec 2012 13:50:51 +0000 http://sametmax.com/?p=3149#comment-3895

C’est complètement différemment

Mock se comporte exactement comme tu le décris dans ton objet NULL. Là pour le coups, non ce n’est pas différent.

mais pour renforcer le duck typing.

L’intêret du duck typing c’est de se dire “Si il vole comme un oiseau, c’est que c’est peut-être un oiseau”, d’où :

>> bird.fly()
"I'm flying !"

Donc, si l’objet ne vole pas , je veux qu’il se casse la gueule, pas lui greffer des prothèses pour qu’il vole 5m et qu’il se casse la gueule après pour faire encore plus de dégats.

>> car.fly()
AttributeError: 'Car' object has no attribute 'fly'

Y’a que chez Harry Potter que les voitures ça vole, et même dans ce monde merveilleux, elle finit par se ramasser lamentablement dans un sol cogneur.
Autant qu’elle ne commence même pas à voler, ça aurait éviter bien des problèmes.

D’ailleurs, c’est souligné dans l’article de wikipedia sur le duck typing

“If the object does not have the methods that are called then the function signals a run-time error”

On s’attend bien à avoir une erreur au runtime, pas qu’elle soit masquée.

(Cela dit, ce n’est pas parce que je ne suis pas d’accord sur ce point d’utilisation, que de manière général , je ne suis pas satisfait de votre boulot de blogeur python. J’en apprend régulièrement avec vous, continuez à écrire, c’est vraiment chouette de vous lire :))

]]>
By: Sam http://sametmax.com/usages-et-dangers-du-null-object-pattern-en-python/#comment-3884 Tue, 04 Dec 2012 22:36:11 +0000 http://sametmax.com/?p=3149#comment-3884 C’est complètement différemment. Mock c’est pour les tests. Nul n’est pas là pour enfouir les erreurs, mais pour renforcer le duck typing.

Comme try/except utilisé pour la gestion des flux n’est pas une aberration en Python.

Il ne faut pas être dogmatique, ça élimine des opportunités de progression.

]]>
By: Moumoutte http://sametmax.com/usages-et-dangers-du-null-object-pattern-en-python/#comment-3883 Tue, 04 Dec 2012 22:18:04 +0000 http://sametmax.com/?p=3149#comment-3883

Utilisez le bon outil pour le bon travail, je ne cesserai de le répéter.

ouais sauf que là à mon sens, c’est vraiment pas le bon cas d’utilisation.

Il existe une bibliothèque qui intègre déjà se pattern: mock. Sauf que ce n’est absolument pas pour “économiser des if”. C’est principalement pour créer des “bouchons” avec l’environnement extérieur (ou pas) et ISOLER le code pour faire des tests unitaires.

Utiliser se pattern pour enfouir des erreurs, c’est absolument à proscrire.

]]>