I often wish for a more rich way to layout a complex 2-level decision tree. Dividing it up into sub-functions/classes scatters the logic, while putting it all together is too heavy. However a 2D decision table would often be perfect.
I’ve just tracked it down. Here’s something about it by the same author Roedy Green (author of How to Write Unmaintainable Code) http://mindprod.com/project/scid.html (look for the words ‘decision table’)
How about Python? It lets you put your procedures in tables - dispatch tables, that is:
def eat(): print "eating"; def walk(): print "walking"
t = {"eat": eat, "walk": walk}
# now call the reqd. function via string s read from somewhere: keyboard, file, etc. ...
t[s]() # error handling omitted
Kidding apart:
>Dividing it up into sub-functions/classes scatters the logic
What is the issue with scattering the logic? if you break up your problem/solution into different logical units, with good judgement as to the points of breakup (i.e. coupling, cohesion, etc.), then what is the issue? Not clear.
A description like
"I went off the platform and then on the train and then I looked at the nearest seat and then I saw it was occupied and then I looked at the next seat and then I saw that was occupied too snd then I repeated that and then I saw an empty seat and then I walked toward it and then I sat down and then ..."
is begging for structure by wrapping up into procedures
"I boarded the train, and then I located the closest free seat, and then I sat down in it ..."
with the obvious definitions. That can in turn can be further improved to
"After boarding the train I sat down in the first free seat ..."
where the relations between the things are more useful than "and then".