On 13 February 2011 00:17, Levente Uzonyi <leves@elte.hu> wrote:
On Sat, 12 Feb 2011, Igor Stasenko wrote:
oh come on. Switch statement should live where it belongs to: C code.
It's nothing like C's switch statement, and I'm sure you know that.
Why we should support this ridiculous syntax constructs in smalltalk?
What's so ridiculous about it?
IMO: All users of such code should die. And i don't care if they are working fast or not.. This is plainly against the spirit of smalltalk.
Okay, then enlighten me please, how one should rewrite the following dispatch without #caseOf:?
You have some integers: 0 83 67 77 68 72 80 112 113 87 70 82. When a variable's value is equal to any of these, a predefined value has to be set to an instance variable depending on the integer. The current code is like:
foo caseOf: { Â Â Â Â [ 0 ] -> [ var2 := x ]. Â Â Â Â [ 83 ] -> [ var13 := x ]. Â Â Â Â ...
Should I use #detect: to find the variable? Or a dictionary? Maybe a binary search on an array? Or a bunch of #ifTrue:ifFalse: conditionals? Maybe a separate class for each variable and let the VM do the dispatch? How should I set the value? With #perform:? Or #instVarAt:put:?
Don't try to convince me that there are sort of problems which can be solved only by using case statement :) First, get rid of these integers in your code. Use symbolic names. And then for dispatching using parameter, there is a #peform: primitive. So, then switch statement will be turned into: self peform: (self decode: someInteger) and this is how it should look like. And again, if you can avoid using integers at all, use symbols , so you don't have to decode/translate them. Just do #perform. I thought that this is obvious for you.
Levente
-- Best regards, Igor Stasenko AKA sig.