Parte 1. Introducci贸n...
Parte 8. NombramientoParte 9. Comentarios...

Al escribir c贸digo, todos usamos las reglas de dise帽o de c贸digo. A veces se inventan sus propias reglas, en otros casos, se utilizan gu铆as de estilo confeccionadas. Aunque todos los programadores de C ++ leen en ingl茅s m谩s f谩cilmente que en su idioma nativo, es m谩s agradable tener un manual en este 煤ltimo.
Este art铆culo es una traducci贸n de parte de la gu铆a de estilo de Google en C ++ al ruso.
Art铆culo original (fork en github),
traducci贸n actualizada .
Nombrar
Las reglas b谩sicas para el estilo de codificaci贸n son los nombres. La aparici贸n del nombre de inmediato (sin buscar un anuncio) nos dice qu茅 es: tipo, variable, funci贸n, constante, macro, etc. Las reglas de nomenclatura pueden ser arbitrarias, pero la coherencia es importante y se deben seguir las reglas.
Principios generales de denominaci贸n
- Use nombres que incluso las personas del otro equipo entiendan.
- El nombre debe hablar del prop贸sito o aplicabilidad del objeto.
- No ahorre en la longitud del nombre, es mejor tener un nombre m谩s largo y m谩s comprensible (incluso para principiantes).
- Menos abreviaturas, especialmente si no son familiares fuera del proyecto.
- Utilice solo abreviaturas conocidas (驴Wikipedia las conoce?).
- No acortes las palabras.
En general, la longitud del nombre debe coincidir con el tama帽o del alcance. Por ejemplo,
n es un nombre adecuado dentro de una funci贸n de 5 l铆neas, sin embargo, al describir una clase, esto puede ser un poco corto.
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;
Tenga en cuenta que los nombres t铆picos tambi茅n son v谩lidos:
i para un iterador o contador,
T para un par谩metro de plantilla.
En el futuro, al describir las reglas "palabra" / "palabra" es todo lo que se escribe en ingl茅s sin espacios, incluidas las abreviaturas. En una palabra, la primera letra se puede poner en may煤scula (dependiendo del estilo: "
caso de camello " o "caso de Pascal"), las letras restantes son min煤sculas. Por ejemplo, preferiblemente
StartRpc () ,
preferiblemente StartRPC () .
Los par谩metros de plantilla tambi茅n siguen las reglas de sus categor铆as: nombres de tipos, nombres de variables, etc.
Nombres de archivo
Los nombres de archivo deben escribirse solo en letras min煤sculas, puede usar gui贸n bajo (
_ ) o gui贸n (
- ) para separarlos. Use el separador usado en el proyecto. Si no hay un enfoque 煤nico, use "_".
Ejemplos de nombres adecuados:
- my_useful_class.cc
- my-useful-class.cc
- myusefulclass.cc
- myusefulclass_test.cc // _unittest y _regtest est谩n en desuso.
Los archivos C ++ deben terminar en
.cc , el encabezado debe estar en
.h . Los archivos incluidos como texto deben terminar en
.inc (ver tambi茅n la secci贸n
Encabezados independientes ).
No utilice nombres que ya existen en
/ usr / include , como
db.h.Intenta dar nombres espec铆ficos a los archivos. Por ejemplo,
http_server_logs.h es mejor que
logs.h. Cuando los archivos se usan en pares, es mejor darles el mismo nombre. Por ejemplo,
foo_bar.h y
foo_bar.cc (y contienen la clase
FooBar ).
Escribe nombres
Los nombres de tipo comienzan con una letra may煤scula, cada nueva palabra tambi茅n comienza con una letra may煤scula. No se utilizan
guiones bajos :
MyExcitingClass ,
MyExcitingEnum .
Los nombres de todos los tipos (clases, estructuras, alias, enumeraciones, par谩metros de plantilla) se nombran con el mismo estilo. Los nombres de tipo comienzan con una letra may煤scula, cada nueva palabra tambi茅n comienza con una letra may煤scula. No se usan guiones bajos. Por ejemplo:
Nombres de variables
Los nombres de las variables (incluidos los par谩metros de funci贸n) y los miembros de datos se escriben en min煤sculas con un gui贸n bajo entre las palabras. Los miembros de estas clases (no estructuras) se complementan con un gui贸n bajo al final del nombre. Por ejemplo:
a_local_variable ,
a_struct_data_member ,
a_class_data_member_ .
Nombres de variables comunes
Por ejemplo:
std::string table_name;
std::string tableName;
Miembros de datos de clase
Los miembros de estas clases, est谩ticos y no est谩ticos, se denominan variables ordinarias con la adici贸n de un gui贸n bajo al final.
class TableInfo { ... private: std::string table_name_;
Miembros de datos de estructura
Los miembros de los datos de la estructura, est谩ticos y no est谩ticos, se denominan variables regulares. No se agrega subrayado al final.
struct UrlTableProperties { std::string name; int num_entries; static Pool<UrlTableProperties>* pool; };
Vea tambi茅n
Estructuras vs Clases , que describe cu谩ndo usar estructuras, cu谩ndo clases.
Nombres de constantes
Los objetos se declaran como constexpr o const, de modo que el valor no cambia durante la ejecuci贸n. Los nombres de las constantes comienzan con el s铆mbolo "k", luego viene el nombre en un estilo mixto (letras may煤sculas y min煤sculas). El subrayado se puede usar en casos raros cuando las letras may煤sculas no se pueden usar para la separaci贸n. Por ejemplo:
const int kDaysInAWeek = 7; const int kAndroid8_0_0 = 24;
Tambi茅n se nombran todos los objetos constantes similares con un tipo de almacenamiento est谩tico (es decir, est谩tico o global, para m谩s detalles aqu铆:
Duraci贸n del almacenamiento ). Esta convenci贸n es opcional para variables en otros tipos de almacenamiento (por ejemplo, objetos constantes autom谩ticos).
Nombres de funciones
Las funciones comunes se nombran en un estilo mixto (letras may煤sculas y min煤sculas); Las funciones de acceso variable (accesor y mutador) deben tener un estilo similar al de la variable objetivo.
Por lo general, el nombre de una funci贸n comienza con una letra may煤scula y cada palabra en el nombre est谩 en may煤scula.
void AddTableEntry(); void DeleteUrl(); void OpenFileOrDie();
(Reglas similares se aplican a las constantes en un 谩rea de clase o espacio de nombres que son parte de la API y deber铆an verse como funciones (y el hecho de que no sean funciones no es cr铆tico))
Los accesores y mutadores (funciones get y set) se pueden nombrar como las variables correspondientes. A menudo corresponden a variables miembros reales, pero esto no es necesario. Por ejemplo,
int count () y
void set_count (int count) .
Espacio de nombres espacio de nombres
El espacio de nombres se llama min煤scula. El espacio de nombres de nivel superior se basa en el nombre del proyecto. Evite colisiones de sus nombres y otros espacios de nombres conocidos.
Un espacio de nombres de nivel superior suele ser el nombre de un proyecto o equipo (que cre贸 el c贸digo). El c贸digo debe ubicarse en un directorio (o subdirectorio) con un nombre correspondiente al espacio de nombres.
No olvide la regla de
no usar abreviaturas ; esto tambi茅n se aplica a los espacios de nombres. Es improbable que el c贸digo interno requiera una referencia de espacio de nombres, por lo que las abreviaturas son superfluas.
Evite usar nombres conocidos para espacios de nombres anidados. Las colisiones entre nombres pueden dar lugar a sorpresas durante el montaje. En particular, no cree espacios de nombres anidados llamados
std . Se
recomiendan identificadores 煤nicos de proyecto (
websearch :: index ,
websearch :: index_util ) en lugar de inseguros contra colisiones
websearch :: util .
Para espacios de nombres
internos / internos , las colisiones pueden ocurrir cuando se agrega otro c贸digo (los asistentes internos tienden a repetirse en diferentes equipos). En este caso, usar un nombre de archivo para nombrar un espacio de nombres ayuda mucho. (
websearch :: index :: frobber_internal para usar en
frobber.h )
Nombres de enumeraci贸n
Las enumeraciones (tanto con restricciones de 谩mbito como sin 谩mbito) deben denominarse
constantes o
macros . Es decir:
kEnumName o
ENUM_NAME .
Es preferible nombrar los valores individuales en el enumerador como constantes. Sin embargo, est谩 permitido referirse como macros. El nombre de la
enumeraci贸n UrlTableErrors (y
AlternateUrlTableErrors ) en
s铆 mismo es un tipo. En consecuencia, se usa un estilo mixto.
enum UrlTableErrors { kOk = 0, kErrorOutOfMemory, kErrorMalformedInput, }; enum AlternateUrlTableErrors { OK = 0, OUT_OF_MEMORY = 1, MALFORMED_INPUT = 2, };
Hasta enero de 2009, el estilo de nombrar valores de enumeraci贸n era como el de las macros. Esto cre贸 problemas con nombres de macro duplicados y valores de enumeraci贸n. La aplicaci贸n de un estilo constante resuelve el problema y es preferible utilizar un estilo constante en el nuevo c贸digo. Sin embargo, no es necesario volver a escribir el c贸digo anterior (todav铆a no hay problemas de duplicaci贸n).
Nombres de macro
驴No vas a
definir macros ? Por si acaso (si vas a ir), deber铆an verse as铆:
MY_MACRO_THAT_SCARES_SMALL_CHILDREN_AND_ADULTS_ALIKE .
Lea c贸mo
definir macros ; Normalmente,
no se deben usar macros. Sin embargo, si los necesita absolutamente, n贸mbrelos en letras may煤sculas con guiones bajos.
#define ROUND(x) ... #define PI_ROUNDED 3.0
Excepciones de nombres
Si necesita nombrar algo que tenga an谩logos en el c贸digo C o C ++ existente, siga el estilo utilizado en el c贸digo.
bigopen ()nombre de funci贸n derivado de
open ()Uintdefinici贸n similar a los tipos est谩ndar
bigposestructura o
clase derivada de
possparse_hash_mapEntidad similar a STL; seguir el estilo stl
LONGLONG_MAXconstante como
INT_MAXNota: los enlaces pueden conducir a secciones del manual que a煤n no se han traducido.