enum value vs. immutable
Ali Çehreli
acehreli at yahoo.com
Sun Dec 1 23:27:23 PST 2013
On 12/01/2013 09:57 PM, CJS wrote:
> I was reading the enum page of Ali Çehreli's (excellent) D book
> (http://ddili.org/ders/d.en/enum.html), and I'm confused by an enum
> value (not enum type), such as
> enum secondsPerDay = 60 * 60 * 24;
> In that situation I would have used an immutable variable. Is there any
> reason to prefer enum vs. immutable when defining constants?
After realizing the other day that even 'static const' can be used for
template instantiations, I am not sure myself anymore. :)
Simple rules are great. I wanted to accept the following guidelines,
none of which are clear cut:
1) Prefer enum first because enum values can be used for template
instantiations.
2) Prefer immutable next because it provides stronger guarantees.
3) Prefer const last as it erases immutable attribute if present. (We
can't know just by looking at a reference to const whether the original
value has been immutable or mutable.)
The first item needs qualification: Do not use enum for arrays and
associative arrays, because enum is like copy+pasting the definition
everywhere the enum is used. It is expensive to initialize arrays and AAs.
The second item needs qualification: immutable is not just a stronger
const, it is a requirement, a burden. It requires that the object is
deeply immutable and it is also a burden on types: They cannot contain
mutable references. (This affects future development; you can't add
mutable references to a type that has already been used as immutable
somewhere in the code.)
So, it is not a clear cut decision because it depends on the type as
well. For example, these days I use const even for manifest constants
like 60 * 60 * 24 because for all practical purposes it is a manifest
constant! This must be new in D; I don't think it worked that way but it
works even with CTFE now. Additionally const is shorter to type and
easier on the eyes. :)
Ali
More information about the Digitalmars-d-learn
mailing list