Case Statements

BartC bc at freeuk.com
Wed Mar 16 06:34:20 EDT 2016


On 16/03/2016 04:06, Mario R. Osorio wrote:
> On Tuesday, March 15, 2016 at 9:55:27 PM UTC-4, jj0ge... at gmail.com wrote:
>> You have apparently mistaken me for someone who's worried.  I don't use Python, I was just curious as to why a construct that is found, not only to be useful in 95% of other languages, but is generally considered more flexible and readable than the if-elif, was missing in Python.  (your link "Switch Statement Code Smell" not withstanding)
>>
>> Have a great day :)
>
> Switch and case statements are such a waste of time that, in order to understand them you have to mentally use if/elseif/else/endif statements. Furthermore, the concepts of switch and case could not even exist without the notion of if/elseif/else/endif statements. Why then, add an extra level of complication??.

You're understanding them wrong then. Switch can be used like a 
'computed go to', where you execute the nth statement of a selection, or 
select the nth value of a list /without needing to evaluate any of the 
others/.

Or it can be more general, where each statement or value in the 
selection has a corresponding 'case', and it will directly execute or 
select it according to the switch expression:

switch d:
case 1:
    n = p//8
    pal = 2
case 4:
    n = p//2
    pal=16
case 8:
    n = p
    pal = 256
case 16:
    n = p*2
case 24:
    n = p*3
case 32:
    n = p*4
    a = 1
else:
    raise ...

Sure, there are half a dozen ways of writing such code. But you don't 
want to think of it in terms if-elif where you first have to test all 
the other cases when d is 32, and have to keep writing 'd==' over and over.

And you don't want to take this straightforward bit of code and spread 
it over many functions and classes and methods; it's all here.

(BTW why does Python have 'elif' when if-else is all that is really needed?)

> Go play with Java or Maybe C++. Have fun with their fancy if/elseif/else/endif statements oops, sorry, they call them switch and/or case statements.
>
> Wish you the best and please lete us know if and when you have a deep fall through a breakeless case ...

C got those badly wrong. (It got a lot of things wrong.) That doesn't 
mean that switch, properly implemented, is bad.

-- 
Bartc



More information about the Python-list mailing list