gns_ua: (Default)
[personal profile] gns_ua
Бля, вот как можно таким мудаком быть-то?

class Device : public QObject
{
....
Device* parent;
QString deviceUdi;
QString parentUdiString;
....
}

Это засунуть в QList.

Нужно понимать, что Device однозначно идентифицируется своим UDI и бОльшая часть действий начинается с поиска объекта по UDI.

А потом написать вот такой WTF по связыванию детей с родителями при инициализации:

foreach (Device *device,storageDevices())
foreach (Device *parentDevice,storageDevices())
if (parentDevice->udi() == device->parentUdi()) {
device->setParent(parentDevice);
break;
}
std::cerr << "[E] Parents done\n";


Пиздец, O(n^2). Нахуя вообще Device* parent, если он избыточен и вполне достаточно знать QString parentUdiString ? А вот зачем: чтобы когда понадобиться полезть к родителю, можно было просто сходить по указателю, вместо вызова ещё одного WTF:

Device *Hal::findDevice(const QString &deviceUdi) {
foreach (Device* device,storageDevicesList)
if (device->udi() == deviceUdi)
return device;
return 0;
}


Блядь, ну для чего-то же существует QHash, ну какого хуя в 21 веке делать тупорылый поиск? И нахуя Device делать объектом, если на самом деле хватает typedef struct?

Интересно, чего я такого покурил когда два года назад писал эту поебень?
(deleted comment)

2010-08-19 14:07 (UTC)
- Posted by [identity profile] gns-ua.livejournal.com
Я давно начал понимать, почему обучение детей Бейсику действительно следует считать уголовным преступлением. На всю жизнь мозги компостирует.
(deleted comment)

2010-08-19 14:27 (UTC)
- Posted by [identity profile] gns-ua.livejournal.com
Паскаль лишь немногим лучше. Да, после бейсика я читал книжки про паскаль и модулу2. Там я открыл для себя линкед листы и деревья, но там нифига не рассказывали, что из них на самом деле можно делать :(

2010-08-19 16:26 (UTC)
- Posted by [identity profile] v-l-a-d.livejournal.com
Ну а какой смысл писать про хэш-таблицы или красно-черные деревья в книге по языку программирования?

Помню, в любой старой книжке по Паскалю обязательно показывалось, как реализовывать linked lists, стек и очередь - уже и на этом спасибо)

2010-08-20 07:39 (UTC)
- Posted by [identity profile] gns-ua.livejournal.com
А книжек по программированию-то и не было. Была у меня в децтве советско-ВУЗовская книжка "Программирование", но в ней были разделы про PL/1, Алгол и Фортран, и немножко бесполезной теории про машины тьюринга, цепи Маркова и их эквивалентность. Ничего про оценку сложности алгоритмов, ничего про структуры данных.

Короче компухтер сайнс образца 1950, и это в книжке 1981 года!

2010-08-19 16:22 (UTC)
- Posted by [identity profile] v-l-a-d.livejournal.com
А с чего тогда начинать?
Си? Схема?

2010-08-19 22:00 (UTC)
- Posted by [identity profile] dyadka-zakharov.livejournal.com
Си, конечно! Он - наше всё! :))) был, по крайней мере. Помню войны между сишниками и паскалистами. Чуть до драки не дошло.

2010-08-20 07:34 (UTC)
- Posted by [identity profile] gns-ua.livejournal.com
В таком контексте, конечно. Паскаль же вообще никакой.

Но на самом деле надо учить руби, или питону, или джаваскрипту. Если мы хотим учить Программированию, а не кодерству.

2010-08-20 07:32 (UTC)
- Posted by [identity profile] gns-ua.livejournal.com
Ну не Си конечно.

У схемы круглые скобочки и RPN, но можно ECMAScript например http://www.crockford.com/javascript/little.html ;)

2010-08-19 15:50 (UTC)
abbra: (Default)
- Posted by [personal profile] abbra
... не говоря уже о том, что отношение parent-child в QObject уже реализовано.

Даже если не использовать QHash, то QObject::setObjectName() дает возможность дать имя объекту, а затем QObject::findChild() позволяет найти его по имени, а QObject::findChildren() -- по регулярному выражению относительно имени.

2010-08-19 16:19 (UTC)
- Posted by [identity profile] v-l-a-d.livejournal.com
>И нахуя Device делать объектом, если на самом деле хватает typedef struct

Ладно бы просто делать объектом -- при правильной реализации оверхед нулевой, зато инкапсуляция, конструкторы и все такое.
Но нахрена его от QObject наследовать и тащить таблицу виртуальных функций и кучу всякого мусора впридачу?)

Ну и еще я бы хранил не QList<Device*>, а просто QList<Device> - из-за того, что в QString реализован copy-on-write, это выйдет дешевле, чем аллокация объектов в динамической памяти. Ну или, как я понимаю, в данном случае - QHash<QString, Device>;

p.s. Надо посмотреть свой код пятилетней давности (я тогда как раз тоже Qt баловался). Думаю, найду много интересных WTF:)

2010-08-20 07:48 (UTC)
- Posted by [identity profile] gns-ua.livejournal.com
Э, так именно QObject был нужен - чтобы сигналы ловить. Типа, по сигналу dbus узнали о новом объекте в Hal, создали отражающий его экземпляр Device, на его слот повесили дбасовские сигналы о изменениях пропертей. А ещё у каждого дежица есть TrayIcon, и сигналы с него опять же получает экземпляр Device. Типа инкапсулировал. Зачем - непонятно.

ООП головного мозга сильно с толку сбивает, вот что я скажу. Получается даже на вид код громоздкий, и без всякого профита - сейчас переписываю на Glib, и получается проще, читабельнее, меньше буков и один исходник вместо пяти.

Когда индустриальное программирование, я понимаю. Сотни быдлокодеров, десятки девелоперов, архитекты. Там конечно ООП позволяет выжить.

> p.s. Надо посмотреть свой код пятилетней давности (я тогда как раз тоже Qt баловался). Думаю, найду много интересных WTF:)

Код в студию! ;)

Profile

gns_ua: (Default)
gns_ua

April 2017

M T W T F S S
     12
3456789
10111213141516
17181920212223
24252627282930

Expand Cut Tags

No cut tags

Style Credit