enum behaivor. another rehash of the topic
bearophile
bearophileHUGS at lycos.com
Sat Dec 14 17:52:00 PST 2013
Joseph Rice:
> import std.stdio;
>
> void main() {
> enum TEST {
> test1=0,
> test2
> };
>
> TEST test = TEST.test1;
>
> switch (test) {
> case TEST.test1:
> writeln("It's test1");
> break;
> case TEST.test2:
> writeln("It's test2");
> break;
> default:
> break;
> }
> }
This is how you usually write that code in D:
void main() {
import std.stdio;
enum Test { t1, t2 }
auto test = Test.t1;
final switch (test) with (Test) {
case t1:
writeln("It's t1");
break;
case t2:
writeln("It's t2");
break;
}
}
The differences:
- The import is often better in the function.
- Type names (like Test) are better written with just the first
letter uppercase.
- You often have to carry the type name around, so using shorter
names is sometimes OK (like t1 and t2).
- In this code you want a final switch.
- Using with() you avoid repeating the enum type name.
In D you also have anonymous enums:
enum { test1, test2 }
Also, when you refer to C++, it's better to use the "enum class"
of C++11.
D enums have some faults, like being weakly typed, having bad
error messages, and sometimes being a bit too much long to write
(when you pass an enum to a function, the function already knows
the name of the enum type. But this is not so bad...).
Bye,
bearophile
More information about the Digitalmars-d
mailing list