- From: Liam R. E. Quin <liam@fromoldbooks.org>
- Date: Tue, 07 Feb 2023 16:15:04 -0500
- To: public-xslt-40@w3.org
On Tue, 2023-02-07 at 12:29 -0800, Dimitre Novatchev wrote:
> Addressing the "difficulty to debug" issue, this reminds me of C#
> where
> there are both the "." (member access) and "?." (null-conditional)
> operators.
>
> https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/member-access-operators#null-conditional-operators--and
> -
>
This has recently been added to JavaScript too as i understand it.
There is also the null-condensing operator ?? in which a ?? b is like
our (a, b)[1]. So i think we should avoid using ?? to mean something
similar but subtly different; || is bad enough already :)
JavaScript has ?. as null-safe property access, and this has widespread
support. See
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining#browser_compatibility
function printCustomerCity(customer) {
const customerCity = customer?.city ?? "Unknown city";
console.log(customerCity);
}
which uses both of these operators.
As a side-note, there are also nullish assignment operators, e.g.
a ??= e;
is like XPath's
a := if (a) then a else e
except we can't update variables of course, so this is pernicious
shadowing...
and ||= and &&=, neither of which we could use :)
But i think we probably should avoid using ?? to mean the same as
JavaScript and C# ".?" - this will especially confuse SaxonJS users :)
and lead to bugs that are hard to find.
I do however think a safe dereference operator is a good idea, and if
it wasn't for JS using ?? in that way, i'd like ?? for it.
Maybe we should use ‽ instead :) or allow [.]? to work that way, so
e1[.]?e2
returns () if e1 is empty, e1?e2 if e1 is a map, and an error
otherwise.
liam
--
Liam Quin, https://www.delightfulcomputing.com/
Available for XML/Document/Information Architecture/XSLT/
XSL/XQuery/Web/Text Processing/A11Y training, work & consulting.
Barefoot Web-slave, antique illustrations: http://www.fromoldbooks.org
Received on Tuesday, 7 February 2023 21:16:37 UTC