On 19 July 2018 at 13:39, Rhodri James <rho...@kynesim.co.uk> wrote: >> After updating to use the ``?[]`` and ``??`` operators:: >> >> def _get_const_info(const_index, const_list): >> argval = const_list?[const_index] ?? const_index >> return argval, repr(argval) > > > Here's where I start to part company. To me, the updated version is > markedly harder to read, even if it does (once deciphered) convey the intent > of the function better than the original :-) The "?." and "?[]" operators > just aren't obvious enough not to trip my internal WTF filter; either that > or I'll overlook the "?" part entirely, which is probably worse.
I completely agree. The semantics of ?. and ?[] is non-intuitive at best - and particularly when chained. The Groovy language has the ?. operator (see http://groovy-lang.org/operators.html#_safe_navigation_operator), and I pretty much always read it as if it were the equivalent expression without the ? signs, with an added proviso "it'll probably do something useful if we hit None". But when it comes to what that "something useful" is, I'm left hoping the original writer knew what they were doing. So I'd never write code using ?. or ?[] myself, and I'd be unable to reasonably review or maintain code containing them. That's a pretty serious condemnation of the syntax in my view. Conversely, while I find ?= and ?? ugly, and would avoid them, the semantics are relatively easy to assess when reading code. Of the two, I dislike ?? more than ?=, but both are streets ahead of ?. and ?[]. Paul _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/