LINUX.ORG.RU

Помогите написать красивый код.


0

2

Вообщем делаю графический редактор, и пока есть два режима, кисть что бы рисовать, и возможно выделения какой то области ( что бы потом обрезать картинку).

Решил применить вот такую штуку

enum ModeWork {Brush, Select};
ModeWork mode;

Это правильно? (Имеется в виду, насколько это красивый код?).

И ещё вопрос, как мне в Qt для кнопки привязать событие изменения mode ?

С точки зрения ООП это решается написанием интерфейса ITool и наследованием оного в классах Brush и Select. В интерфейсе должны быть методы описывающие реакцию инструмента на события мыши и клавиатуры.

Absurd ★★★ ()
Ответ на: комментарий от Absurd

классах Brush и Select.

Каких классов? Это просто режим работы.

И да,я так понял что в Qt реализовать что то типа такого

QPushButton* button4 = new QPushButton("Brush");
connect(button4,SIGNAL(clicked()),this->parentWidget(),SLOT(switchMode(0)));
я не смогу?

knotri ()

я бы тебе посоветовал прекратить дрочить на красоту кода, все равно еще стотыщ раз менять все будешь. А просто начать писать.

dikiy ★★☆☆☆ ()
Ответ на: красивый код от sci-fi

Так он работает) Просто не уверен что это правильное решение

knotri ()

Это правильно? (Имеется в виду, насколько это красивый код?).

Это плохо тем, что загаживается глобальное пространство имён. Я бы написал так:

struct ModeWork { enum Type {Brush, Select}; };
ModeWork::Type mode;

Manhunt ★★★★★ ()
Ответ на: комментарий от Absurd

С точки зрения ООП это решается написанием интерфейса ITool и наследованием оного в классах Brush и Select.

Два анимированных аватара этому регистранту.

Manhunt ★★★★★ ()
Ответ на: комментарий от knotri

Каких классов? Это просто режим работы.

«Режим работы» это классический паттерн проектирования State. Реализуется при помощи интерфейса.

Absurd ★★★ ()

Вот так

typedef enum {
     Brush
    ,Pen
    ,Select
} ModeWork;
оно по крайней мере работать будет в конструкции ModeWork mode, а как ты написал — только в плюсерах.

Eddy_Em ☆☆☆☆☆ ()

ТС, не слушай дебилов. Тему под снос, советчиков в бан.

tailgunner ★★★★★ ()

Сам подход вполне себе красив и функционален. Однако то, как ты реализуешь работу с этими состояниями — важнее. При этом, не стоит слишком заморачиваться, просто напиши несколько проектов сложнее Hello World, набьешь руку, спрашивать на каждый чих все равно не получится.

P.S. Набирай перечисления в верхнем регистре, чтоб отличать их от классов, используй префиксы.

CrossFire ★★★★★ ()
Ответ на: комментарий от CrossFire

Набирай перечисления в верхнем регистре

Верхний регистр зарезервирован для макросов, использование его для других целей снижает читабельность кода.

Manhunt ★★★★★ ()
Ответ на: комментарий от CrossFire

Проектов много. Но я скорее заморачиваюсь работой кода, а не красотой, так что рука не набита.

knotri ()
Ответ на: комментарий от Manhunt

Верхний регистр не зарезервирован ни для чего.

Есть такое правило хорошего тона - все константы (в т.ч. перечисления) обзывать верхним регистром. Но это только правило, конечно.

E ★★★ ()
Ответ на: комментарий от E

Верхний регистр не зарезервирован ни для чего.

Формально по стандартам — не зарезервирован, я имел ввиду общепринятый стиль кодирования.

Есть такое правило хорошего тона - все константы

Погуглил. Да, ты прав, а я по поводу эксклюзивного использования для макросов — заблуждался.

Manhunt ★★★★★ ()
Последнее исправление: Manhunt (всего исправлений: 1)
Ответ на: комментарий от Manhunt

Фишка ещё и в том, что отличить макрос от константы может любая вменяемая ide с помощью подсветки.

quiet_readonly ★★★★ ()
Ответ на: комментарий от Manhunt

Почему не неймспейсы, а именно префиксы?

Для небольших проектов ИМХО удобнее, для библиотек и больших — ничего против не имею. Но! Портянки из расширений областей видимости и набирать замучаешься, и читабельность ухудшают. Я честно не помню чтобы приходилось в Qt больше одного раза это делать. http://qt-project.org/doc/qt-5.1/qtdoc/namespaces.html

CrossFire ★★★★★ ()
Последнее исправление: CrossFire (всего исправлений: 1)
Ответ на: комментарий от knotri

Каких классов? Это просто режим работы.

Вот и представь каждый режим работы отдельным классом

yoghurt ★★★★★ ()
Ответ на: комментарий от Absurd

«Режим работы» это классический паттерн проектирования State. Реализуется при помощи интерфейса.

Strategy же! Ну и State тоже, да.

yoghurt ★★★★★ ()
Ответ на: комментарий от dikiy

прекратить дрочить на красоту кода

Programs must be written for people to read, and only incidentally for machines to execute.

buddhist ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.