Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
azliR opened this issue Oct 12, 2023 · 2 comments
Open

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

azliR opened this issue Oct 12, 2023 · 2 comments

Comments

@azliR
Copy link

azliR commented Oct 12, 2023

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
Copy link
Collaborator

passsy commented Oct 12, 2023

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
Copy link
Author

azliR commented Oct 14, 2023

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants