On Mon, Mar 13, 2023 at 01:31:42PM +0200, Matti Vaittinen wrote:
On 3/6/23 13:13, Andy Shevchenko wrote:
On Fri, Mar 03, 2023 at 07:54:22AM +0000, Vaittinen, Matti wrote:
On 3/2/23 17:05, Andy Shevchenko wrote:
On Thu, Mar 02, 2023 at 12:57:54PM +0200, Matti Vaittinen wrote:
...
+ for (i = 0; !ret && i < gts->num_avail_all_scales; i++)
Much easier to read if you move this...
+ ret = iio_gts_total_gain_to_scale(gts, all_gains[i],
+ >s->avail_all_scales_table[i * 2],
+ >s->avail_all_scales_table[i * 2 + 1]);
...here as
if (ret)
break;
I think the !ret in loop condition is obvious. Adding break and brackets
would not improve this.
It moves it to the regular pattern. Yours is not so distributed in the kernel.
I believe we can find examples of both patterns in kernel. I don't think the
"many people use different pattern" is a great reason to add break +
brackets which (in my eyes) give no additional value to code I am planning
to keep reading also in the future...
The problem is that your pattern is not so standard (distributed) and hence
less maintainable.
...
+ if (!diff) {
Why not positive conditional?
Because !diff is a special condition and we check explicitly for it.
And how my suggestion makes it different?
In example you gave we would be checking if the value is anything else but
the specific value we are checking for. It is counter intuitive.
(Note, it's easy to miss the ! in the conditionals, that's why positive ones
are preferable.)
Thank you for explaining me the rationale behind the "positive checks". I
didn't know missing '!' was seen as a thing.
I still don't think being afraid of missing '!' is a good reason to switch
to counter intuitive checks. A check "if (!foo)" is a pattern in-kernel if
anything and in my opinion people really should be aware of it.
(I would much more say that having a constant value on left side of a
"equality" check is beneficial as people do really occasionally miss one '='
when meaning '=='. Still, this is not strong enough reason to make
counter-intuitive checks. In my books 'avoiding negative checks' is much
less of a reason as people (in my experience) do not really miss the '!'.)
It's not a problem when it's a common pattern (like you mentioned
if (!foo) return -ENOMEM; or alike), but in your case it's not.
I would rather see if (diff == 0) which definitely shows the intention
and I wouldn't tell a word against it.