Saya percaya bahwa memiliki nama anggota yang sama adalah ide yang buruk dalam kasus ini, karena membuat kode lebih rentan kesalahan.
Bayangkan skenario: Anda memiliki beberapa poin cartesian: pntA dan pntB. Kemudian Anda memutuskan, untuk beberapa alasan, bahwa mereka harus lebih baik diwakili dalam koordinat kutub, dan mengubah deklarasi dan konstruktor.
Sekarang, jika semua operasi Anda hanya pemanggilan metode seperti:
double distance = pntA.distanceFrom(pntB);
maka kamu baik-baik saja. Tetapi bagaimana jika Anda menggunakan anggota secara eksplisit? Membandingkan
double leftMargin = abs(pntA.x - pntB.x);
double leftMargin = abs(pntA.first - pntB.first);
Dalam kasus pertama, kode tidak akan dikompilasi. Anda akan segera melihat kesalahan dan dapat memperbaikinya. Tetapi jika Anda memiliki nama anggota yang sama, kesalahannya hanya pada tingkat logis, jauh lebih sulit untuk dideteksi.
Jika Anda menulis dalam bahasa yang tidak berorientasi objek, maka lebih mudah untuk mengirimkan struct yang salah ke fungsi tersebut. Apa yang membuat Anda berhenti menulis kode berikut?
double distance = calculate_distance_polar(cartesianPointA, polarPointB);
Jenis data yang berbeda, di sisi lain, akan memungkinkan Anda untuk menemukan kesalahan selama kompilasi.