Am Sat, 28 Jul 2012 05:07:44 +0200 schrieb "bearophile" <bearophileh...@lycos.com>:
> >> // x is a nullable class reference > >> if (x == null) { > >> ... > >> } else { > >> // here the type system sees x as not null. > >> } > > > In the else branch the state of the type of x is not-null, so as > example in the else branch you are allowed to call a function > that only accept not null references, with the x variable. > Not-nulls integrated in the type system makes sure you have well > initialized variables in the class constructors in presence of > inheritance and other complexities. > It also statically requires you to test for null before > deferencing a nullable class reference, ans so on. > Those are the fruits that a good not-null implementation gives > you. You can't do all this with the NotNull toy. NotNull solves > only the easy part of the whole problem, and it's a small part. > > Bye, > bearophile I found this an interesting read. The implementation likely doesn't interfere much with other language features (in a sense like @trusted does to templated functions that take potentially unsafe code as parameters). I especially like how the compiler _statically_ knows, that x is not null in the else case. The runtime cost is moved from every call on x, to a single if-statement! It could require a little logic to parse complex conditions like "if (a == 1 && !x != null)", though ;) -- Marco