Sementara pengkodean proyek besar dalam CI menemukan masalah. Jika saya terus menulis kode lagi maka akan ada waktu ketika saya akan kesulitan mengatur kode. Maksud saya, penamaan untuk fungsi dan variabel untuk bagian program yang berbeda mungkin keliru.
Jadi saya berpikir apakah ada konvensi penamaan yang berguna yang dapat saya gunakan untuk variabel dan fungsi C?
Sebagian besar bahasa menyarankan konvensi penamaan. Tetapi untuk C satu-satunya hal yang saya baca sejauh ini adalah nama-nama harus deskriptif untuk keterbacaan kode.
EDIT:
Contoh beberapa contoh konvensi penamaan yang disarankan:
Saya membaca beberapa konvensi penamaan untuk java di suatu tempat tetapi tidak ingat di mana.
order.c
, Anda bisa memberi nama fungsinyaorder_add()
,order_del()
dan semacamnya. Mungkin ada sistem lama yang memberi tahu Anda bahwa namanya harus unik dalam 8 karakter pertama. Bila Anda beralih ke c ++ kemudian oleh kecelakaan, Anda akan menyukai untuk menulisorder::add()
danorder::del()
kemudian.Jawaban:
Ini adalah masalah Anda: perbaiki organisasi, dan gaya harus mengalir lebih mudah.
Jangan menunggu untuk mengatur kode Anda: pertahankan kode Anda tetap berjalan. Meskipun bahasa tidak melakukannya untuk Anda, kode tetap harus diatur ke dalam modul dengan kopling rendah dan kohesi tinggi.
Modul-modul ini kemudian secara alami menyediakan namespace. Singkat nama modul (jika panjang) dan awali nama fungsi dengan modul mereka untuk menghindari tabrakan.
Pada tingkat pengidentifikasi individu, ini secara kasar berada dalam urutan subyektivitas yang meningkat:
function_like_this(struct TypeLikeThis variable)
umumpasti menghindari notasi Hongaria (maaf JNL)
kecuali Anda bersedia menggunakannya seperti yang dimaksudkan semula, yang berarti notasi aplikasi Simonyi daripada versi sistem yang mengerikan
Mengapa? Saya bisa menulis esai tentang ini, tetapi saya akan menyarankan Anda membaca artikel ini oleh Joel Spolsky, dan kemudian berburu lagi jika Anda tertarik. Ada tautan ke kertas asli Simonyi di bagian bawah.
hindari pointer typedefs kecuali jenis cookie yang benar-benar buram - mereka hanya membingungkan hal-hal
Apa yang saya maksud dengan jenis cookie buram ? Maksud saya sesuatu yang digunakan di dalam modul (atau perpustakaan, atau apa pun) yang harus diteruskan ke kode klien, tetapi kode klien itu tidak dapat digunakan secara langsung. Itu hanya meneruskannya kembali ke perpustakaan.
Sebagai contoh, pustaka database mungkin mengekspos antarmuka seperti
Sekarang, konteksnya buram ke kode klien, karena Anda tidak dapat melihat ke dalam. Anda baru saja mengembalikannya ke perpustakaan. Sesuatu seperti
FILE
juga buram, dan deskriptor file integer juga cookie , tetapi tidak buram.Catatan tentang desain
Saya menggunakan frasa kopling rendah dan kohesi tinggi di atas tanpa penjelasan, dan saya merasa agak buruk tentang itu. Anda dapat mencarinya, dan mungkin menemukan beberapa hasil yang baik, tetapi saya akan mencoba mengatasinya secara singkat (sekali lagi, saya bisa menulis esai tetapi akan berusaha untuk tidak melakukannya).
Pustaka DB yang digambarkan di atas menunjukkan kopling rendah karena memperlihatkan antarmuka kecil ke dunia luar. Dengan menyembunyikan detail implementasinya (sebagian dengan trik cookie yang tidak jelas), ia mencegah kode klien bergantung pada detail itu.
Bayangkan alih-alih cookie buram, kami mendeklarasikan struktur konteks sehingga isinya terlihat, dan itu termasuk deskriptor file socket untuk koneksi TCP ke database. Jika kami kemudian mengubah implementasi untuk mendukung menggunakan segmen memori bersama ketika DB berjalan pada mesin yang sama, klien perlu dikompilasi ulang daripada hanya dihubungkan kembali. Lebih buruk lagi, klien bisa mulai menggunakan deskriptor file, misalnya panggilan
setsockopt
untuk mengubah ukuran buffer default, dan sekarang perlu perubahan kode juga. Semua perincian ini harus disembunyikan di dalam modul kami di mana praktis, dan ini memberikan sambungan rendah antara modul.Contoh ini juga menunjukkan kohesi yang tinggi , bahwa semua metode dalam modul berkaitan dengan tugas yang sama (akses DB). Ini berarti bahwa hanya kode yang perlu tahu tentang detail implementasi (yaitu, konten cookie kami) yang benar-benar memiliki akses ke mereka, yang menyederhanakan proses debug.
Anda juga dapat melihat bahwa memiliki satu masalah memudahkan untuk memilih awalan untuk mengelompokkan fungsi-fungsi ini bersama-sama.
Sekarang, mengatakan contoh ini baik itu mudah (terutama karena itu bahkan tidak lengkap), tetapi tidak segera membantu Anda. Triknya adalah menonton, saat Anda menulis dan memperluas kode Anda, untuk fungsi yang melakukan hal serupa atau beroperasi pada tipe yang sama (yang mungkin merupakan kandidat untuk modul mereka sendiri), dan juga untuk fungsi yang melakukan banyak hal terpisah yang tidak benar-benar terkait, dan mungkin menjadi kandidat untuk berpisah.
sumber
with low coupling and high cohesion
. Apa artinya? Dan tolong jelaskan tentang jenis cookie buram. Saya tidak tahu apa artinya itu.low coupling and high cohesion
. Jadi itu pada dasarnya berarti merangkum hal-hal ketika saya bisa dan itu harus dilakukan dengan cara bahwa fungsi yang sebenarnya perlu harus memiliki akses. Beberapa hal terlintas di kepalaku, tapi tetap saja aku pikir aku mengerti maksudmu.Menurut pendapat saya 90% dari masalah penamaan diselesaikan jika Anda mengingat tiga hal: a) membuat nama variabel dan fungsi Anda sejelas mungkin, b) konsisten di seluruh kode Anda (yaitu, jika suatu fungsi bernama addNumber, a Fungsi kedua harus dinamai multiplyNumber dan bukan numberMul) dan c) mencoba menyingkat nama jika mungkin, karena kita perlu mengetiknya.
Yang dikatakan jika Anda ingin melihat aspek-aspek lain pada topik ini halaman Wikipedia tentang Konvensi Penamaan memiliki daftar hal-hal yang baik yang harus Anda ingat. Ia juga memiliki bagian pada C dan C ++:
sumber
Satu-satunya kendala di C adalah bahwa tidak ada ruang nama. Oleh karena itu, Anda harus menemukan cara untuk membuat
rename()
fungsi pustaka sistem file Anda berbeda darirename()
fungsi pustaka media Anda . Solusi yang biasa adalah awalan, seperti:filesystem_rename()
danmedia_rename()
.Saran umum lainnya adalah: tetap konsisten dalam proyek atau tim. Keterbacaan akan ditingkatkan.
sumber
JIKA ANDA MENCARI FORMAT DITERIMA GLOBAL
MISRA / JSF / AUTOSAR mencakup hampir 100% dari setiap dan setiap standar industri untuk penamaan dan pengorganisasian kode C / C ++. Masalahnya adalah bahwa mereka tidak akan bebas untuk mendapatkan yaitu masing-masing buku panduan biaya uang. Saya tahu bahwa buku standar pengkodean MISRA 2008 C / C ++ mungkin berharga sekitar 50 USD.
Anda dapat menganggap ini sebagai Referensi Harvard untuk daftar pustaka dan bacaan tambahan ketika Anda menulis jurnal. Saya telah menggunakan MISRA dan ini adalah cara yang baik untuk memberi nama fungsi dan variabel Anda, dan mengaturnya untuk penggunaan yang tepat.
JIKA ANDA MENCARI SESUATU SEMENTARA
Referensi yang Anda berikan untuk Python dan Java oke saya kira. Saya telah melihat orang mengadopsi gaya javadoc berkomentar, penamaan, dan pengorganisasian kode. Sebagai soal fakta, dalam proyek terakhir saya, saya harus menulis kode C ++ dalam fungsi / nama variabel seperti Java. Dua alasan di balik ini:
1) Tampaknya lebih mudah diikuti.
2) Persyaratan kode produksi tidak menyentuh landasan standar sistem perangkat lunak keamanan-kritis.
3) Kode lama (entah bagaimana) dalam format itu.
4) Doxygen diizinkan berkomentar tentang sytle Javadoc. Pada saat itu, kami menggunakan doxygen untuk menghasilkan dokumentasi untuk orang-orang produksi.
Banyak programmer akan menentang hal ini, tetapi saya pribadi berpendapat bahwa tidak ada yang salah dengan mengadopsi fungsi gaya javadoc / penamaan variabel dalam C / C ++. YA TENTU SAJA, praktik pengorganisasian kontrol aliran Anda, keamanan benang, dll. Perlu diatasi. Namun, saya bukan pelamar di sini. Saya juga tidak tahu seberapa ketat persyaratan format kode produksi Anda. Tanpa mengalihkannya ke area di luar topik, saya sarankan Anda meninjau persyaratan Anda, mencari tahu seberapa tergantung Anda pada konvensi penamaan tertentu, dan pergi dengan solusi yang disebutkan dalam jawaban saya dan orang lain
Semoga ini bisa membantu !?
sumber
Beberapa hal penting yang perlu dipertimbangkan saat penamaan adalah;
Lihatlah jenis actionObject atau ObjectAction. (Bukan Objek untuk C. Tapi secara umum ketika Anda pergi ke Bahasa Berorientasi Objek lainnya) Ini akan membantu
Istirahat akan MENJADI KONSISTEN, singkat dan deskriptif pasti.
sumber
Sebagian besar jawabannya baik, tetapi saya ingin mengatakan beberapa hal tentang penamaan konvensi untuk perpustakaan dan termasuk file, mirip dengan menggunakan ruang nama dalam bahasa lain seperti C ++ atau Java:
Jika Anda membangun perpustakaan, temukan awalan umum untuk simbol yang diekspor, yaitu fungsi global, typedefs, dan variabel. Ini akan mencegah bentrokan dengan perpustakaan lain dan mengidentifikasi fungsi yang berasal dari Anda. Ini sedikit aplikasi Notasi Hungaria.
Mungkin melangkah lebih jauh dan kelompokkan simbol Anda yang diekspor: libcurl menggunakan curl_ * untuk simbol global, curl_easy_ *, curl_multi_ *, dan curl_share_ * untuk antarmuka yang berbeda. Jadi selain menggunakan curl_ * untuk semua fungsi, mereka telah menambahkan level lain dari "namespaces" untuk antarmuka yang berbeda: memanggil fungsi curl_easy_ * pada pegangan curl_multi_ * sekarang terlihat salah, lihat nama fungsi di http: // curl. haxx.se/libcurl/c/
Menjaga aturan untuk simbol yang diekspor, Anda harus menggunakannya untuk fungsi statis dalam
#include
file ed: Cobalah untuk menemukan awalan umum untuk fungsi-fungsi ini. Mungkin Anda memiliki fungsi utilitas string statis dalam file bernama "my_string"? Awali semua fungsi itu dengan my_string_ *.sumber