While mucking about with constant constructors in Dart, I happened across a mention of a feature that is new to me: annotations. This mention in the spec was the first time that I have ever heard of annotations, so it seems worth stopping for a bit of investigation. I tend to doubt that understanding will come today, but stranger things have happened.
A bit of research reveals that annotations are similar to annotations in Java or attributes in C#, which goes a long way toward explaining why I have never heard of them. That also might explain why I may find it difficult to wrap my brain around them.
Per the spec:
Reflective access to metadata is not yet implemented as of the M2 release.In other words, I will not be able to use Dart annotations directly in my code—at least not yet. That's just as well, because I doubt that I could figure them out tonight anyway.
What I can do is adopt the BugFix example from C# attributes in Programming C#. The example in there presents attributes / annotations as a mechanism for formalizing comments. In this case, bug fixes. Using what I know about constant constructors, I create a constant constructor for a
BugFix class:class BugFix {
final int number;
final String author;
final String comment;
const BugFix({this.number, this.author, this.comment});
}Now, above the Cookie class upon which I have been working laboriously, I can indicate when I have applied bug fixes and a bit of information about them:@BugFix(number: 42, comment: "Typo")
@BugFix(number: 45, author: "Chris", comment: "Typo")
class Cookie {
int number_of_chips;
Cookie({this.number_of_chips:0});
}
If I code up a main clause that puts this code to good use:main() {
var cookie = new Cookie();
print("cookie has ${cookie.number_of_chips} chips");
}I find that the code is executed normally—as if the annotation did not exist:$ dart annotations.dart cookie has 0 chipsBut I have formalize the manner in which bug fixes are associated with code.
I cannot say that I have have ever wanted something like that in a real codebase, but it does help to get a better feel for these beasties. Perhaps tomorrow I can come up with a better example of how I might want to use annotations—at least until they are available in reflection.
Day #615
google 590
ReplyDeletegoogle 591
google 592
google 593
google 594