Misalnya, fungsi berikut loop melalui array yang berisi nama dan kesalahan bidang input. Ini dilakukan dengan memeriksa nama bidang validasi dan kemudian mendorong info kesalahan ke array bidang yang tidak valid.
Apakah lebih baik untuk singkat dan menulis ini:
addInvalidField (field, message) {
const foundField = this.invalidFields.find(value => {
return value.name === field.name
})
const errors = foundField.errors
if (!errors.some(error => error.name === message)) {
errors.push({ name: message, message })
}
},
Atau lebih spesifik seperti ini?
addInvalidField (validatingField, message) {
const foundField = this.invalidFields.find(invalidField => {
return validatingField.name === invalidField.name
})
if (!foundField.errors.some(foundFieldError => foundFieldError.name === message)) {
fouldField.errors.push({ name: message, message })
}
},
coding-style
naming
alex
sumber
sumber
Jawaban:
Jika singkatnya dapat dikorbankan untuk kejelasan, itu harus. Tetapi jika verbositas dapat dikorbankan demi kejelasan, bahkan lebih baik.
Ketika sebuah variabel hanya hidup selama satu baris, itu bisa sangat pendek.
FoundInvalidField
digunakan dalam tiga baris dan merupakan fokus dari pekerjaan ini. Itu layak nama yang jelas.Seperti biasa, konteks adalah raja.
sumber
Saya sebenarnya menyukai contoh kode pertama Anda.
Jelas terlihat apa yang dilakukan kode hanya dengan membacanya. Dengan menjaga nama variabel sekecil mungkin, Anda membuat kode lebih mudah dibaca. Nama variabel yang lebih deskriptif hanya akan diperlukan jika fungsi Anda lebih lama, variabel Anda lebih banyak dan / atau variabel digunakan pada cakupan kode yang lebih besar.
Itu karena Anda telah membuat fungsi Anda singkat sehingga Anda juga dapat membuat nama variabel Anda singkat. Semua hal lain dianggap sama, lebih sedikit kode selalu lebih baik.
sumber
validatingFields
adalah bidang formulir dengan validasi. Nama aslinya adalahfieldWithValidation
. Sangat sulit untuk menemukan nama pendek untuk yang satu ini. Saya bisa menyebutnya hanyafield
tapi kemudian akan ada konflik dengan yang lainfield
di dalam metode ini.Saya pikir saya setuju dengan Paman Bob untuk memilih kejelasan tanpa menimbulkan kata-kata yang berlebihan . Dalam contoh yang Anda tunjukkan, saya akan mengatakan bahwa niat orang kedua lebih jelas tanpa menimbulkan kata-kata yang berlebihan . Juga akan lebih mudah untuk menemukan potongan tertentu ketika mencari melalui basis kode
invalidField
daripada untukvalue
.Yah saya mengutip Kode Bersih di sini (lewati saja jika Anda muak dengan khotbah Paman Bob (yang bukan aku):
Gunakan nama yang akan membantu Anda melakukan
grep -iIR whateveryouaresearching .
(bukan Kode Bersih, di sini CC hanya berbicara tentang variabel huruf tunggal).sumber
Saya selalu memilih untuk menjadi lebih deskriptif hari ini - Penyelesaian kode IDE berarti Anda tidak perlu menulis nama variabel deskriptif sehingga saya tidak dapat melihat sisi buruknya.
Kembali ke masa prasejarah, Anda memiliki batasan nama variabel dan menggunakan nama variabel yang berarti dapat benar-benar menimbulkan biaya yang terukur (misalnya di BBC BASIC menggunakan variabel statis bilangan bulat% D dll. Jauh lebih murah daripada menggunakan bilangan bulat bermakna - dan dalam sistem dengan 1MHz prosesor, menghemat beberapa siklus clock dalam satu loop sebenarnya penting)
sumber
Varian kedua terlihat membuat saya bingung. Ketika saya hanya melihat tanda tangan, saya bertanya-tanya apakah bidang itu sudah dikenal sebagai beeing invalid? Atau akankah itu divalidasi terlebih dahulu (seperti namanya
validatingField
), untuk mengetahui apakah itu benar-benar tidak valid? Jadi ini bukan hanya informasi yang berlebihan di sini, informasi tambahan itu tampaknya agak menyesatkan. "Kejelasan" semacam ini tidak lebih jelas, justru sebaliknya.Sebenarnya, ketika saya melihat fungsi pertama Anda, itu membuat saya bingung juga. Saya bertanya pada diri sendiri mengapa sih fungsi Anda hanya mengambil bidang, tetapi kemudian tidak menggunakannya dan mencari yang lain
invalidFields
? Mencari bidang tampaknya jauh lebih masuk akal ketika hanya ada nama bidang yang diberikan, seperti ini:Namun, saya kira Bob Martin mungkin akan melangkah lebih jauh dan membuat kode lebih bertele-tele - untuk lebih jelasnya - ke arah yang berbeda. Refactoring tipikal di sepanjang baris buku "Kode Bersih" mungkin akan terlihat seperti ini:
dengan tiga fungsi tambahan
Dapat diperdebatkan jika membayar sejauh itu dengan prinsip tanggung jawab tunggal. Sebenarnya ada beberapa pro dan kontra. Pandangan pribadi saya adalah bahwa kode asli "cukup bersih" untuk sebagian besar kode produksi, tetapi kode yang dire-refour lebih baik.
Ketika saya tahu saya harus menambahkan sesuatu ke varian pertama sehingga akan tumbuh lebih dan lebih, saya akan membaginya ke fungsi-fungsi yang lebih kecil sebelumnya, sehingga kode itu bahkan tidak akan mulai menjadi berantakan.
sumber
validatingFields
adalah bidang dalam formulir yang memiliki validasi. Awalnya, saya beri namafieldsWithValidation
tetapi agak panjang.Tidak ada jawaban yang benar secara umum dalam penamaan. Banyak orang ketika diberi set tugas yang sama persis akan menamai fungsi dan variabel yang dihasilkan sangat berbeda. Tentu saja Anda ingin orang lain yang membaca kode Anda mengerti, tetapi lebih lama tidak selalu berarti ada sesuatu yang lebih jelas. Jika kode Anda lebih padat maka perlu maka itu akan membutuhkan lebih banyak waktu untuk memahami bahkan setiap baris fungsi Anda sejelas dan deskriptif seperti itu.
Secara pribadi, saya lebih suka contoh pertama. Itu lurus dan to the point bahkan dengan variabel tidak memiliki nama deskriptif seperti pada contoh kedua. Sejujurnya, nama-nama variabel dalam contoh kedua tidak jauh lebih jelas daripada yang pertama menurut pendapat saya dan menjaga fungsi singkat membuatnya lebih mudah untuk memahami fungsi itu sendiri.
Pada akhirnya, mana yang lebih baik akan terserah Anda dan siapa pun yang bekerja dengan Anda. Bagaimanapun, itulah yang akan membacanya dan memeliharanya.
sumber