Why not all statement are expressions ?
David Piepgrass
qwertie256 at gmail.com
Sun Jul 8 23:41:16 PDT 2012
>> I'm usually fairly ambivalent about the idea of statements
>> being
>> expressions, but I would *love* for switch to be usable as an
>> expression.
>> For instance, in Haxe, you can do stuff like the following,
>> which I get a
>> ton of use out of and often wish D had:
>>
>> a = switch(b)
>> {
>> case 1: "foo";
>> case 2: "bar";
>> case 3: "baz";
>> case 4: "whee";
>> default: "blork";
>> }
>>
>> The D equivalents aren't terrible, but they aren't nearly as
>> nice.
>
> This won't work anyway. We are talking about language grammar
> here. If made expression, statement would be of type void. Just
> like assert is.
I see what you're saying, but this switch expression should
really be of type string.
I certainly wish more things were expressions. "a = if (x) y;
else z;" isn't especially useful since we have "a = x ? y : z",
but consider instead something that doesn't map so easily to an
expression:
// very loosely based on some Android code I wrote recently
dpWidth = _lastKnownWidth =
if (window.isVisible()) {
auto m = context.getResources().getSystemMetrics();
// final statement as value of "if" expr
window.getWidth() / m.pixelDensity();
} else if (_lastKnownWidth != 0)
_lastKnownWidth;
else
screenInfo().getWidth();
Or how about:
auto area = {
auto tmp = foo.bar(baz);
tmp.width * tmp.height;
}
I also wish "void" were a first-class type with sizeof==0 for
maximum efficiency:
int[void] intSet = [2:(), 3:(), 4:()]
Ditto for size of empty structs. D code should never need
abominations like the C++ EBCO.
More information about the Digitalmars-d
mailing list