Как вы именуете классы, методы, члены классов, пространства имён в своём коде и почему? Как пишете имя класса: MyClass, CMyClass, myClass, My_Class, my_class? Имя метода: DoFunc, doFunc, Do_Func, do_func, Func, func? Как в таком случае пишете имена переменных. Выделяете ли каким либо образом члены классов, типа m_member, _member, member_ или ваш вариант? И, самое главное, почему именно так? Какие преимущества даёт вам этот стиль?
Здравствуйте, magesto, Вы писали:
M>Как вы именуете классы, методы, члены классов, пространства имён в своём коде и почему? Как пишете имя класса: MyClass, CMyClass, myClass, My_Class, my_class? Имя метода: DoFunc, doFunc, Do_Func, do_func, Func, func? Как в таком случае пишете имена переменных. Выделяете ли каким либо образом члены классов, типа m_member, _member, member_ или ваш вариант? И, самое главное, почему именно так? Какие преимущества даёт вам этот стиль?
Имена классов MyClass, интерфейса IMyClass.
Функция член doFunc, глобальная функция do_func, вызов WinApi функции ::<имя_функции>.
Члены классов m_member, без указания типа.
Глобальная константа kConst.
Такие правила достаточны для быстрого визуального определения основных конструкций и не перенасыщают код дополнительной и на, мой взгляд, бесполезной информацией типа венгерской нотации. При нынешнем уровне IDE очень быстро можно узнать дополнительную информацию о заинтересовавшем типе, например.
Здравствуйте, magesto, Вы писали:
M>Как вы именуете классы, методы, члены классов, пространства имён в своём коде и почему? Как пишете имя класса: MyClass, CMyClass, myClass, My_Class, my_class? Имя метода: DoFunc, doFunc, Do_Func, do_func, Func, func? Как в таком случае пишете имена переменных. Выделяете ли каким либо образом члены классов, типа m_member, _member, member_ или ваш вариант? И, самое главное, почему именно так? Какие преимущества даёт вам этот стиль?
Как правило, система именования в той или иной степени определяется на корпоративном уровне, ей лучше и следовать.
Стилей же много, например тут можешь посмотреть один из примеров. Для "своих" проектов, к именованию тоже следует подходить избирательно, слепое апологетство тут вредно. Например, та же венгерская нотация с ее включением типа переменной в ее имя не очень стыкуется с ООП из-за наличия в нем такого явления, как полиморфизм объектов, что особенно проявляется в динамически-типизированных языках.
M>Как вы именуете классы, методы, члены классов, пространства имён в своём коде и почему? Как пишете имя класса: MyClass, CMyClass, myClass, My_Class, my_class? Имя метода: DoFunc, doFunc, Do_Func, do_func, Func, func? Как в таком случае пишете имена переменных. Выделяете ли каким либо образом члены классов, типа m_member, _member, member_ или ваш вариант? И, самое главное, почему именно так? Какие преимущества даёт вам этот стиль?
class PrinterManager : public IPrinterManager
{
public:
void initializePrinters();
int noOfPrinters;
private:
char* _getDefaultPrinterName();
bool _isInitialised;
};
/* глобальные переменные и функции */extern PrinterManager* gPrinterManager;
extern g_initialisePrinterManager();
в примере PrinterManager может стать и PrinterManagerClass, хотя я не люблю так писать Для всего, кроме названий классов использую lowerCamelCase.
Преимущества...
lowerCamelCase — нет необходимости нажимать Shift + Underscore для получения подчеркиваний в именах. А так как в С++ нельзя, как в Паскале-подобных языках писать вызов процедуры без скобок, то переменные и функции, хоть и написанные одинаковым стилем, легко различаются и выделяются в тексте. Соответственно, благодаря такому стилю одно-двухбуквенные локальные переменные и переменные в циклах так и отсаются lower-case.
PascalCase для имен классов позволяет визуально зацепиться за вызов конструкторов, да и просто визуально удобно. Благодаря этому мне и слово Class в названии не нужно — и так видно, что это класс
Приватные члены классов начинаю с подчеркивания, потому что удобно для Интеллисенса, да и в конструкторах удобно:
тоже хочу использовать похожий стиль наименования членов-данных класса, но только с маленьким нюансом: _OpenMember — для открытых,m_PrivateMember — для закрытых и защищенных. Отпугивает пока рекомендация стандарта не давать имен, начинающихся с "_". А Вы не сталкивались с проблемами при использовании имен, начинающихся с "_"?
// @desc
// описание классаclass SomeClass
{
#pragma region Methods
public:
// @desc
// устанавливает необходимый видеорежим
// @params
// [width] - ширина режима в пикселях
// [height] - высота режима в пикселях
// [bitsPerPixel] - число битов на пиксель (глубина цвета)
// [refreshRate] - частота обновления, если 0, то используется
// значение по умолчанию для данного режима
// (определяется драйвером видеокарты)
// @returns
// true - в случае успехаbool setVideoMode(Int width, Int height, Int bitsPerPixel = 32, Int refreshRate = 0);
public:
// @desc
// начинает рисовать кадр
// @params
// [stride] - сюда будет помещён шаг памяти
// @returns
// указатель на видеопамять
ColorValue* beginDraw(Int& stride);
...
#pragma endregion
#pragma region Helper methods
...
#pragma region Stride
private:
// @desc
// Шаг памяти. Значение действительно только между вызовами beginDraw и endDraw
Int Stride;
private:
// @desc
// setter for Stride
// @params
// [newStride] - new value for Stridevoid setStride(Int newStride);
public:
// @desc
// getter for Stride
// @returns
// current value of Stride
Int getStride();
#pragma endregion
...
#pragma endregion
};
Т.е. никаких подчеркиваний, никаких венгерских нотаций. Использую camel, модификатор доступа пишу возле каждого метода и поля. Свойства (поле + get/set) генерирую через VA, каждое свойство обрамляется через #pragma region...
Здравствуйте, magesto, Вы писали:
M>Как вы именуете классы, методы, члены классов, пространства имён в своём коде и почему? Как пишете имя класса: MyClass, CMyClass, myClass, My_Class, my_class? Имя метода: DoFunc, doFunc, Do_Func, do_func, Func, func? Как в таком случае пишете имена переменных. Выделяете ли каким либо образом члены классов, типа m_member, _member, member_ или ваш вариант? И, самое главное, почему именно так? Какие преимущества даёт вам этот стиль?
Вот пример файла.
// \src\utils\logger.cpp
// Implementation of exception and logger classes
// Copyright Alexander Beluga 2006.Use, modification, and distribution are
// subject to the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)namespace utils
{
/*------------------------class utils::logger-------------------------------*/
//TODO: Add implementation of logger
//////////////////////////////////////////////////////////////////////////
///Constructor of logger
//////////////////////////////////////////////////////////////////////////
logger::logger()
{
configurate();
}//logger::logger
///////////////////////////////////////////////////////////////////////////
///Configuration logic goes here, i.e: default-values, where to assign what etc
///////////////////////////////////////////////////////////////////////////////
logger::configurate()
{
//some explanations are required here
//configurator -- wrapper around config class
//"LOGFILE" -- hash id of required param
//"logger.txt" -- default value if nothing is therethis->start_log(configurator("Logger")["LOGFILE"]="logger.txt");
}//logger::configurate()
//////////////////////////////////////////////////////////////////////////
///logger::handle_exception with one param
///utils::exception(in) -- specifies the exception of which to handle
///return value -- true if exc was handled
//////////////////////////////////////////////////////////////////////////bool logger::handle_exception(const utils::exception &exc)
{
if(!_log.is_open())
return false;
return true;
}//logger::handle_exception(utils::exception exc)
/*----------------------class utils::exception-------------------------------*/
///////////////////////////////////////////////////////////////////////////
///utils::exception::log(), logs exception
//////////////////////////////////////////////////////////////////////////bool exception::log()
{
//TODO: Add actual logging code: stub, I've no idea what it does
flog() <<"/------"
<<(this->_fatal ? "Fatal" : "Non-fatal")//fatal or non-fatal
<< " Exception thrown on "<<time_stamp()
<<"----------"<<std::endl;
flog() << "@ " << _funcsig << std::endl;
flog()<<"The priority is:"<<this->_priority<<std::endl;
if(_addinfo)
flog()<<_addinfo<<std::endl;
return true;
}//exception::log
}//namespace utils
Здравствуйте, magesto, Вы писали:
M>Как вы именуете классы, методы, члены классов, пространства имён в своём коде и почему? Как пишете имя класса: MyClass, CMyClass, myClass, My_Class, my_class? Имя метода: DoFunc, doFunc, Do_Func, do_func, Func, func? Как в таком случае пишете имена переменных. Выделяете ли каким либо образом члены классов, типа m_member, _member, member_ или ваш вариант? И, самое главное, почему именно так? Какие преимущества даёт вам этот стиль?
M>Как вы именуете классы, методы, члены классов, пространства имён в своём коде и почему? Как пишете имя класса: MyClass, CMyClass, myClass, My_Class, my_class? Имя метода: DoFunc, doFunc, Do_Func, do_func, Func, func? Как в таком случае пишете имена переменных. Выделяете ли каким либо образом члены классов, типа m_member, _member, member_ или ваш вариант? И, самое главное, почему именно так? Какие преимущества даёт вам этот стиль?
Здравствуйте, magesto, Вы писали:
M>Как вы именуете классы, методы, члены классов, пространства имён в своём коде и почему? Как пишете имя класса: MyClass, CMyClass, myClass, My_Class, my_class? Имя метода: DoFunc, doFunc, Do_Func, do_func, Func, func? Как в таком случае пишете имена переменных. Выделяете ли каким либо образом члены классов, типа m_member, _member, member_ или ваш вариант? И, самое главное, почему именно так? Какие преимущества даёт вам этот стиль?
class MyClass
{
public:
enum SomeEnum
{
SomeEnum_Enum1, // можно и Enum1, но не все компиляторы поддержживают SomeEnum::Enum1.
SomeEnum_Enum2
};
void doFunc();
const Member &member() const;
void setMember(const Member &);
protected:
void doFuncProtected();
Member _member;
private:
void doFuncPrivate();
Member _member; // Иногда member_, но выглядит коряво. Использую для небольших классов.
};
MyClass globalVariable;
Преимуществ никаких. Я не против других стилей написания кода, главное — чтобы использовались они повсеместно.
M>Как вы именуете классы, методы, члены классов, пространства имён в своём коде и почему? Как пишете имя класса: MyClass, CMyClass, myClass, My_Class, my_class? Имя метода: DoFunc, doFunc, Do_Func, do_func, Func, func? Как в таком случае пишете имена переменных. Выделяете ли каким либо образом члены классов, типа m_member, _member, member_ или ваш вариант? И, самое главное, почему именно так? Какие преимущества даёт вам этот стиль?