Project Elvis
H. S. Teoh
hsteoh at quickfur.ath.cx
Mon Oct 30 22:31:35 UTC 2017
On Mon, Oct 30, 2017 at 01:51:30PM -0600, Jonathan M Davis via Digitalmars-d wrote:
> On Monday, October 30, 2017 11:04:32 Steven Schveighoffer via Digitalmars-d
> wrote:
[...]
> > TBH, I don't think I ever considered doing if(floatingpointvalue) to
> > be a good idea in C or D. I generally stay away from float, and
> > especially comparing to 0 directly.
>
> Yeah. Honestly, I stay away from if(x) in general if x isn't a bool. I
> might occasionally do it for a pointer, but it's not like floating
> point types are the only ones that act badly with cast(bool) (e.g.
> dynamic arrays). It all works just fine if you understand what each of
> the types do with cast(bool), but it's just clearer if you make the
> check it explicit.
+1 for writing it explicitly. It reminds me of C code along these
lines:
if (some_function(x)) {
cleanup();
return ERROR;
}
if (some_other_function(y)) {
return SUCCESS;
}
Typical result of the widespread C convention of returning int that can
mean ... basically anything. Some functions return 0 to mean error,
some return 0 to mean success, and of course, on the caller's side you
assume clairvoyance on the part of the would-be reader of your code to
know what was intended.
Which leads to fun (or insanity) like this:
int f(char *s, int x) {
return strcmp(s, "verbose") && !printf("The result is ")
|| x && !printf("success ") || isalnum(x) &&
!printf("unknown ") || printf("(%d)", x) &&
printf("\n");
}
Back in D land, I was so happy way back when, when dmd began rejecting
this code:
S* sp;
while ((sp = getS()) && someCondition) { ... }
and I had to write this instead:
S* sp;
while ((sp = getS()) !is null && someCondition) { ... }
Added a whole new level of readability to my code.
Nowadays, I don't even like using implicit conversions to bool anymore.
Intent is much better conveyed with an explicit comparison to 0 or 1 or
whatever. Saving a few keystrokes simply isn't worth the amount of time
and mental fatigue incurred when you need to debug something that's
caused by wrong interpretation of return values.
T
--
People tell me I'm stubborn, but I refuse to accept it!
More information about the Digitalmars-d
mailing list