Bagian 1. Pendahuluan...
Bagian 8. PenamaanBagian 9. Komentar...

Saat menulis kode, kita semua menggunakan aturan desain kode. Terkadang aturan mereka sendiri ditemukan, dalam kasus lain, panduan gaya yang sudah jadi digunakan. Meskipun semua programmer C ++ membaca dalam bahasa Inggris lebih mudah daripada dalam bahasa asli mereka, itu lebih menyenangkan untuk memiliki manual dalam yang terakhir.
Artikel ini adalah terjemahan dari bagian panduan gaya Google di C ++ ke bahasa Rusia.
Artikel asli (garpu pada github),
terjemahan yang diperbarui .
Penamaan
Aturan dasar untuk gaya pengkodean adalah penamaan. Penampilan nama segera (tanpa mencari iklan) memberi tahu kita apa itu: jenis, variabel, fungsi, konstan, makro, dll. Aturan penamaan bisa sewenang-wenang, tetapi konsistensi penting, dan aturan harus diikuti.
Prinsip Penamaan Umum
- Gunakan nama yang bahkan orang-orang di tim lain akan mengerti.
- Nama harus berbicara tentang tujuan atau penerapan objek.
- Jangan menyimpan panjang nama, lebih baik memiliki nama yang lebih panjang dan lebih dimengerti (bahkan untuk pemula).
- Lebih sedikit singkatan, terutama jika mereka tidak terbiasa di luar proyek.
- Gunakan hanya singkatan yang diketahui (apakah Wikipedia tahu tentang mereka?).
- Jangan mempersingkat kata-kata.
Secara umum, panjang nama harus sesuai dengan ukuran ruang lingkup. Sebagai contoh,
n adalah nama yang cocok di dalam fungsi 5 baris, namun, ketika mendeskripsikan sebuah kelas, ini bisa sedikit pendek.
class MyClass { public: int CountFooErrors(const std::vector<Foo>& foos) { int n = 0;
class MyClass { public: int CountFooErrors(const std::vector<Foo>& foos) { int total_number_of_foo_errors = 0;
Perhatikan bahwa nama-nama umum juga valid:
i untuk iterator atau penghitung,
T untuk parameter templat.
Di masa depan, ketika menggambarkan aturan "kata" / "kata" adalah semua yang ditulis dalam bahasa Inggris tanpa spasi, termasuk singkatan. Singkatnya, huruf pertama dapat ditulis dengan huruf besar (tergantung gaya: "
camel case " atau "case Pascal"), huruf yang tersisa adalah huruf kecil. Misalnya, lebih disukai
StartRpc () ,
lebih disukai StartRPC () .
Parameter template juga mengikuti aturan kategorinya: Ketikkan nama, nama variabel, dll ...
Nama file
Nama file harus ditulis hanya dalam huruf kecil, Anda dapat menggunakan garis bawah (
_ ) atau tanda hubung (
- ) untuk memisahkannya. Gunakan pemisah yang digunakan dalam proyek. Jika tidak ada pendekatan tunggal, gunakan "_".
Contoh nama yang cocok:
- my_useful_class.cc
- my-useful-class.cc
- myusefulclass.cc
- myusefulclass_test.cc // _unittest dan _regtest tidak digunakan lagi.
File C ++ harus diakhiri dengan
.cc , tajuk harus dalam
.h . File yang dimasukkan sebagai teks harus diakhiri dengan
.inc (lihat juga bagian
Independent Header ).
Jangan menggunakan nama yang sudah ada di
/ usr / include , seperti
db.h.Coba berikan file nama tertentu. Misalnya,
http_server_logs.h lebih baik daripada
logs.h. Ketika file digunakan berpasangan, yang terbaik adalah memberi mereka nama yang sama. Misalnya,
foo_bar.h dan
foo_bar.cc (dan berisi kelas
FooBar ).
Ketikkan nama
Ketik nama dimulai dengan huruf kapital, setiap kata baru juga dimulai dengan huruf kapital.
Garis bawah tidak digunakan:
MyExcitingClass ,
MyExcitingEnum .
Nama semua jenis - kelas, struktur, alias, enumerasi, parameter templat - diberi nama dengan gaya yang sama. Ketik nama dimulai dengan huruf kapital, setiap kata baru juga dimulai dengan huruf kapital. Garis bawah tidak digunakan. Sebagai contoh:
Nama variabel
Nama-nama variabel (termasuk parameter fungsi) dan anggota data ditulis dalam huruf kecil dengan garis bawah di antara kata-kata. Anggota kelas-kelas ini (bukan struktur) dilengkapi dengan garis bawah pada akhir nama. Misalnya:
a_local_variable ,
a_struct_data_member ,
a_class_data_member_ .
Nama Variabel Umum
Sebagai contoh:
std::string table_name;
std::string tableName;
Anggota data kelas
Anggota kelas-kelas ini, statis dan non-statis, disebut sebagai variabel biasa dengan penambahan garis bawah di akhir.
class TableInfo { ... private: std::string table_name_;
Struktur anggota data
Anggota data struktur, statis dan non-statis, disebut sebagai variabel reguler. Tidak ada garis bawah yang ditambahkan pada mereka di akhir.
struct UrlTableProperties { std::string name; int num_entries; static Pool<UrlTableProperties>* pool; };
Lihat juga
Structures vs Classes , yang menjelaskan kapan harus menggunakan struktur, kapan kelas.
Nama konstanta
Objek dideklarasikan sebagai constexpr atau const, sehingga nilainya tidak berubah selama eksekusi. Nama-nama konstanta dimulai dengan simbol "k", kemudian muncul nama dalam gaya campuran (huruf besar dan kecil). Garis bawah dapat digunakan dalam kasus yang jarang terjadi ketika huruf besar tidak dapat digunakan untuk pemisahan. Sebagai contoh:
const int kDaysInAWeek = 7; const int kAndroid8_0_0 = 24;
Semua objek konstan serupa dengan jenis penyimpanan statis (mis. Statis atau global, untuk detail lebih lanjut di sini:
Durasi Penyimpanan ) juga dinamai. Konvensi ini bersifat opsional untuk variabel dalam jenis penyimpanan lain (misalnya, objek konstan otomatis).
Nama fungsi
Fungsi umum dinamai dalam gaya campuran (huruf besar dan kecil); fungsi akses variabel (accessor dan mutator) harus memiliki gaya yang mirip dengan variabel target.
Biasanya, nama fungsi dimulai dengan huruf kapital dan setiap kata dalam nama ditulis dengan huruf kapital.
void AddTableEntry(); void DeleteUrl(); void OpenFileOrDie();
(Aturan serupa berlaku untuk konstanta di area kelas atau namespace yang merupakan bagian dari API dan harus terlihat seperti fungsi (dan fakta bahwa mereka bukan fungsi tidak kritis))
Accessor dan mutators (get and set functions) dapat dinamai seperti variabel yang sesuai. Mereka sering berhubungan dengan variabel anggota nyata, tetapi ini tidak perlu. Misalnya,
jumlah int () dan
membatalkan set_count (jumlah int) .
Namespace Namespace
Namespace disebut huruf kecil. Namespace tingkat atas didasarkan pada nama proyek. Hindari tabrakan nama Anda dan ruang nama terkenal lainnya.
Namespace tingkat atas biasanya adalah nama proyek atau tim (yang membuat kode). Kode tersebut harus berada di direktori (atau subdirektori) dengan nama yang sesuai dengan namespace.
Jangan lupa aturan
untuk tidak menggunakan singkatan - ini juga berlaku untuk ruang nama. Kode di dalamnya tidak membutuhkan referensi namespace, jadi singkatannya berlebihan.
Hindari menggunakan nama yang dikenal untuk ruang nama bersarang. Tabrakan antara nama dapat menyebabkan kejutan selama pertemuan. Secara khusus, jangan membuat ruang nama bersarang bernama
std . Pengidentifikasi proyek yang unik (
websearch :: index ,
websearch :: index_util )
direkomendasikan daripada tidak aman terhadap tabrakan
websearch :: util .
Untuk ruang nama
internal / internal , tabrakan dapat terjadi ketika kode lain ditambahkan (pembantu internal cenderung mengulang pada tim yang berbeda). Dalam hal ini, menggunakan nama file untuk memberi nama namespace sangat membantu. (
websearch :: index :: frobber_internal untuk digunakan di
frobber.h )
Nama Enumerasi
Pencacahan (keduanya dengan batasan ruang lingkup dan tanpa penutup) harus disebut sebagai
konstanta atau
makro . Yaitu:
kEnumName atau
ENUM_NAME .
Lebih disukai untuk menyebutkan nilai-nilai individual dalam enumerator sebagai konstanta. Namun, diizinkan untuk menyebutnya sebagai makro. Nama
enumerasi UrlTableErrors (dan
AlternateUrlTableErrors )
itu sendiri adalah sebuah tipe. Akibatnya, gaya campuran digunakan.
enum UrlTableErrors { kOk = 0, kErrorOutOfMemory, kErrorMalformedInput, }; enum AlternateUrlTableErrors { OK = 0, OUT_OF_MEMORY = 1, MALFORMED_INPUT = 2, };
Sampai Januari 2009, gaya penamaan nilai-nilai enumerasi seperti makro. Ini menciptakan masalah dengan nama makro duplikat dan nilai enumerasi. Menerapkan gaya konstan memecahkan masalah dan lebih baik menggunakan gaya konstan dalam kode baru. Namun, tidak perlu menulis ulang kode lama (selama tidak ada masalah duplikasi).
Nama makro
Apakah Anda tidak akan
mendefinisikan makro ? Untuk jaga-jaga (jika Anda akan), mereka akan terlihat seperti ini:
MY_MACRO_THAT_SCARES_SMALL_CHILDREN_AND_ADULTS_ALIKE .
Baca cara
mendefinisikan makro ; Biasanya, makro
tidak boleh digunakan. Namun, jika Anda benar-benar membutuhkannya, beri nama dengan huruf kapital dengan garis bawah.
#define ROUND(x) ... #define PI_ROUNDED 3.0
Memberi Pengecualian
Jika Anda perlu memberi nama sesuatu yang memiliki analog dengan kode C atau C ++ yang ada, maka ikuti gaya yang digunakan dalam kode tersebut.
bigopen ()nama fungsi berasal dari
open ()kamu tidakdefinisi mirip dengan tipe standar
bigposstruct atau
kelas berasal dari
possparse_hash_mapEntitas seperti STL; ikuti gaya stl
LONGLONG_MAXkonstan seperti
INT_MAXCatatan: Tautan dapat mengarah ke bagian-bagian manual yang belum diterjemahkan.