Saya sedang berdebat dengan teman saya mengenai apakah kedua latihan ini hanyalah dua sisi dari mata uang yang sama, atau apakah satu benar-benar lebih baik.
Kami memiliki fungsi yang mengambil parameter, mengisi anggota itu, dan kemudian mengembalikannya:
Item predictPrice(Item item)
Saya percaya bahwa saat ia bekerja pada objek yang sama yang dilewatkan, tidak ada gunanya mengembalikan item. Bahkan, jika ada, dari sudut pandang penelepon, itu membingungkan karena Anda bisa mengharapkannya untuk mengembalikan item baru yang tidak.
Dia mengklaim bahwa tidak ada bedanya, dan bahkan tidak masalah jika itu menciptakan Item baru dan mengembalikannya. Saya sangat tidak setuju, karena alasan berikut:
Jika Anda memiliki beberapa referensi ke item yang lewat (atau pointer atau apa pun), itu mengalokasikan objek baru dan mengembalikannya adalah penting secara materi karena referensi tersebut akan salah.
Dalam bahasa yang dikelola non-memori, fungsi yang mengalokasikan instance baru mengklaim kepemilikan memori, dan dengan demikian kita harus menerapkan metode pembersihan yang disebut di beberapa titik.
Mengalokasikan pada heap berpotensi mahal, dan karena itu penting untuk apakah fungsi yang dipanggil melakukan itu.
Oleh karena itu, saya percaya sangat penting untuk dapat melihat melalui metode tanda tangan apakah itu memodifikasi objek, atau mengalokasikan yang baru. Sebagai hasilnya, saya percaya bahwa karena fungsinya hanya memodifikasi objek yang dilewatkan, tanda tangannya harus:
void predictPrice(Item item)
Di setiap basis kode (diakui C dan C ++ basis kode, bukan Java yang merupakan bahasa tempat kami bekerja) saya telah bekerja dengan, gaya di atas pada dasarnya telah dipatuhi, dan dipelihara oleh programmer yang jauh lebih berpengalaman. Dia mengklaim bahwa ukuran sampel basis kode dan kolega saya kecil dari semua basis kode dan kolega yang mungkin, dan dengan demikian pengalaman saya bukanlah indikator yang benar tentang apakah seseorang lebih unggul.
Jadi, ada pemikiran?
Item
ini class Item ...
dan tidak typedef ...& Item
, lokal item
sudah salinan