<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On 14 October 2016 at 14:46, Franklin? Lee <span dir="ltr"><<a href="mailto:leewangzhong+python@gmail.com" target="_blank">leewangzhong+python@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="gmail-"><p dir="ltr">On Oct 14, 2016 9:14 AM, "Gustavo Carneiro" <<a href="mailto:gjcarneiro@gmail.com" target="_blank">gjcarneiro@gmail.com</a>> wrote:<br>
><br>
> Sorry if I missed the boat, but only just now saw this PEP.<br>
><br>
> Glancing through the PEP, I don't see mentioned anywhere the SQL alternative of having a coalesce() function: <a href="https://www.postgresql.org/docs/9.6/static/functions-conditional.html#FUNCTIONS-COALESCE-NVL-IFNULL" target="_blank">https://www.<wbr>postgresql.org/docs/9.6/<wbr>static/functions-conditional.<wbr>html#FUNCTIONS-COALESCE-NVL-<wbr>IFNULL</a><br>
><br>
> In Python, something like this:<br>
><br>
> def coalesce(*args):<br>
>     for arg in args:<br>
>         if arg is not None:<br>
>              return arg<br>
>     return None<br>
><br>
> Just drop it into builtins, and voila.   No need for lengthy discussions about which operator to use because IMHO it needs no operator.<br>
><br>
> Sure, it's not as sexy as a fancy new operator, nor as headline grabbing, but it is pretty useful.</p>
</span><p dir="ltr">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.</p>
<p dir="ltr">For example:<br>
    return x?.a?.b?.c<br></p></blockquote><div>From what I can read in the PEP, it attacks 3 different problems at once:</div><div><br></div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">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.<br>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.)<br>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.)</blockquote></div><div><br></div><div>I am proposing a coalesce() function as alternative for (solely) problem 1, while you are talking about problem 2.</div><div><br></div><div>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.</div><div><br></div><div>Sorry, I was a bit confused by the PEP attacking 3 (related) problems at once.</div><div><br></div><div>Thanks.</div></div><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr">Gustavo J. A. M. Carneiro<div>Gambit Research<br>"The universe is always one step beyond logic." -- Frank Herbert</div></div></div>
</div></div>