Russian Qt Forum

Qt => Общие вопросы => Тема начата: Alexandr Az от Август 01, 2007, 14:57



Название: Стиль синтиксиса QT
Отправлено: Alexandr Az от Август 01, 2007, 14:57
Кто нибудь подскажет как писать в стиле QT. Исследование исходников  ответа не дало, должны же быть у них хоть какие нибудь правила!


Название: Стиль синтиксиса QT
Отправлено: pakulo от Август 01, 2007, 16:41
Странно, как исследование исходников ничего не дало :)
Что конкретно тебя интересует?


Название: Стиль синтиксиса QT
Отправлено: SABROG от Август 01, 2007, 16:43
Я так понимаю они используют K&R стиль (Kernighan and Ritchie), родителей языка Си, судя по расстановке скобок. Мне больше нравится BSD/Allman, в нем и пишу.


Название: Стиль синтиксиса QT
Отправлено: Alexandr Az от Август 01, 2007, 17:03
Больше всего интересует правила задания имён для закрытые данные членов классов и их эквивалентов - функций членов (get, set)

(Коряво как то, говоря языком ООП - закрытых данных и методов соответсвующих им)

Опять же - только в контексте стиля QT


Название: Стиль синтиксиса QT
Отправлено: SABROG от Август 01, 2007, 17:20
По-моему там все понятно с этим правилом, вместо get используется простое название переменной со скобками, например имя метода для получения значения переменной с именем variant - variant(); Для установки значения переменной так - setVariant();


Название: Стиль синтиксиса QT
Отправлено: pakulo от Август 01, 2007, 19:36
Угу, как называется член класа так и звучит метод get.
Т.е. переменная член QString text; а методы тогда QString text() const; void setText(const QString &newText);
Вот только единственная проблема, что ты не можешь назвать переменнут просто text, я вот делаю с приставкой m, т.е. mText;
Они немного по-другому это делают, посмотри любой *.h *.cpp файлы и все думаю поймешь...


Название: Стиль синтиксиса QT
Отправлено: mindz_eye от Август 01, 2007, 22:41
По-моему у них скорее ява-стиль. Методы с маленькой буквы, никаких _ в именах и т.п. И доксигеновские комментарии, кстати, тоже в ява-стиле =)


Название: Стиль синтиксиса QT
Отправлено: Sergeich от Август 01, 2007, 23:51
Цитата: "pakulo"
Угу, как называется член класа так и звучит метод get.
Т.е. переменная член QString text; а методы тогда QString text() const; void setText(const QString &newText);
Вот только единственная проблема, что ты не можешь назвать переменнут просто text, я вот делаю с приставкой m, т.е. mText
Почему же нет? Запросто. Например:
Код:
class Node{
public:
    enum Type { RegExp, Expression, Term, Factor, Atom, Terminal };
    Node(Type type, const QString &str = "");
    ~Node();
    Type type;
    QString str;
    Node *parent;
    QList<Node *> children;
};

Node::Node(Type type, const QString &str)
{
    this->type = type;
    this->str = str;
    parent = 0;
}
C++ GUI Programming with Qt 4
By Jasmin Blanchette, Mark Summerfield
Chapter 10. Item View Classes, Implementing Custom Models


Название: Стиль синтиксиса QT
Отправлено: pastor от Август 02, 2007, 00:17
2 Sergeich: это не моё высказывание, а pakulo

Цитировать

Угу, как называется член класа так и звучит метод get.
Т.е. переменная член QString text; а методы тогда QString text() const; void setText(const QString &newText);
Вот только единственная проблема, что ты не можешь назвать переменнут просто text, я вот делаю с приставкой m, т.е. mText


:)

По теме, наверное pakulo имел ввиду такой вариант:

Код:
class SomeClass
{
public:
    SomeClass() {}

    QString text() const { return text; }
    void setText(const QString &str) { text = str; }

private:
    QString text;
};


Т.е. когда метод и член класса имеют одинаковые имена. В таком случае компилятор выдаст ошибку.


Название: Стиль синтиксиса QT
Отправлено: Sergeich от Август 02, 2007, 00:42
Цитата: "pastor"
2 Sergeich: это не моё высказывание, а pakulo
Пардон, попутал :)

добавлено спустя 42 секунды:

 Исправляюсь


Название: Стиль синтиксиса QT
Отправлено: vaprele07 от Август 02, 2007, 03:12
Цитировать
Т.е. когда метод и член класса имеют одинаковые имена. В таком случае компилятор выдаст ошибку.

а еще они любят шифроваться через: PrivateSomeClass


Название: Стиль синтиксиса QT
Отправлено: pakulo от Август 02, 2007, 08:35
Цитата: "pastor"

Код:
class SomeClass
{
public:
    SomeClass() {}

    QString text() const { return text; }
    void setText(const QString &str) { text = str; }

private:
    QString text;
};


Т.е. когда метод и член класса имеют одинаковые имена. В таком случае компилятор выдаст ошибку.

Да, именно оно :)

Цитата: "vaprele07"
Цитировать
Т.е. когда метод и член класса имеют одинаковые имена. В таком случае компилятор выдаст ошибку.

а еще они любят шифроваться через: PrivateSomeClass

Вот для того, что бы метод и член класса имели одинаковые имени, они так делают... Но меня что-то это напрягает, особенно этот private.
Посему я просто делаю приставку m.


Название: Стиль синтиксиса QT
Отправлено: pastor от Август 02, 2007, 09:21
Цитата: "vaprele07"

а еще они любят шифроваться через: PrivateSomeClass


Это одна из причин тому:

http://qt.osdn.org.ua/data-sharing.html


Название: Стиль синтиксиса QT
Отправлено: pakulo от Август 02, 2007, 10:40
Цитата: "pastor"
Цитата: "vaprele07"

а еще они любят шифроваться через: PrivateSomeClass


Это одна из причин тому:

http://qt.osdn.org.ua/data-sharing.html

Спасибо за ссылку!


Название: Стиль синтиксиса QT
Отправлено: SABROG от Август 02, 2007, 10:41
Я не знаю как в MSVC, но GCC (mingw) поддерживает такие конструкции:

Код:

qDebug() << &(MyClass::parent) << (unsigned int)MyClass::parent << &parent << (unsigned int)parent;


Т.е. указав область видимости члена класса можно передать данные без использования указателя this, напрямую через ссылку.

А еще эта конструкция мне понравилась:

Код:

public:
    MyClass(QWidget * = 0);


Т.е. инициализация безымянного параметра. А зачем писать имя параметра в определении ? Достаточно в реализации ИМХО.


Название: Стиль синтиксиса QT
Отправлено: Alexandr Az от Август 02, 2007, 12:56
Вообщем то так и не понятно осталось.
Вопрос возник не из праздного любопытства, а из за того, что начал путаться именно с полями (членами класса). А как известно, одно из правил написания - хорошо читаемый код, хотя бы для себя.

Первый попавшийся пример - QSQLField и член в самом классе (хехе), а не в приватном.
Код:

public:
     void setValue(const QVariant& value);
     inline QVariant value() const    { return val; }

private:
     QVariant val;

Имя закрытых данных - чисто интуитивное сокращение.
Так во всём куте - на голой интуиции.
Я тоже так начал, но видно моя интуиция меня подвела..

Предложеный вариант mValue не плох, соответствует общему синтаксису, но по логике то должно быть mvalue ибо всё таки мы тип обозначаем с большОй буквы, а m - символ "для нас"

За неимением лучших идей буду все таки использовать данный вариант...


Название: Стиль синтиксиса QT
Отправлено: pakulo от Август 02, 2007, 13:21
Я выбрал вариант mValue и вполне доволен... никакой путаницы, не надо думать в приват разместить или нет...


Название: Стиль синтиксиса QT
Отправлено: vaprele07 от Август 02, 2007, 14:35
Alexandr Az,
Код:
 
 inline QVariant value() const    { return val; }

это подставляемая функция :) аналогично макросам, так-же они и со статиками поступают. И вообще при таком раскладе, когда функция реализуется в самом классе, а класс реализуется в заголовочном файле, то во все объектные файлы будет скинута копия одного и того же кода. Та же схема с объявленными переменными. Еще одно, почему используется PrivateSomeClass, лучше иметь указатель на структуру, чем всю структуру целиком. Аналогично с приватными не виртуальными функциями (втбл) их то же нужно прятать. Ну и изменение заголовочных файлов, ведет к перекомпиляции всех объектных файлов, где они используются.


Название: Стиль синтиксиса QT
Отправлено: pastor от Август 02, 2007, 15:38
Цитата: "pakulo"
Я выбрал вариант mValue и вполне доволен...


Я использую вариант m_value


Название: Стиль синтиксиса QT
Отправлено: SABROG от Август 02, 2007, 15:44
Я так вообще привык находить синонимы для переменных, например parent=owner, widget=window, text=string, item=element...


Название: Стиль синтиксиса QT
Отправлено: Alexandr Az от Август 02, 2007, 16:04
Цитировать

Я использую вариант m_value


Та я тоже его использовал. Но зоопарк получился в коде. Никакого эстетического удовольствия.

если бы везде было set_value() то может быть красивше было.

И с синонимами тоже приколы ещё те бывают!


Название: Стиль синтиксиса QT
Отправлено: SABROG от Август 02, 2007, 16:11
Цитата: "Alexandr Az"
И с синонимами тоже приколы ещё те бывают!


Они начинаются когда пытаешься вспомнить какой из синонимов является членом класса :)