Pengembang menulis if/else
blok dengan pernyataan kode satu baris seperti:
if (condition)
// Do this one-line code
else
// Do this one-line code
Lain menggunakan kurung kurawal untuk semuanya:
if (condition)
{
// Do this one-line code
}
else
{
// Do this one-line code
}
Pengembang pertama instantiate objek, kemudian menggunakannya:
HelperClass helper = new HelperClass();
helper.DoSomething();
Pengembang lain membuat instantiate dan menggunakan objek dalam satu baris:
new HelperClass().DoSomething();
Pengembang lebih mudah dengan array, dan for
loop:
string[] ordinals = new string[] {'First', 'Second', 'Third'};
for (i = 0; i < ordinals.Length; i++)
{
// Do something
}
Yang lain menulis:
List<string> ordinals = new List<string>() {'First', 'Second', 'Third'};
foreach (string ordinal in ordinals)
{
// Do something
}
Saya yakin Anda tahu apa yang saya bicarakan. Saya menyebutnya gaya pengkodean (karena saya tidak tahu apa namanya). Tapi apa pun namanya, apakah itu baik atau buruk? Apakah mendorong itu berdampak pada produktivitas pengembang yang lebih tinggi? Haruskah kita meminta pengembang untuk mencoba menulis kode seperti yang kita katakan kepada mereka, sehingga membuat keseluruhan sistem menjadi konsisten dengan gaya?
project-management
productivity
coding-style
Saeed Neamati
sumber
sumber
var
bukan nama jenis yang memenuhi syarat.Jawaban:
Dokumen standar pengkodean bermanfaat. Ini sangat berguna ketika itu cukup singkat sehingga siapa pun dapat mengingat semuanya tanpa terlalu banyak kesulitan dan ketika itu tidak menyebabkan orang terlalu sakit.
Bagaimana Anda memilih untuk indentasi kode di organisasi Anda, atau kapitalkan nama, atau laksanakan loop Anda, atau komentar kode Anda tidak terlalu penting; bagian yang membantu adalah membuat semua orang untuk menulis kode yang hampir sama dengan orang lain.
Sekali lagi, apa standarnya tidak masalah sebanyak memiliki standar sederhana dan langsung. Jadi, letakkan semua pengembang Anda di ruangan dan biarkan mereka berdebat tentang standar apa yang seharusnya. Pertemuan ini bisa berlangsung tanpa batas waktu, jadi aturannya adalah:
Pertimbangkan mengadopsi seseorang | lagi | standar baik sebagai titik awal untuk pertemuan standar pengkodean Anda sendiri, atau sebagai cara untuk menghindari rapat sepenuhnya.
Setelah disepakati, pengembang harus dapat (dan diharapkan) mengawasi sendiri. Penyimpangan sesekali dari standar seharusnya tidak menjadi masalah besar (dan bahkan mungkin dapat dibenarkan), tetapi penolakan yang tegas untuk meninggalkan beberapa gaya pribadi favorit demi standar harus mengakibatkan relokasi langsung ke kantor dengan pipa air bocor, atau apa pun .
Demian Brecht menunjuk ke alat serat. Ini adalah pelengkap sempurna untuk dokumen standar pengkodean. Hanya baik untuk tetap berpegang pada standar gaya pengkodean ; sangat penting untuk tetap berpegang pada standar pengkodean yang terkait dengan praktik berbahaya. Tidak ada orang selain penulis yang akan memeriksa bahwa setiap baris kode memenuhi standar untuk gaya, tetapi Anda harus mempertimbangkan membangun alat serat ke dalam alur kerja tim Anda untuk secara otomatis menangkap kemungkinan bug. Selain itu, alat itu sendiri dapat mengodifikasi praktik yang diterima sehingga Anda tidak harus membuat daftar semuanya secara individu dalam standar pengkodean; cukup tentukan konfigurasi alat.
Catatan: Gagasan "standar pengkodean" tidak unik untuk pemrograman. "Standar pengkodean" digunakan di banyak bidang, kadang-kadang dalam suatu organisasi, lebih sering di seluruh industri atau profesi. Beberapa contoh:
Dalam setiap kasus (dan banyak lainnya) seorang praktisi yang kompeten dapat dengan mudah memahami "kode" yang tidak memenuhi standar yang diharapkan. Mengapa begitu banyak industri tetap menulis persyaratan terperinci untuk dokumen yang bahkan tidak perlu diuraikan oleh kompiler? Karena gaya itu penting . Menyajikan informasi dalam gaya standar memungkinkan pembaca fokus sepenuhnya pada konten, membuat membaca lebih cepat dan membantu pemahaman, dan mengurangi kesalahan.
sumber
Gaya tidak masalah.
Di sana, saya mengatakannya.
Setelah 30 tahun, dan ratusan situs klien, dan kode dari (memperkirakan) 500 (atau lebih) anggota tim selama tahun-tahun itu, saya mendapati bahwa gaya tidak penting.
Mulai bekerja, pertama.
Dapatkan untuk menggunakan volume sumber daya yang optimal (yaitu, struktur data yang tepat, algoritma yang tepat).
Ribut-ribut soal "gaya" setelah semua yang lain telah dipecahkan. Repotnya "style" hanya dengan alat, tidak pernah secara manual.
sumber
if (t) { x;y;}
daripadaif (t) x;y;
(selalu menggunakan '{}' setelah jika). Lebih suka kode const benar (sangat sulit untuk menambahkan kebenaran const ke dalam kode setelah telah ditulis. Gunakan std :: cout / std :: cin bukan fprintf / scanf yang pertama lebih cenderung menyebabkan kesalahan. Gunakan vektor daripada array (untuk membantu mencegah meluap)Ada gaya pengkodean dan ada bau kode. Bukan sekali yang saya temukan:
Majikan saya sebelumnya secara ketat melarang menggunakan multiline
if()
tanpa kawat gigi. Itu dianggap sebagai jenis kesalahan "lakukan lagi dan Anda dipecat". Konstruksi yang diizinkan adalahIni dihasilkan dari kesalahan seperti yang saya tunjukkan di atas, yang memakan waktu beberapa jam untuk menemukan menghentikan halaman utama portal.
Ada hal-hal yang harus selalu Anda lakukan. Seperti
switch()
:Sementara itu, mengetik:
tanpa menutup
case
dengan//fallthrough
dianggap sebagai bug.Secara umum, ada standar pengkodean yang merupakan pedoman yang dapat diabaikan, ditafsirkan secara kreatif atau dimodifikasi untuk kebutuhan yang diberikan. Dan ada bagian tentang "bau" dan harus dipatuhi dengan ketat.
sumber
Ciptakan konsistensi dengan desain awal yang baik. Apa yang Anda uraikan dalam pertanyaan tidak lain adalah manajemen mikro. Saya melakukan banyak pengembangan web. Jadi saya mendukung pengembangan RESTful dan CRUD sebagai layanan. Ini memastikan entitas yang sederhana dan terdefinisi dengan baik yang dapat digunakan dalam berbagai cara.
Desain ini juga memungkinkan saya untuk mendelegasikan detail implementasi ke pengembang lain. Dengan cara ini mereka mengisi kekosongan daripada menciptakan desain sistem secara keseluruhan.
Kurangnya desain keseluruhan menciptakan inkonsistensi sistem. Kritik dari iterasi dasar dan konstruksi pengulangan tidak banyak memperbaiki desain sistem. Masalah seperti ini lebih baik diselesaikan dengan pendekatan langsung, StyleCop.
Bisakah Anda menggambar diagram yang relatif sederhana dari keseluruhan desain sistem Anda? Sebuah desain yang menggambarkan elemen / entitas yang terlibat dalam suatu tim pengembang baru. Jika Anda tidak bisa, atau sangat terlibat maka desainnya kurang.
sumber
IMHO itu tergantung ...
Dua contoh pertama Anda bukan hanya masalah selera pribadi bagi saya.
(tanpa tanda kurung) = lebih banyak rawan bug, jika lebih banyak kode ditambahkan kemudian:
Dan ini kurang nyaman untuk di-debug:
Anda tidak bisa begitu saja menetapkan breakpoint di mana Anda membutuhkannya. Jika ini satu kali - cukup adil, tapi kami membahasnya sebagai masalah gaya, dan begitu Anda memiliki hal-hal seperti ini di semua tempat, debugging menjadi lebih tidak menyenangkan daripada yang seharusnya.
Adapun contoh ketiga Anda (untuk vs foreach), saya melihatnya sebagai masalah selera.
sumber
Tidak juga. Saya akan menghindari aturan pengkodean yang keras untuk menghindari membosankan, nit-pilih-pilih, manajerial mikro dan terburuk dari semua membuang-buang waktu. Rasa otonomi Anda adalah masalah Anda sendiri. Jika saya ingin Anda merasa lebih baik tentang diri Anda, saya akan membelikan Anda minuman favorit Anda. Selain itu, selesaikan sesuatu.
sumber
Penggunaan konvensi, nama variabel, nama kelas, dll. Adalah praktik yang baik. Tetapi gaya pengkodean seperti contoh yang Anda berikan agak sepele dan tidak berpengaruh pada keterbacaan atau efisiensi kode. Di sisi lain, overhead dari menegakkan gaya yang diberikan dikombinasikan dengan upaya pengembang untuk mengikutinya akan menyebabkan masalah.
sumber
Gunakan alat linting standar industri (tampaknya FxCop untuk C #). Meskipun ini bukanlah konsistensi akhir, semua-semua, adalah penting dalam proyek-proyek besar yang memiliki sejumlah orang yang mengerjakannya.
Jika Anda hanya mengerjakan proyek Anda sendiri atau tim kecil, banyak yang akan berpendapat bahwa itu berlebihan. Saya percaya sebaliknya (saya menggunakan PEP8 untuk Python, bahkan dalam proyek pengembang tunggal pribadi saya).
Akan tetapi, sebagian besar contoh yang Anda berikan kemungkinan besar tidak akan ditangkap oleh alat serabut karena tidak penting.
sumber
Menegakkan gaya pengkodean seragam selalu sulit. Idealnya tugas duniawi semacam itu harus diserahkan kepada alat untuk ditangani. Saya memuji komunitas bahasa Go untuk melakukan itu.
sumber
Ini campuran keduanya. Hanya karena standar tidak membuatnya dapat dibaca dan dipelihara. Jika belum ada standar yang ditanamkan, atau ada aspek yang salah dan tidak dapat dibaca, revisi sudah tepat.
sumber
Dalam analisis akhir, programmerlah yang mendorong pemrograman. Masalah gaya ada, tetapi mereka sekunder untuk mengeluarkan program.
Sangat membantu untuk memberikan beberapa panduan gaya kepada programmer. Ini bisa / harus dilakukan sebelum para programmer dipekerjakan, terutama jika mereka adalah pemula relatif terhadap lingkungan, atau untuk pemrograman itu sendiri. Diberi bimbingan, beberapa programmer akan sangat sadar gaya, yang lain kurang begitu. Bimbingan yang diberikan pada awal proyek akan membantu kelompok programmer pertama, sehingga membuat tugas keseluruhan lebih mudah. Ini mungkin sedikit bermanfaat bagi kelompok kedua, yang (semoga) akan menjadi kreatif, yang kurang sesuai.
sumber
Saya pikir itu turun ke ukuran proyek, dan berapa banyak orang yang mengerjakannya. Seorang programmer yang terampil dapat melihat kedua gaya format yang berbeda dan tahu apa yang terjadi pada keduanya tetapi perlu ada konsistensi sehingga mata dapat menangkapnya dengan mudah. Jika Anda akan melakukan satu baris ifstatments Anda dengan kurung kurawal maka proyek itu tidak boleh menggunakannya Siapa yang pernah memimpin proyek itu harus memiliki pilihan itu. Saya suka hal-hal yang terlihat jelas dan juga sangat kompak karena saya bisa mendapatkannya. Jika Anda akan membuat satu baris jika statmeents mereka lebih baik terlihat seperti ini
Atau bahkan:
Tetapi satu baris jika tidak harus menggunakan spasi dari mulitiline jika. Itu hanya bagaimana saya melakukan sesuatu. Saya tidak keberatan dengan cara objek dipanggil dan itu tergantung pada berapa kali disebut. jika dipanggil beberapa kali maka saya lebih suka memulai objek dan tergantung apakah ia memiliki konstruktor dan apa yang tidak juga. Karena jika Anda memiliki konstruktor dan Anda memanggil:
Kemudian Anda akhirnya memanggil metode objek konstruktor dua kali ketika itu bisa dihindari dengan menginstensikan objek sepenuhnya.
Ketika datang ke foreach dan untuk loop Ini juga tentang lanauge beberapa lanauges memberi Anda kontrol yang lebih baik ketika melihat array dalam loop foreach sehingga Anda memiliki kunci dan nilai dalam array temp. Dan saya tahu beberapa liga memiliki semacam optimasi karena mereka dapat melihat loop dan tahu persis berapa kali akan dipanggil.
sumber
Meskipun contoh pertama Anda tidak terlalu bagus (argumen bahwa ini lebih rawan bug dalam modifikasi membawa beberapa bobot), secara umum saya sebenarnya sudah tumbuh untuk lebih suka bahwa pengembang menggunakan gaya pengkodean yang sedikit berbeda.
Setelah bekerja dengan kode anggota tim yang lain, kadang-kadang hanya untuk beberapa bulan, pada dasarnya mulai bekerja dengan garis sebaris
git blame
. Setelah berada di perusahaan saya selama 10+ tahun, saya mungkin dapat memberi tahu Anda dengan akurasi 80% + yang menulis kelas mana saja di baris kode 500k kami, hanya dengan melihatnya.Walaupun ada sedikit "waktu ramp" ketika Anda mulai melihat kode yang menggunakan gaya yang tidak Anda setujui, apa yang sebenarnya Anda lakukan pada waktu itu adalah mengatakan "oh, ini terlihat seperti kode John Doe (karena dia menggunakan gaya X tetapi tidak gaya Y, dll) ". Dan itu membawa banyak sekali konteks. Untuk perkiraan pertama, Anda tahu apa yang diharapkan dari kode John - apa bagian lain dari basis kode yang ia pahami dengan baik dan bagian mana yang tidak ia pahami, apakah ia seorang guru SQL atau pemula GUI, dll.
Menjalankan kode semua orang melalui pemformat pada dasarnya menghapus informasi ini, menyembunyikannya di belakang
git blame
, yang mungkin tidak perlu Anda jalankan.sumber
Ini sangat tergantung pada jenis organisasi.
Jika Anda adalah sekelompok kecil pahlawan super, maka jenis gaya apa pun tidak masalah. Jika setiap orang memiliki gaya mereka sendiri, dan itu baik dan konsisten secara internal, maka itu semua proses yang Anda butuhkan. Pahlawan Super akan mengatakan, "Jane memiliki tanda kurung, jadi ini yang ia maksudkan" atau "Jack menggunakan camelCase untuk variabel".
Standar universal cenderung menjadi yang terbaik untuk membuat semua orang menjadi pemain B +. Pahlawan super Anda akan ditarik ke bawah oleh ini. Tetapi jika Anda ingin satu pemain A dan setengah lusin pemain B dan setengah lusin pemain C rata-rata hingga B +, maka Anda menginginkan standar yang konsisten. Dalam hal ini, Anda ingin semua orang melakukan hal yang sama sehingga pemain A dapat berjalan melalui kode semua orang secepat mungkin.
Banyak dari Anda berkata, "Tapi tunggu, mengapa tidak menyingkirkan pemain B dan C?"
Kenyataannya adalah tidak ada banyak Superhero. Meskipun mungkin membayar untuk menemukan dan memelihara mereka di Google, menempatkan sistem penagihan baru untuk Ma Bell mungkin lebih hemat biaya dengan tim yang terakhir. (Dan jika Anda benar-benar memiliki Superheroes, 4 atau 5 dari mereka akan dua kali lebih mahal dari selusin junior)
sumber