switch
Tim Chase
python.list at tim.thechases.com
Fri Dec 11 13:21:49 EST 2009
On 12/10/2009 09:22 PM, John Bokma wrote:
> Tim Chase<python.list at tim.thechases.com> writes:
>
> Please don't delete attribution line(s), added:
>
> Asun Friere writes:
I tend to prune them because a good newsreader will thread
messages and put my reply in the context of the message to which
I'm replying. Both Thunderbird and Claws Mail seem to have
correctly placed my message under Asun's message. However your
reply to mine failed to show up under my message in either
program (it showed up under the top-level post by Hong Zhang in
both apps). Looks like you're sending from Gnus...a
threading/reply bug in Gnus perhaps? Anyways...I'll leave them
in for this reply.
>>> phone.update_from_record(record)
>>>
>>> This switch statement belongs to one guy. One guy who wants to know
>>> how to do everything that needs to be done to Phones no matter who
>>> asks
>>
>> This is where you make a false assumption -- the contents and parsing
>> of the "switch" are provider-specific in this case, mapping to a
>> common ontology of the Phone object:
>
> In that case, why not give the classes Asun suggested all the same base
> class: Phone?
Whether the logic gets put in a subclass of Phone, or whether it
gets put in a provider Phone-factory (as it currently does...the
Provider superclass also knows how to auto-detect the format of a
filename/path passed to it and know whether it can handle it),
there's still a rat's-nest of if/else/switch type logic, each
branch of which usually involves a single assignment, or further
sub-branch checking. So I often have things that would
pseudo-code like
switch rectype:
case '01':
phone.textmessaging += row['txtmsgcost']
count = row['count']
switch subtype:
case 'a': phone.textmessagessent += count
case 'b': phone.textmessagesreceived += count
case 'c': phone.pagessent += count
case 'd': phone.pagesreceived += count
case '02':
...
which is fairly readable. However, with a method-dispatch
dictionary, this flattens the hierarchy to "def"s at the same
level (class definition scope), leaving the hierarchy visible
only in the call-graph.
Turning each of these a function would
- obfuscate the flow and processing hierarchy
- create a profusion of 1-3 line functions (about 50 Phone
attributes, times currently about 15 provider formats, plus a
duplication factor of about 10% where certain fields aggregate
from various sources in the data, accumulating in a single Phone
field)
- have the overhead of several million function-calls
>> Yes, having been programming since I was in middle-school (quick
>> calculation yields a "boy I'm old" estimate of about 20 years...does
>> anybody miss 360k 5.25" floppy disks? :)
>
> I do miss cassette tapes and the wheeeeeee kkkrggrggrgrgrg of a program
> loading.
Heh, one of the other things I miss: booting my Apple ][+ and
hitting the <Reset> button, resulting in a prompt where I could
code in under 2 seconds from power-on. Can't say I miss tape at
all though :)
-tkc
More information about the Python-list
mailing list