In the first set of rules, there is no “?” anywhere, but in the second on there is a single “?” in the replica, yet no matching “?” in the issue side. In other examples I have seen it on both ends of the equation, but others, apparently identical in construction, do not have it at all. I have no idea what it actually does or why I should use/not use it.
When should I use the “?” or not? Is there a scripting syntax guide that explains this somewhere? I have looked for one but not found it yet.
But to answer your question to the point, I’d like to leave some of my understanding here:
? used before a dot (.) operator to make it a “safer dot” operator.
Because if the object before the dot is Null, then an expression like this:
object.name will throw exception NullPointerException
while
object?.name will just return Null, without throwing exception, hence safer for the case you want to say: If object is NOT null, then return its name, else return null
You would NOT want use this operator on the left side of an assignment of course, because if it is, there will be case where the left side become Null and you will assign something to a null space.