Selama proyek baru-baru ini yang saya kerjakan, saya harus menggunakan banyak fungsi yang terlihat seperti ini:
static bool getGPS(double plane_latitude, double plane_longitude, double plane_altitude,
double plane_roll, double plane_pitch, double plane_heading,
double gimbal_roll, double gimbal_pitch, double gimbal_yaw,
int target_x, int target_y, double zoom,
int image_width_pixels, int image_height_pixels,
double & Target_Latitude, double & Target_Longitude, double & Target_Height);
Jadi saya ingin mengubahnya agar terlihat seperti ini:
static GPSCoordinate getGPS(GPSCoordinate plane, Angle3D planeAngle, Angle3D gimbalAngle,
PixelCoordinate target, ZoomLevel zoom, PixelSize imageSize)
Bagi saya ini tampaknya jauh lebih mudah dibaca dan aman daripada metode pertama. Tetapi apakah masuk akal untuk membuat PixelCoordinate
dan PixelSize
kelas? Atau lebih baik saya menggunakan std::pair<int,int>
masing-masing saja. Dan apakah masuk akal untuk memiliki ZoomLevel
kelas, atau haruskah saya menggunakan saja double
?
Intuisi saya di balik menggunakan kelas untuk semuanya didasarkan pada asumsi ini:
- Jika ada kelas untuk semuanya, tidak mungkin untuk lulus
ZoomLevel
di manaWeight
objek diharapkan, sehingga akan lebih sulit untuk memberikan argumen yang salah ke suatu fungsi - Demikian juga, beberapa operasi ilegal akan menyebabkan kesalahan kompilasi, seperti menambahkan a
GPSCoordinate
ke yangZoomLevel
lainGPSCoordinate
- Operasi legal akan mudah untuk diwakili dan typesafe. yaitu mengurangi dua
GPSCoordinate
s akan menghasilkan aGPSDisplacement
Namun, sebagian besar kode C ++ yang saya lihat menggunakan banyak tipe primitif, dan saya membayangkan pasti ada alasan bagus untuk itu. Apakah ide yang bagus untuk menggunakan objek untuk apa pun, atau apakah ada kelemahan yang tidak saya sadari?