Coding Guidelines.es
From the makers of InspIRCd.
Contents |
Pauta para Programar en InspIRCd
Lo siguiente es una pauta para escribir parches de InspIRCd, o para crear módulos para distribuirlos con el paquete oficial. Esta pauta fue escrita tiempo antes de que el desarrollo de InspIRCd empezó, y no todo el código es este. Esto será reconstruido durante el tiempo.
Comentarios
Líneas Múltiples
Las líneas multiples deben seguir el 'estilo C' para comentar, por ejemplo:
/* * Esta es una línea múltiple * de Comentarios, jeje. */
Línea Simple
La línea simple debe seguir el 'estilo C' para comentar, por ejemplo:
/* Este es un comentario aburrido de una línea */
Comentario Doxygen
Si tu quieres hacer el comentario para mostrarlo en Doxygen, el comentario debe estar directo al item cual vas a comentar (ej: una clase, funcion, etc.) y la primera línea debe empezar con "/**". Por ejemplo:
/** Este es un comentario multilíneo para doxygent. * Descripción de lo que sea acá. */
La primera línea despues de "**" es usada para una descripción corta del item y todo lo demás es tomado como la descripción detallada.
Indentitation
Tabs. Tabs. SOLO TABS. Usa un simple tab por cada nivel de indentation, por ejemplo:
int main()
{
<tab>if (condicicion)
<tab>{
<tab><tab>código
<tab>}
}
Separación
Siempre pon un espacio entre palabras, como if/while y la condición, por ejemplo:
if (foo == bar)
NO
if(foo == bar)
Corchetes
Siempre pon un corchete para abrir o cerrar bloques en líneas separadas. Por ejeplo, debe ser algo como esto:
if (manzanas == "verdes")
{
cout << "Las manzanas son verdes" << endl;
}
y NO:
if (manzanas == "verdes") {
cout << "Las manzanas son verdes" << endl;
}
Una excepcion para esto, si estas declarando un metodo de clase que solamente usa una línea, en este caso es aceptable en la mayoría de los casos:
class foo : public bar
{
foo() { }
getrandomfoo() { return rand(); }
};
Plantillas
En lo posible, usa plantillas en vez de los #defines. Evitar el uso de RTTI.
Estructuración
'Structs' debe ser declarado de la siguiente manera:
struct BodyPartBasket
{
int arms;
int legs;
int scrotalsacs;
};
and y algo como esto:
typedef struct
{
int arms;
int legs;
int scrotalsacs;
} BodyPartBasket;
La segunda manera no se requiere en C++, en vez de eso, poner esto:
BodyPartBasket mybasket;
Nombre de las Variables
Los nombres de Class' y 'struct' deben seguir en el mismo caso con la primera letra mayúscula, por ejemplo: "YoTengoUnPerro" y no "yo_tengo_un_perro" o "yotengounperro".
Variable names can be in either camel case with a leading capital letter or alternatively all lower case, so long as the same naming convention is adhered to througout the class. No classes or variables should be named in capitals unless this makes sense for the name (for example "class DNS"). Constants and enum values should always be completely in CAPITALS and underscores may be used, for example:
enum DecayState
{
DECAYED_MOULDY = 0,
DECAYED_SMELLY = 1,
DECAYED_MAGGOTS = 2
};
All value names in an enum should be started with the same text which should be related in some way to the enum's use. For example "DNS_CNAME, DNS_A, DNS_AAAA".
Use of references
Wherever possible, when dealing with any class larger than the 4 bytes in size, pass a const reference rather than a copy of the class. For example:
MyThingy::MyThingy(const std::string &thingyvalue)
{
}
Of course, if you intended to change the string you can just omit the 'const'.
Use of char pointers
Whenever you use char pointers (char*, char**) try to use const equivalents. This is much safer and avoids ugly and dangerous casts. For example:
MyThingy::Thingify(const char** wotsits)
{
}
If it is possible without performance loss, consider avoiding char pointers altogether and using std::string or irc::string instead.
Use of STL
For more information on use of STL in InspIRCd, please see the seperate STL FAQ.
Making copies of data
Never ever make a copy of a piece of data unless it is absolutely neccessary. For example, don't use strlcpy() to make a copy of the const char* string returned by std::string::c_str(), if the change can be done to the std::string itself. The same goes for unneccessary variable assignments, especially those which assign large classes.
namespace std
Avoid the following:
using namespace std;
It might take a bit more typing, but things work better if you don't set (then later assume) the namespace -- specify it explicitly when you want to use it.

















