From the D Blog: Crafting Self-Evident Code in D

claptrap clap at trap.com
Thu Oct 5 13:30:00 UTC 2023


On Thursday, 5 October 2023 at 08:46:50 UTC, Dom DiSc wrote:
> On Thursday, 5 October 2023 at 00:53:45 UTC, claptrap wrote:
>> [...] he is has more interesting things to talk about than 
>> whether "enum { yes, no }" is a good idea or not.
>
> His point here was not that having an enum with values for yes 
> and no is a bad idea. The bad idea is assigning yes the value 0.
> That's a much more subtle point, as here nowhere 0 is written.

His point was that both are bad, but one in worse.

And lets be honest, the problem is implicit casting of enums to 
int, and then to bool. Or the conflation of enums and manifest 
constants. If he wants to argue for self evident code then maybe 
that kind of thing needs looking at. Even the UFCS chain example 
is bad. Is...

a.b.c()

actually... "c(b(a))"

or is it member function b() on object 'a' that returns an object 
with member function c().

It's not self evident is it? So yes UFCS makes the "pipeline" 
easier to read, but it actually makes the code more ambiguous if 
you dont know what each of the things is. So you need more 
context to understand it.


> That's what make this kind of mistakes so easy and I think it's 
> well worth to explain it to less experienced programmers.

If he was doing a talk to a bunch of inexperienced programmers 
then yes that stuff might be interesting, but he wasnt. You need 
to understand who your audience is, otherwise you risk wasting 
your and everyone elses time.


> It's not easy to make simple looking code. That has nothing to 
> do with (coding-)style, it is all about not defining things a 
> different way than it is usually done, so nobody mix it up.
> Sometimes it's very hard to find the correct order of things - 
> often even experiments are necessary to determine what 
> "usually" means.
> What he says is: Invest your time to find out what "usually" 
> means, and that is not trivial, even if it sounds like it is. 
> It requires a lot of experience to come to this conclusion. 
> Investing time to make things look easy and obvious is well 
> worth it, despite you're likely not payed (or in your case: 
> honored) for it.

While I agree with the overall gist I didn't find his examples 
very interesting or convincing. They were pretty much all made up 
to illustrate, outdated, or disingenuous (the first one with the 
intentionally obfuscated code).

It would have been far better if he had actual real code examples 
he'd cleaned up.






More information about the Digitalmars-d-announce mailing list