Referential Equality and Structural Equality – Kotlin

Kalau berbicara tentang equality atau kesamaan dalam pemrograman berborientasi objek ada 2 hala yang perlu diperhatikan. Pertama kesamaan instance dalam memory antara 2 referensi object, yang kedua kesamaan nilai antara 2 referensi object dengan instance di memori yang berbeda. Misal dua objek persegi bisa dikatakan sama kalau kita tahu panjang sisinya.

Yang pertama disebut persamaan referensial. Untuk menguji apakah dua referensi mengarah ke instance yang sama, kita menggunakan operator ===  (triple equals) atau !==  untuk negasi:

Nilai  a === b  bernilai false karena meskipun a  dan b  mereferensi file yang sama pada disk tetapi keduanya adalah instance object yang berbeda.

Yang terakhir disebut struktural equality. Untuk menguji apakah dua objek memiliki nilai yang sama, kita menggunakan operator ==  atau !=  Untuk negasi. Fungsi panggilan ini diterjemahkan ke dalam penggunaan fungsi sama dengan semua kelas harus didefinisikan. Perhatikan bahwa ini berbeda dari bagaimana operator ==  digunakan di Java – di Java ==  operator untuk persamaan referensial dan biasanya dihindari.

Dalam contoh diatas nilai structural  adalah true , karena File  object memiliki kesamaan nilai path. Tergantung pembuat class untuk menentukan kesamaan seperti apa. Operator == adalah null safe jadi membandingkan dengan variable null.

 

 

abhiemanyu