crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Упрощение кода, написание того или иного кода более понятно и просто
AD
  опции профиля:
сообщение 5.8.2008, 16:26
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


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

Если разрешите, то могу начать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
void*
  опции профиля:
сообщение 5.8.2008, 18:46
Сообщение #2


Программист-самоучка
***

Группа: Участник
Сообщений: 429
Регистрация: 4.6.2008
Пользователь №: 193

Спасибо сказали: 28 раз(а)




Репутация:   3  


ну вот у меня такая дилема. Нижеприведенный код показывает в дереве (QTreeWidget'e) содержимое определенной папки методом рекурсии, однако состоит это дело из двух функций, и мне почему-то кажется что можно это как-то сделать и через одну функцию:
код
void ProjectView::createItems(const QDir &dir) { //параметром является нужная директория

     QStringList listDirs = dir.entryList(QDir::Dirs);

     foreach(QString dirname, listDirs) {
                               if(dirname == "." || dirname == "..") continue;
                               curItem = new QTreeWidgetItem(rootItem); //curItem и rootItem объявлены в классе ранее
                               curItem->setText(0, dirname);                    //rootItem является главным итемом, к нему
                               curItem->setIcon(0, folderIcon);                 //присоединяются все остальные
                               startDir(QDir(dir.absoluteFilePath(dirname)), curItem); //curItem -  просто единый указатель
     }                                                                                     //использующийся для создания всех итемов


     QStringList listFiles = dir.entryList(QDir::Files);

     foreach(QString file, listFiles) {
                               curItem = new QTreeWidgetItem(rootItem);
                               curItem->setData(0, Qt::UserRole, QVariant(dir.absolutePath() + "/" + file));
                               curItem->setText(0, file);
                               curItem->setText(1, dir.absoluteFilePath(file));
                               curItem->setIcon(0, fileIcon);
                               //curItem->setFlags(...);
     }
}
void ProjectView::startDir(const QDir& dir, QTreeWidgetItem *parent) { //рекурсивная функция
     QStringList listFiles = dir.entryList(QDir::Files);
     foreach(QString filename, listFiles) {
                               curItem = new QTreeWidgetItem(parent);
                               curItem->setData(0, Qt::UserRole, QVariant(dir.absolutePath() + "/" + filename));
                               curItem->setText(0, filename);
                               curItem->setText(1, dir.absoluteFilePath(filename));
                               curItem->setIcon(0, fileIcon);
     }

     QStringList listDirs = dir.entryList(QDir::Dirs);
     foreach(QString subdir, listDirs) {
                               if(subdir == "." || subdir == "..") continue;
                               curItem = new QTreeWidgetItem(parent);
                               curItem->setText(0, subdir);
                               curItem->setIcon(0, folderIcon);
                               startDir(QDir(dir.absoluteFilePath(subdir)), curItem);
     }
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- AD   Упрощение кода   5.8.2008, 16:26
- - void*   ну вот у меня такая дилема. Нижеприведенный код по...   5.8.2008, 18:46
- - ViGOur   Ну я дуаю ты сам мог бы догадаться, если бы был вн...   5.8.2008, 21:59
- - void*   ViGOur, насчет entryInfoList я знал, просто мне ка...   5.8.2008, 22:21
- - Red Devil   void ProjectView::AddDirs(const QDir ...   6.8.2008, 11:59
- - void*   упростил однако из двух функций сделал четыре хо...   6.8.2008, 12:49
- - ViGOur   void createItems(const QDir &dir, QTreeWid...   6.8.2008, 14:22
- - void*   ViGOur, спасибо! примерно такое у меня и верте...   6.8.2008, 17:26
- - Tonal   2 ViGOur Я бы всё таки выделил из этого кода функц...   7.8.2008, 8:09
- - ViGOur   Цитата(Tonal @ 7.8.2008, 9:09) Я бы всё т...   7.8.2008, 8:27
|- - AD   Выдалась возможность, может сможете и мне упростит...   7.8.2008, 9:10
- - Tonal   Вынеси длинные проверки с next -> status... в о...   7.8.2008, 12:02
|- - AD   Цитата(Tonal @ 7.8.2008, 13:02) Вынеси дл...   7.8.2008, 12:55
- - Tonal   Без тега кода всяко только уменьшилась! По к...   8.8.2008, 15:21
- - Tonal   Чё непонятно-то?   10.8.2008, 17:31
|- - AD   Цитата(Tonal @ 10.8.2008, 18:31) Чё непон...   10.8.2008, 22:06
- - Tonal   ЦитатаДай - понимаю, курить - понимаю, дай курить ...   11.8.2008, 8:05
|- - AD   Цитата(Tonal @ 11.8.2008, 9:05) После про...   11.8.2008, 8:48
- - Tonal   1) После проверок где... Код if(...) isC...   11.8.2008, 11:07
|- - AD   Теперь это выглядит более внятно и легче править. ...   11.8.2008, 14:54
- - Red Devil   Кодclass ScrTrack: public TImageClass { privat...   12.8.2008, 10:12
- - rich   Может кому поможет: "Рефакторинг. Улучшение с...   13.12.2008, 0:03
- - Admin   rich, а ты темой не ошибся? Причем тут упрощение к...   13.12.2008, 0:52
- - alex977   Цитата(Admin @ 13.12.2008, 0:52) rich, а ...   13.12.2008, 11:28
- - rich   Цитата(Admin @ 13.12.2008, 0:52) rich, а ...   14.12.2008, 18:41


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 18.2.2025, 12:08