2010-10-01 31 views
0

Souvent dans la programmation, il est très courant que certaines fonctionnalités requièrent beaucoup de logique conditionnelle, mais pas assez pour justifier un moteur de règles. Par exemple, tester un nombre est divisible par x, mais aussi un multiple de quelque chose, un facteur d'autre chose, une racine carrée de quelque chose, etc. Comme vous pouvez l'imaginer, quelque chose dans ce sens impliquera facilement beaucoup de ifs/elses.Toute technique mentale permettant de déduire rapidement les ifs/elses requis dans un programme avec BEAUCOUP de logique conditionnelle?

Alors qu'il est possible de réduire le fouillis avec des techniques de programmation plus modernes, comment pouvez-vous rapidement et, d'une manière calculée, déduire les ifs/elses requis? Par exemple, dans un programme pour en déduire le devis nécessaire pour un client potentiel d'assurance automobile (hors règles), il y aurait une logique conditionnelle pour l'âge, l'emplacement, les points de conduite, l'âge auquel ces points sont collectés, etc. Existe-t-il une technique mentale pour déduire rapidement les branches conditionnelles redondantes? Est-ce juste une expérience simple et aucune technique mentale spéciale? Ceci est important parce que la programmation en binôme est très bruyante et donc difficile de penser à quelque chose ou même d'avoir assez de temps pour mettre en œuvre l'idée.

Merci

+1

Votre pair est censé vous aider à réfléchir à la complexité, ne pas interférer avec la pensée. – Oded

+2

Censé à, oui. Mais pour les problèmes qui nécessitent un effort mental soutenu sans distraction, j'en doute. La programmation en paire me semble être un enfer. – JasonFruit

+0

Je pense que cette question convient mieux à http://programmers.stackexchange.com. –

Répondre

3

Je suggère que d'essayer de faire ce genre de chose dans votre tête demande des ennuis, et essayer de le faire avec un partenaire va le rendre bien pire. Parfois, vous devez vous asseoir et penser et même prendre des notes sur papier. Si vous n'aimez pas la logique propositionnelle, essayez decision tables.

+0

C'est la seule réponse raisonnablement utile que je peux imaginer ici. – JasonFruit

+0

Bonne idée. J'ai juste besoin d'un exemple d'utilisation de tables de décision pour modéliser la logique puis le code réel. – dotnetdev

+0

@dotnetdev: suivez le lien? –

0

Je dirais que vous devriez utiliser la logique propositionnelle. Proposer que: q = âge est supérieur à 18
p = emplacement est à moins de 10 miles
r = points d'entraînement sont inférieures à 3
s = âge est inférieure à 18 lorsque les points sont collectés

vous pourrait dire ...
(^ is AND)
if (q^p^r^s) {
//you are eligible or something!
} else {
//get outta here
}

1

J'ajouter des méthodes simples, lisibles, courts, tels que:

IsMinor(..) 
IsRecordClean(..) 

Et puis les utiliser conjointement pour créer de nouvelles méthodes avec des noms significatifs, tels que:

IsMeetingPreReqs(..) //which checks several "simple" conditions 
IsValidForInsurance(..) 

(Désolé pour les exemples, je me bats avec mon anglais ici, mais vous obtenez le point ..)

IMO qui rendra votre code beaucoup plus clair, et donc réduire les chances d'être confondu par des distractions.
Pas mental en soi, mais un peu ..

+2

Je ne pense pas que 'IsDivisibleAndMultipleOf (..)' est un bon nom, car il est essentiellement sans signification sauf pour tester une condition apparemment arbitraire. En général, si vous êtes tenté de mettre un "et" dans le nom de la fonction, vous écrivez une mauvaise fonction. –

+0

Cette méthode n'existe plus! –