È facile definire l'operazione Equals
in modi che non sono commutativi. Quando si fornisce l'uguaglianza con altri tipi, ci sono ovviamente situazioni (nella maggior parte delle lingue) in cui l'uguaglianza non essendo commutativa è inevitabile. Tuttavia, all'interno della propria gerarchia di ereditarietà in cui la classe di base radice definisce un membro di uguaglianza, un programmatore ha più controllo.
Quindi puoi creare situazioni in cui
(A = B) ≠ (B = A), where A and B both derive from base class T
Sostituendo =
con la variazione appropriata per una determinata lingua. ( .Equals(_)
, ==
, ecc.)
Questo mi sembra sbagliato, tuttavia, riconosco che potrei essere influenzato dallo sfondo in Matematica. Non sono stato in programmazione abbastanza a lungo da sapere qual è la pratica standard / accettata / preferita durante la programmazione.
La maggior parte dei programmatori accetta solo .Equals(_)
potrebbe non essere commutativa e codice difendibile. Si aspettano commutatività e si infastidiscono se non lo è. In breve, quando si lavora in una gerarchia di classi, dovrei fare uno sforzo per garantire che l'uguaglianza sia commutativa?