home bbs files messages ]

Just a sample of the Echomail archive

COMPOSVM:

<< oldest | < older | list | newer > | newest >> ]

 Message 263,059 of 264,034 
 Simon Clubley to Dan Cross 
 Re: extending MySQL on VMS 
 20 Aug 25 12:27:01 
 
From: clubley@remove_me.eisner.decus.org-Earth.UFP

On 2025-08-19, Dan Cross  wrote:
> In article <1081rg2$3njqo$3@dont-email.me>,
> Simon Clubley   wrote:
>>
>>I write simple to understand code, not clever code, even when the
>>problem it is solving is complex or has a lot of functionality
>>built into the problem.
>>
>>I've found it makes code more robust and easier for others to read,
>>especially when they may not have the knowledge you have when you
>>wrote the original code.
>
> I'm curious how this expresses itself with respect to e.g. the
> short-circuiting thing, though.  For instance, this might be
> common in C:
>
>     struct something *p;
>     ...
>     if (p != NULL && p->ptr != NULL && something(*p->ptr)) {
> 	// Do something here.
>     }
>
> This, of course, relies on short-circuiting to avoid
> dereferncing either `p` or `*p->ptr` if either is NULL.  What
> is the alternative?
>
>     if (p != NULL) {
>         if (p->ptr != NULL) {
> 	    if (something(*p->ptr)) {
> 		// Do something....
> 	    }
>         }
>     }
>
> If I dare say so, this is strictly worse because the code is now
> much more heavily indented.

Indented properly (not as in your next example!) I find that very
readable and is mostly how I would write it although I do use code
like your return example when appropriate. This is my variant:

	if (p != NULL)
		{
		if (p->ptr != NULL)
			{
			if (something(*p->ptr))
				{
				// Do something....
				}
			}
		}

In case that doesn't survive a NNTP client, it is in Whitesmiths format:

https://en.wikipedia.org/wiki/Indentation_style#Whitesmiths

I like to spread out code vertically as I find it is easier to read.
We are no longer in the era of VT50/52/100 terminals. :-)

>
> Ken Thompson used to avoid things like this by writing such code
> as:
>
>     if (p != NULL)
>     if (p->ptr != NULL)
>     if (something(p->ptr)) {
>         // Do something....
>     }
>

YUCK * 1000!!! That's horrible!!! :-)

> Which has a certain elegance to it, but automated code
> formatters inevitably don't understand it (and at this point,
> one really ought to be using an automated formatter whenever
> possible).
>
> AN alternative might be to extract the conditional and put it
> into an auxiliary function, and use something similar to
> Dijkstra's guarded commands:
>
>     void
>     maybe_do_something(struct something *p)
>     {
>         if (p == NULL)
> 	    return;
> 	if (p->ptr == NULL)
> 	    return;
> 	if (!something(*p->ptr))
> 	    return;
> 	// Now do something.
>     }
>
> I would argue that this is better than the previous example, and
> possibly on par with or better than the original: if nothing
> else, it gives a name to the operation.  This is of course just
> a contrived example, so the name here is meaningless, but one
> hopes that in a real program a name with some semantic meaning
> would be chosen.
>

There is one difference for me here however. _All_ single conditional
statements as in the above example are placed in braces to help avoid
the possibility of a later editing error.

Simon.

--
Simon Clubley, clubley@remove_me.eisner.decus.org-Earth.UFP
Walking destinations on a map are further away than they appear.

--- SoupGate-Win32 v1.05
 * Origin: you cannot sedate... all the things you hate (1:229/2)

<< oldest | < older | list | newer > | newest >> ]


(c) 1994,  bbs@darkrealms.ca