Saya baru saja mulai di sebuah perusahaan dan salah satu komentar gaya di review kode pertama saya adalah bahwa jenis kembali dan nama metode harus pada baris yang berbeda. Sebagai contoh, ini
void foo() {
}
seharusnya ini
void
foo() {
}
Saya selalu menggunakan gaya pertama, dan saya bertanya-tanya apakah ada alasan selain preferensi pribadi mengapa orang menggunakan gaya kedua? Saya tidak berpikir yang pertama menyakitkan keterbacaan sama sekali. Apakah satu lebih umum daripada yang lain dengan programmer C dan proyek open source besar?
c
coding-style
gsingh2011
sumber
sumber
Jawaban:
Itu adalah gaya yang populer pada masa-masa awal C, jadi alasannya mungkin karena itulah yang telah mereka lakukan untuk waktu yang sangat lama, mereka punya banyak kode yang terlihat seperti itu, dan itulah yang semua orang terbiasa. Preferensi pribadi tidak begitu banyak seperti momentum perusahaan.
Alasan lain adalah bahwa nama fungsi selalu dimulai di kolom pertama. Jenis kembali bervariasi panjangnya dan bisa agak rumit - menempatkan tipe pada barisnya sendiri membuat nama fungsi lebih mudah ditemukan.
Jika perusahaan memiliki gaya yang ditetapkan, mereka mungkin juga memiliki dokumen standar pengkodean. Minta itu. Ini dapat menjelaskan alasan pilihan ini, dan memiliki salinan akan membantu Anda menghindari masalah serupa di ulasan mendatang.
sumber
__attribute
s. Dan kemudian ketika juga melihat C ++ Anda dapat memiliki tipe pengembalian yang relatif kompleks sehingga di suatu tempat orang mungkin harus menambahkan jeda baris.^start_of_a_long_func
dan segera dibawa ke fungsi yang kita cari.Ini cukup banyak satu-satunya aturan pemformatan kode yang saya temukan benar-benar membuat dampak nyata pada keterbacaan dan hampir tidak ada upaya (dengan asumsi editor kode Anda tidak memulai pertengkaran dengan Anda karenanya).
Ini adalah desain bahasa pemrograman yang bagus untuk membuat nama muncul dalam posisi yang konsisten dalam deklarasi / definisi. Alasannya sederhana: Anda memiliki jangkar visual yang bagus (kurung kurawal atau hanya lekukan gantung) yang dapat Anda gunakan untuk segera menemukan awal nama. Anda tidak harus benar-benar menguraikan bahasa saat memindai melalui file menemukan nama.
Itu sama seperti ketika Anda memformat dokumen: ketika Anda memulai bagian baru Anda meletakkan nama di depan dalam huruf tebal - sering pada barisnya sendiri - tidak dikubur di suatu tempat, tidak berbeda, dalam kalimat yang panjang.
Awal C memiliki tanda tangan yang sangat singkat: tipe pengembalian adalah opsional dan tipe argumen dinyatakan setelah tanda tangan. Nama-nama juga cenderung sangat pendek. Ini mengurangi dampak dari memiliki tipe pengembalian sesekali mengimbangi nama.
Masih cukup mudah dicerna.
C ++ membuat ini sedikit lebih buruk. Ini memindahkan spesifikasi tipe argumen menjadi tanda tangan yang membuat tanda tangan lebih lama. Sintaks ini kemudian diadopsi selama standarisasi C.
kurang mudah dicerna, tetapi tidak terlalu buruk. (Kutipan dari Git)
Sekarang pertimbangkan praktik pemrograman modern dengan nama deskriptif yang panjang dan tipe parametrized dan lihat bagaimana pilihan ini menjadi bencana. Contoh dari tajuk Boost:
Jika Anda menulis kode generik, tanda tangan seperti itu bahkan tidak luar biasa. Anda dapat menemukan contoh kasus yang jauh lebih buruk daripada ini tanpa berusaha terlalu keras.
C, C ++, dan turunannya, Java dan C #, tampaknya menjadi pengecualian untuk memiliki deklarasi / definisi yang dapat dibaca. Pendahulu dan rekan-rekan mereka yang populer (Fortran, ALGOL, Pascal) menempatkan nama di depan tipe hasil dan, untungnya, banyak penerus mereka (Go, Scala, TypeScript, dan Swift untuk menyebutkan beberapa) telah memilih sintaksis yang lebih mudah dibaca juga.
sumber
Saya pertama kali bertemu gaya ini pada seperti tahun 19 bekerja dengan C & C ++. Cukup bingung tentang bagaimana seseorang bisa menciptakan benda jahat ini.
Satu-satunya titik (berpotensi) positif yang bisa saya temukan adalah bahwa Anda dapat menemukan definisi funciton menggunakan grep ^ FuncName. Mungkin menjadi faktor yang relevan dekade + yang lalu di beberapa alat yang benar-benar membenci komunitas ... Di tempat saya melihatnya diterapkan ke C ++ dan fungsi anggota kelas, yang membunuh bahkan atribut ini.
Tebak pendapat saya. :)
sumber
grep -P '^(\w+::)?FuncName'