dartx icon indicating copy to clipboard operation
dartx copied to clipboard

Add someNullOrEmptyStr.or('not null or empty string')

Open azliR opened this issue 2 years ago • 2 comments

I often come across cases where I have this code:

someNullOrEmptyStr?.isNullOrEmpty ? 'not null or empty str' : someNullOrEmptyStr

I feel like that should be more simplified for example adding or extension or something, like:

someNullOrEmptyStr.or('not null or empty string')

Thanks in advance, your package is so helpful!

azliR avatar Oct 12 '23 02:10 azliR

Interesting idea! Not quite general enough for my taste though.

Your proposed or is not general, because some developers want it to work for empty strings, some for blank strings, some for blank strings and dashes "-", .... There are too many ways to get it right.

Let me show you an alternative

In Dart, you can use the ?? operator for a fallback for nullable types. This is commonly known and you'd use it too here if it would also work for an empty string.

What we can do is convert all empty strings to null and then use the ?? operator.

someNullOrEmptyStr.emptyAsNull() ?? 'not null or empty string';

This would also work for any other concept of "emptyness" that should be replaced with a placeholder and can be chained

someNullOrEmptyStr.blankAsNull().emptyAsNull().dashAsNull() ?? 'not null or empty string';

Another benefit of ?? is that it works lazyly. If the fallback is not required, the function is not called.

"".emptyAsNull() ?? expensiveFunction(); // expensiveFunction is not called
"".or(expensiveFunction()) //  expensiveFunction is called but not used

passsy avatar Oct 12 '23 17:10 passsy

Oh wow that's even better! Thanks for the correction!

azliR avatar Oct 14 '23 09:10 azliR