With exactly one week to go until the release of the first edition of Dart for Hipsters, the Dart team released a new version of the language specification. To this, I can only say, guys, seriously, we definitely need better coordination for the second edition. I kid!
Reading through the spec, I do not see much that requires changes to the beta version of the book. To be sure, method cascades would require a new section, possibly even a new chapter, but they are not yet baked, let alone implemented.
One thing that does bear investigation is lazy evaluation of static variables. I have been bit by "must be a compile time constant" enough to see it in my sleep. Yes, my dreams are just that boring—but (hopefully) no more!
For example, in Hipster MVC's pushState manager,
HipsterHistory, I cannot simply initialize the routes class variable like so:class HipsterHistory {
static List routes = [];
// ...
}The empty array to which I am attempting to assign routes is not a compile time constant, so I would get a compile time error.Instead, I have needed to make a pretend
routes static variable via a getter. That getter can initialize a private _routes class variable if needed and return the current value:class HipsterHistory {
static List _routes;
static get routes() {
if (_routes == null) _routes = [];
return _routes;
}
// ...
}That, of course, it is a silly amount of work to go through for what ought to be a one-liner. Hence the updated spec. I download the latest copy of Dartium and give the simpler version a go. Sadly, I still get the same error:Ah well, at least I know that help is on the way. I think for first edition purposes, I will likely describe lazy evaluation as the One True Way™, but with an aside briefly describing the old behavior.
Day #235
No comments:
Post a Comment