Tidak ada yang super jelas alasan yang mengapa harus menggunakan sintaks jenis ini.
Secara umum, cobalah untuk menghindari memiliki argumen boolean yang di kejauhan mungkin terlihat sewenang-wenang. includeManagement
akan (kemungkinan besar) mempengaruhi hasilnya. Tapi argumennya sepertinya membawa "sedikit berat".
Penggunaan enum telah dibahas, tidak hanya akan terlihat seperti argumen "membawa lebih banyak berat", tetapi juga akan memberikan skalabilitas pada metode ini. Namun ini mungkin bukan solusi terbaik dalam semua kasus, karena ReturnEmployeeIds
-metode Anda harus berskala bersama WhatToInclude
-enum (lihat NiklasJ jawaban ). Ini mungkin memberi Anda sakit kepala nanti.
Pertimbangkan ini: Jika Anda skala WhatToInclude
-enum, tetapi bukan -metode ReturnEmployeeIds
. Mungkin kemudian melempar ArgumentOutOfRangeException
(kasus terbaik) atau mengembalikan sesuatu yang sama sekali tidak diinginkan ( null
atau kosong List<Guid>
). Yang dalam beberapa kasus mungkin membingungkan programmer, terutama jika AndaReturnEmployeeIds
berada di perpustakaan kelas, di mana kode sumber tidak tersedia.
Orang akan berasumsi bahwa itu WhatToInclude.Trainees
akan berhasil jika WhatToInclude.All
dilihat, melihat bahwa peserta pelatihan adalah "bagian" dari semuanya.
Ini tentu saja tergantung pada bagaimana ReturnEmployeeIds
penerapannya.
Dalam kasus di mana argumen boolean dapat diajukan, saya mencoba memecahnya menjadi dua metode (atau lebih, jika diperlukan), dalam kasus Anda; orang dapat mengekstrak ReturnAllEmployeeIds
, ReturnManagementIds
dan ReturnRegularEmployeeIds
. Ini mencakup semua pangkalan dan sangat jelas bagi siapa pun yang mengimplementasikannya. Ini juga tidak akan memiliki masalah "penskalaan", yang disebutkan di atas.
Karena hanya ada dua hasil untuk sesuatu yang memiliki argumen boolean. Menerapkan dua metode, membutuhkan sedikit usaha ekstra.
Kode kurang, jarang lebih baik.
Dengan kata, ada yang beberapa kasus di mana secara eksplisit menyatakan argumen meningkatkan keterbacaan. Pertimbangkan misalnya. GetLatestNews(max: 10)
. GetLatestNews(10)
adalah masih cukup jelas, deklarasi eksplisit max
akan membantu menjernihkan setiap kebingungan.
Dan jika Anda benar-benar harus memiliki argumen boolean, penggunaan yang tidak dapat disimpulkan dengan hanya membaca true
atau false
. Maka saya akan mengatakan itu:
var ids = ReturnEmployeeIds(includeManagement: true);
.. benar-benar lebih baik, dan lebih mudah dibaca daripada:
var ids = ReturnEmployeeIds(true);
Karena dalam contoh kedua, true
mungkin berarti apa pun . Tetapi saya akan mencoba untuk menghindari argumen ini.
boolean
argumen metode, dan bagaimana?