null [re: spec#]
retard
re at tard.com.invalid
Sun Nov 7 17:54:22 PST 2010
Sun, 07 Nov 2010 14:09:01 -0800, Walter Bright wrote:
> Simen kjaeraas wrote:
>> You misunderstand. The idea is this:
>>
>> void foo( ) {
>> Object p;
>> if ( m ) {
>> p = new Object( );
>> p.DoSomethingThatNeedsToBeDoneNow( );
>> }
>> // 20 lines of code here
>> if ( m ) {
>> p.doSomethingWeird( dataFromAbove );
>> }
>> }
>
> You're right, the real cases where this kind of thing occurs are much
> more complex. I just posted the thing boiled down.
>
> And, of course, there's always a way to refactor the code to eliminate
> the spurious error message. But sometimes the result is as ugly as
> Pascal's efforts to prove you really don't need a 'break' statement in a
> loop.
>
> The real problem with the spurious errors is that then people will put
> in an initialization "just to shut the compiler up." Time passes, and
> the next guy is looking at the code and wonders why x is being
> initialized to a value that is apparently never used, or worse, is
> initialized to some bogus value randomly picked by the long-retired
> programmer. I've seen code reviewers losing a lot of time on this issue.
That's why we have immutable variables. They force you to think what to
put in the variables. A lot of cases like the one above would be solved
if if-then-else was an functional expression instead of a void returning
statement. C/C++/D has the ternary ?: but the syntax is obfuscated.
Object p = if (m) {
...
foo;
} else {
...
bar;
}
instead of
Object p;
if (m) {
...
p = foo;
} else {
...
p = bar;
}
There are even cases where the former can be const. The latter one has to
be mutable in any case.
More information about the Digitalmars-d
mailing list