Une des choses que j'ai apprises en programmation n'est pas que vous n'avez pas besoin d'instructions de cas, vous ne voulez pas d'instructions de cas.
Les instructions de cas sont le moyen de gonfler un objet. Quand vous l'utilisez, vous dégradez la maintenance. Vous aurez toutes les possibilités que vous voulez à ce moment-là, mais le jour où vous voulez ajouter quelque chose, vous devrez passer en revue un code méchant quand vous ne vous souvenez plus des subtilités de la responsabilité de cet objet, donc vous le flouerez encore plus. À très court terme, ils ont l'air amical, mais les déclarations de cas ne sont pas vos amis. Ils vont vous mordre à long terme.
De plus, ils rendent votre code moins flexible. Par exemple, vous ne pouvez pas ajouter un cas avec confiance au code précédent. Vous êtes obligé de revoir l'ancien code quand vous ne vous en souvenez plus pourquoi il a été codé comme ça.
Les instructions de cas sont des ennemis du bon code.
Si vous avez quelque chose qui va au-delà ifTrue: ifFalse: alors la bonne chose à faire est de faire des états pour cela. Donc, ce que vous faites est de mettre en œuvre trois classes qui sont très simples et ils comprennent tous un verbe.
Dites, #doTheNextThing. Ainsi, lorsque l'objet reçoit le message, il délègue à l'état (quel que soit l'un de ces 3 (ou 30, donc notez bien la complexité de ces échelles)) et l'état sait comment faire réagir correctement le récepteur original. Cela laissera votre code léger, évident et hautement maintenable.Vous serez en mesure d'oublier cela parce que vous savez que lorsque vous le regardez à nouveau, tout est si évident que vous n'avez pas besoin de penser au passé de votre code autant qu'à l'avenir de votre code. C'est important parce que votre mémoire est la mémoire la plus chère que vous ayez et AFAIK n'est pas évolutive. Donc, cette technique vous permet de faire des choses plus puissantes. En outre, faire 3 classes peut sembler plus de travail pour certains mais ne l'est pas. Tout noob peut ajouter 3 classes vides en un clin d'œil mais seul le bon expert se rappellera comment une déclaration de cas dans l'ancien code a été faite comme elle a été faite. Et si vous êtes extrêmement optimiste, il faudra quelques minutes pour le rappeler afin que vous sachiez quoi faire ensuite. Pensez-y.
En principe, je suis d'accord. Il m'est difficile de voir comment on pourrait s'améliorer, en termes de lisibilité, sur l'utilisation de #caseOf par Andreas Raab: sinon: dans DnsClient (sur SqueakSource). –