simc / dartx

Superpowers for Dart. Collection of useful static extension methods.
https://pub.dev/packages/dartx
Apache License 2.0
1.08k stars 88 forks source link

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

Open azliR opened 11 months ago

azliR commented 11 months ago

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!

passsy commented 11 months ago

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
azliR commented 10 months ago

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