On 14 October 2016 at 14:46, Franklin? Lee <leewangzhong+python@gmail.com> wrote:

On Oct 14, 2016 9:14 AM, "Gustavo Carneiro" <gjcarneiro@gmail.com> wrote:
>
> Sorry if I missed the boat, but only just now saw this PEP.
>
> Glancing through the PEP, I don't see mentioned anywhere the SQL alternative of having a coalesce() function: https://www.postgresql.org/docs/9.6/static/functions-conditional.html#FUNCTIONS-COALESCE-NVL-IFNULL
>
> In Python, something like this:
>
> def coalesce(*args):
>     for arg in args:
>         if arg is not None:
>              return arg
>     return None
>
> Just drop it into builtins, and voila.   No need for lengthy discussions about which operator to use because IMHO it needs no operator.
>
> Sure, it's not as sexy as a fancy new operator, nor as headline grabbing, but it is pretty useful.

That function is for a different purpose. It selects the first non-null value from a flat collection. The coalesce operators are for traveling down a reference tree, and shortcutting out without an exception if the path ends.

For example:
    return x?.a?.b?.c

From what I can read in the PEP, it attacks 3 different problems at once:

1. The " null -coalescing" operator is a binary operator that returns its left operand if it is not null . Otherwise it returns its right operand.
2. The " null -aware member access" operator accesses an instance member only if that instance is non- null . Otherwise it returns null . (This is also called a "safe navigation" operator.)
3. The " null -aware index access" operator accesses an element of a collection only if that collection is non- null . Otherwise it returns null . (This is another type of "safe navigation" operator.)

I am proposing a coalesce() function as alternative for (solely) problem 1, while you are talking about problem 2.

I do believe problems 2 and 3 are interesting too, and of course coalesce() does not work for them, they do need their own operators.

Sorry, I was a bit confused by the PEP attacking 3 (related) problems at once.

Thanks.

--
Gustavo J. A. M. Carneiro
Gambit Research
"The universe is always one step beyond logic." -- Frank Herbert