Nick Sabalausky <a...@a.a> wrote:
If you do that, then there's two possibilities:
A. You intended p to get inited on all code paths but forgot a codepath.
With real init-checking the compiler will tell you and you can fix it.
With
D as it is, you're not informed at all, and you may or may not catch the
problem before deployment. Obviously the former is better.
B. You *intended* p to not always be inited, in which case the correct
code
is this:
void foo( ) {
Object p=null;
if ( m ) {
p = new Object( );
p.DoSomethingThatNeedsToBeDoneNow( );
}
// 20 lines of code here
if ( p != null ) {
p.doSomethingWeird( dataFromAbove );
}
}
There is a third option, wherein the if condition will only be true if
p !is null, but the actual condition is more complex:
if ( m > 4 ) {
p = new Object( );
p.DoSomethingThatNeedsToBeDoneNow( );
}
// code
if ( m > 12 ) {
p.doSomethingWeird( dataFromAbove );
}
--
Simen