70 votes

Programmation sans condition (en fait, sans conditionnel)

J'ai un collègue qui m'a dit qu'il avait travaillé dans une entreprise qui avait pour politique de ne jamais avoir de conditionnelles (instructions "if" et "switch") dans le code et qu'ils laissaient toutes les décisions dans le code être prises en utilisant le polymorphisme et (je suppose) d'autres principes OO.

I en quelque sorte Je comprends le raisonnement qui sous-tend ce concept, à savoir que le code est plus rationnel et plus facile à mettre à jour, mais je cherche une explication plus approfondie de ce concept. Ou peut-être cela fait-il partie d'une approche de conception plus générale.

Si quelqu'un a des ressources à ce sujet ou est prêt à expliquer ou même à avoir d'autres termes liés à ce sujet que je peux utiliser pour trouver plus de réponses, je vous en serais très reconnaissant.

J'ai trouvé une question sur le SO c'était un peu lié mais je ne suis pas familier avec le C++ donc je ne comprends pas trop les réponses.

(Je ne suis pas un gourou de l'OO, mais je peux me débrouiller).

Je suis plus compétent en PHP, et ensuite en Python, donc je préfère les informations qui utilisent ces langages.

Mise à jour : je demanderai à mon collègue plus d'informations sur ce qu'il voulait dire exactement.

Mise à jour 2015 : après quelques années supplémentaires d'expérience en programmation, je vois maintenant que le but de cette politique était probablement d'empêcher les programmeurs d'ajouter des fonctionnalités de manière désordonnée en ajoutant simplement des conditionnels (instructions if) à certains endroits. Une meilleure façon d'étendre un logiciel est d'utiliser la fonction "Principe d'ouverture/fermeture" où les logiciels sont étendus en utilisant l'héritage et le polymorphisme. Je doute fortement que la politique ait été super stricte sur tous les conditionnels car il est assez difficile de s'en passer complètement.

16 votes

Quelle est cette entreprise dont parle votre collègue ? Je demande pour pouvoir les éviter. Les instructions de contrôle de flux sont fondamentales pour la programmation. Si je ne peux même pas utiliser les outils les plus basiques lorsqu'ils sont appropriés pour faire le travail, qu'est-ce que je ne peux pas utiliser d'autre ? Oui, il est vrai que vous pouvez abuser if mais c'est vrai pour tout le reste.

16 votes

@In silico - Les déclarations de contrôle de flux sont fondamentales pour procédure la programmation. Le polymorphisme est fondamental pour la programmation orientée objet. Cela dit, la plupart d'entre nous utilisent les deux paradigmes.

6 votes

@TrueWill : Le contrôle du flux est fondamental pour la programmation impérative, et la POO est autant basée sur la programmation impérative que sur la programmation procédurale. Même lorsque vous faites de la POO "pure", vous avez toujours la même chose enveloppée dans une robe légèrement plus POO ( condition ifTrue tel que Smalltalk le fait, a essentiellement le même effet et la même signification que if condition ). Et vous ont d'utiliser un certain contrôle de flux sur le polymorphisme, à moins que vous ne vouliez envelopper tout (comme la régularité d'un nombre entier) en objets dédiés.

0voto

TGW Points 561

Éviter les conditionnels ne signifie pas nécessairement que vous devez le faire par polymorphisme ou héritage, prenez par exemple :

Vous disposez de 3 dossiers différents pour stocker les images téléchargées, les vidéos téléchargées et les pdf téléchargés.

Vous pouvez écrire le code comme :

uploadMedia(mediaType){
   if(mediaType == images){
     uploadTo("myProject/images");
   }else if(mediaType == videos){
     upoloadTo("myProject/videos);  
   }else if(mediaType == pdf){
     uploadTo("myProject/pdf");
  }
}

Une autre alternative que les gens peuvent utiliser est le switch-case :

uploadMedia(mediaType){
         switch(mediaType){
         case : images
         uploadTo("myProject/images");
         break;

         case : videos
         uploadTo("myProject/videos");
         break;

         case : pdf
         uploadTo("myProject/pdf");
         break;
    }
}

Mais vous pouvez totalement éviter la déclaration conditionnelle en utilisant quelque chose comme un dictionnaire/hashmap/json (en fonction de ce avec quoi vous travaillez) :

Par exemple :

HashMap<String,String> mediaMap = new HashMap<>();

mediaMap.put("images","myProject/images");
mediaMap.put("videos","myProject/videos");
mediaMap.put("pdf","myProject/pdf");

//mediaType can be images/videos/pdf same as keys of mediaMap
uploadMedia(mediaType){
  uploadTo(mediaMap.get(mediaType));
}

Il s'agit d'une sorte de pseudo-code, il peut donc y avoir des erreurs de syntaxe, mais dans l'ensemble, ce concept est également utile pour éviter les conditionnels. De plus, le nombre de lignes de code peut être réduit.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X