Structs dan bidang telanjang akan memudahkan interoperabilitas dengan beberapa API yang tidak dikelola. Seringkali Anda akan menemukan bahwa API tingkat rendah ingin mengakses nilai dengan referensi, yang bagus untuk kinerja (karena kami menghindari salinan yang tidak perlu). Menggunakan properti adalah hambatan untuk itu, dan sering kali perpustakaan pembungkus akan melakukan salinan untuk kemudahan penggunaan, dan kadang-kadang untuk keamanan.
Karena itu, Anda akan sering mendapatkan kinerja yang lebih baik dengan jenis vektor dan matriks yang tidak memiliki properti tetapi bidang telanjang.
Praktik terbaik tidak dibuat dalam vaksin. Meskipun ada beberapa kultus kargo, secara umum praktik terbaik ada untuk alasan yang baik.
Dalam hal ini, kami memiliki pasangan:
Properti memungkinkan Anda untuk mengubah implementasi tanpa mengubah kode klien (pada tingkat biner, dimungkinkan untuk mengubah bidang ke properti tanpa mengubah kode klien pada tingkat sumber, namun itu akan dikompilasi ke sesuatu yang berbeda setelah perubahan) . Itu berarti, bahwa dengan menggunakan properti dari awal, kode yang mereferensikan milik Anda tidak perlu dikompilasi ulang hanya untuk mengubah apa yang properti lakukan secara internal.
Jika tidak semua nilai yang mungkin dari bidang tipe Anda adalah status yang valid, maka Anda tidak ingin memaparkannya ke kode klien yang diubah oleh kode itu. Dengan demikian, jika beberapa kombinasi nilai tidak valid, Anda ingin merahasiakan bidang tersebut (atau internal).
Saya telah mengatakan kode klien. Itu berarti kode yang memanggil Anda. Jika Anda tidak membuat perpustakaan (atau bahkan membuat perpustakaan tetapi menggunakan internal alih-alih publik), Anda biasanya dapat menghindarinya dan disiplin yang baik. Dalam situasi itu, praktik terbaik menggunakan properti ada untuk mencegah Anda menembak diri sendiri. Selain itu, jauh lebih mudah untuk berpikir tentang kode jika Anda dapat melihat semua tempat di mana bidang dapat berubah dalam satu file, daripada harus khawatir pada apa pun atau tidak itu sedang dimodifikasi di tempat lain. Bahkan, properti juga bagus untuk meletakkan breakpoint ketika Anda mencari tahu apa yang salah.
Ya, ada nilai melihat apa yang sedang dilakukan di industri. Namun, apakah Anda memiliki motivasi untuk menentang praktik terbaik? atau apakah Anda hanya menentang praktik terbaik - membuat kode lebih sulit untuk dipikirkan - hanya karena orang lain melakukannya? Ah, omong-omong, "orang lain melakukannya" adalah bagaimana Anda memulai kultus kargo.
Jadi ... Apakah gim Anda berjalan lambat? Anda lebih baik mencurahkan waktu untuk mencari tahu kemacetan dan memperbaikinya, daripada berspekulasi apa yang bisa terjadi. Anda dapat yakin bahwa kompiler akan melakukan banyak optimasi, karena itu, kemungkinan Anda melihat masalah yang salah.
Di sisi lain, jika Anda memutuskan apa yang harus dilakukan untuk memulai, Anda harus khawatir tentang apa algoritma dan struktur data terlebih dahulu, daripada khawatir tentang detail yang lebih kecil seperti bidang vs properti.
Akhirnya, apakah Anda mendapatkan sesuatu dengan menentang praktik terbaik?
Khusus untuk kasus Anda (Unity dan Mono untuk Android), apakah Unity mengambil nilai dengan referensi? Jika tidak, itu akan menyalin nilai pula, tidak ada peningkatan kinerja di sana.
Jika ya, jika Anda meneruskan data ini ke API yang membutuhkan referensi. Apakah masuk akal untuk membuat bidang menjadi publik, atau Anda dapat membuat jenisnya dapat memanggil API secara langsung?
Ya, tentu saja, mungkin ada optimasi yang bisa Anda lakukan dengan menggunakan struct dengan bidang telanjang. Misalnya, Anda mengaksesnya dengan pointer Span<T>
, atau serupa. Mereka juga kompak pada memori, membuatnya mudah untuk diserialisasi untuk mengirim melalui jaringan atau dimasukkan ke dalam penyimpanan permanen (dan ya itu adalah salinan).
Sekarang, sudahkah Anda memilih algoritme dan struktur yang tepat, jika ternyata menjadi hambatan, maka Anda memutuskan apa cara terbaik untuk memperbaikinya ... yang bisa berupa struct dengan bidang telanjang atau tidak. Anda akan dapat khawatir tentang itu jika dan kapan itu terjadi. Sementara itu Anda bisa khawatir tentang hal-hal yang lebih penting seperti membuat game yang baik atau menyenangkan layak dimainkan.