request switch statement with common block
MattCoder
mattcoder at hotmail.com
Sun Aug 4 10:24:25 PDT 2013
On Sunday, 4 August 2013 at 16:16:25 UTC, Andre Artus wrote:
> On Sunday, 4 August 2013 at 15:57:32 UTC, Andre Artus wrote:
>> On Sunday, 4 August 2013 at 10:14:50 UTC, Kagamin wrote:
>>> On Saturday, 3 August 2013 at 18:56:47 UTC, JS wrote:
>>>> Um, it can actually save a lot of type and errors.
>>>>
>>>> having two places to change is very error prone.
>>>>
>>>> if (cond) { }
>>>> switch(cond)
>>>
>>> What is error-prone is evaluation of a complex condition
>>> twice assuming it will result in the same value. That's also
>>> a common error with C macros. You should save the value in a
>>> variable:
>>>
>>> auto cond = complexCond;
>>> if (cond) { }
>>> switch(cond)...
>>
>> There is also a subtle, but in my opinion important,
>> distinction between the expressions accepted by 'if' and
>> 'switch'.
>>
>> With 'if' the expression must evaluate to boolean, whereas
>> with 'switch' the expression evaluates to an integral or
>> {w|d}char[] type. With a 'switch' the condition is completed
>> in the 'case'.
>
> Oops. I think I hit spacebar twice and the message was posted
> before I finished it.
>
> Taking an example from the D language reference,
>
>>
>> int number;
>> string message;
>> switch (number)
>> {
>> default: // valid: ends with 'throw'
>> throw new Exception("unknown number");
>> case 3:
>> message ~= "three "; break;
>> case 4:
>> message ~= "four "; continue;
>> case 5:
>> message ~= "five "; goto case;
>> case 6:
>> message ~= "six "; break;
>> case 1:
>> case 2:
>> message = "one or two";
>> }
>
> With the inclusion of 'default' the condition covers the whole
> range of 'int'. The programmer may only want the pre and post
> code to be executed for every other case (1..6).
Like I said, it would be nice if we could extend some D features
without change the compiler source, maybe like macros in LISP.
The switch statement should have an event handler like:
onBeforeMatch or onAfterMatch to handle this.
But for what I saw on this thread, this is only possible changing
the compiler source. :/
Matheus.
More information about the Digitalmars-d
mailing list