![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
Я написал программку, и хотелось бы услышать критику специалистов. Пишу здесь, а не в разделе «тесты», потому, что программу выложил с исходным кодом. Тут все файлы проекта на Delphi 2006 + файл проекта для инно-сетап. Многие контролы не стандартные, взяты отсюда. Отличаются от стандартных поддержкой скинов, а во всём остальном тоже. В названии класса присутствует буква «s», например TMemo – TsMemo. Хотелось бы узнать свои недостатки при написании кода, некоторые мелочи я и сам вижу, но может я что-то очень важное делаю не так…. Хотелось бы узнать мнение специалистов по данному коду.
Исходник Заранее спасибо! |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
А нельзя ли поподробнее, какой код тестирует твоя программка, и какие тесты она генерирует?
|
|||
|
||||
| MadCoder |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 478 Регистрация: 24.8.2007 Где: Москва Репутация: 1 Всего: 2 |
По-видимому, она тесты генерирует электронные для абитуриентов).
|
|||
|
||||
| THandle |
|
||||
![]() Хранитель Клуба Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 65 Всего: 372 |
Глянул на код:
1. Оформлен плохо, читать неудобно. 2. Нет try..finally там, где им быть не плохо было бы. 3. Вот такой код тоже не украшает:
Лишние begin..end. Даже если там необходимо сделать было бы несколько действий, я предпочел бы писать так:
//Some Code Могу и и более тщательно посмотреть, но я не подхожу под вот эти критерии: |
||||
|
|||||
| MadCoder |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 478 Регистрация: 24.8.2007 Где: Москва Репутация: 1 Всего: 2 |
THandle, я думаю вполне подходишь. Посмотри пожалуйста вот эту тему, там как раз по теме твоего ника
|
|||
|
||||
| Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
THandle, под специалистами я имел ввиду постоянных пользователей форума vingrad, так что вполне подходишь и ты и другие участники
А почему обязательно для абитуриентов? Это сообщение отредактировал(а) Rohoss - 3.7.2008, 19:18 |
|||
|
||||
| MadCoder |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 478 Регистрация: 24.8.2007 Где: Москва Репутация: 1 Всего: 2 |
это так, к слову. А для кого? |
|||
|
||||
| THandle |
|
||||||||||||||
![]() Хранитель Клуба Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 65 Всего: 372 |
Там даже массив не из меня, а из каких то cardinal'ов На самом деле темы то я все смотрю, но не во все пишу Такс. Ну начнем разбор. Сразу говорю - я не специалист даже близко, так что все комменты не професссиональны
Нус:
после этого надо начинать try..finally...
хм... а не кажется ли тебе, что это условия не наступит? После создания СтрингЛичта Count = 0. Так что условие бесполезное...
а вдруг ничо в файле и нет? надо бы проверять...
А теперь как я бы написал эту процедуру
Завтра продолжу разбирать |
||||||||||||||
|
|||||||||||||||
| Shaggy |
|
||||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 2.5.2007 Где: г.Ижевск Репутация: 3 Всего: 5 |
это если по быстрому... а условие:
не выполнится никогда... даже если str будет непустой
Это сообщение отредактировал(а) Shaggy - 4.7.2008, 02:46 |
||||||||||||
|
|||||||||||||
| Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
Ну это же действительно бред… не пойму как мне такое в голову пришло… |
|||
|
||||
| Rohoss |
|
||||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
THandle В восьмой строчке у тебя ошибка надо так
Shaggy, в TfrmTest.ExecSubMenu
В свойстве Caption появляется вот такой символ «&» он нужен для использования горячих клавишь, но он всю малину портит… Его как-то можно отключить? Это сообщение отредактировал(а) Rohoss - 4.7.2008, 20:52 |
||||
|
|||||
| THandle |
|
||||||||||||
![]() Хранитель Клуба Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 65 Всего: 372 |
Со всеми бывает Вообще отвлекусь от темы на чуть чуть и скажу как я пишу программы. Вдруг кому пригодится. 1. Думаем. 2. Находим идею. 3. Набрасываем на листочке примерный план действий. 4. Думаем что для этого требуется. 5. Пишем первый модуль. Я предпочитаю использовать ООП. То есть пишем на классах. 6. По ходу дела используем {$IFDEF} и прочее для всяких функций поднятия ошибок, логирования... 7. Так же, по ходу дела, тестируем все это в программке, офрмленной чисто для тест. Пара кнопок которые вызывают методы класса и тд. 8. Усиленно тестируем готовый модуль и гоняем его под дебаггером. 9. Все ли вместилось в этот модуль? Если да то дальше, иначе пишем таким же образом еще и остальные. Разбивать программу по не большим модулям(30-50 кб) лично для меня удобнее... 10. Оптимизируем код. 11. Создаем GUI. 12. Прикручиваем к нему код. 13. Усиленно все это дело тестируем на разных машинках. 14. Два варианта: или отдаём юзерам или кладем программу в архив. Так. Теперь по делу.
Неплохо бы тут try..finally юзать... Еще, лично я бы вынес всем имена разделов Ini файла и прочие такие вещи в resourcestring.
Лишние begin..end. Не очень красиво смотрится. ИМХО.
Опять таки нужен try..finally. И еще: Ну зачем, ну зачем нужна такая не красивая запись типа:
Все очень легче сделать так:
И остальное так же... На сегодня хватит... Времени нет... Завтра продолжу. ОК? А вообще: Код построен на одних компонентах, никакой романтики Немножко условие не приметил, пишу то тут |
||||||||||||
|
|||||||||||||
| Shaggy |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 2.5.2007 Где: г.Ижевск Репутация: 3 Всего: 5 |
||||
|
||||
| Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
THandle, а зачем так усилено try..finally юзать? Ведь появления исключения при работе с ини-файлами большая редкость, я например, никогда не замечал.
|
|||
|
||||
| THandle |
|
|||
![]() Хранитель Клуба Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 65 Всего: 372 |
||||
|
||||
| THandle |
|
|||
![]() Хранитель Клуба Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 65 Всего: 372 |
И так, продолжимс...
Первое что бросается в глаза - неосмысленные какие-то значения: 8, 3... Я бы вынес их в константы с понятным именем. А то разбираться в коде, в котором присутствуют подобные числа - довольно сложно. Так же не плохо было бы использовать, вообще, везде в программе, комментарии. Я комментирую практически каждую строчку кода, что не является хорошо. Советую комментировать хотя бы переменные. Дальше... Откуда тут вообще берется некий ParamStr(1). Он вообще хто такой? Не вижу тут опять try..finally и не вижу освобождения занятых ресурсов... Кстати... Zastroy - это супер название. Очень понравилось Сегодня продолжать не могу - интернет кончился :( теперь завтра. Rohoss, советую начать переписывать программу учитывая все замечания. А так же, огромная просьба - оформлять код красиво. Для меня красиво - то как оформлен мой код. Хотя это тоже не идеально. Но глянь пару моих сообщений и делай хотя бы так же. Просто намного приятнее будет читать такое. Еще не плохо бы поменять названия переменных. Они должны восприниматься на лету. Например представь: Есть у нас класс - Кот(Животное). Есть у него метод - мяукать. Объявишь ты переменную, с названием x. И что же? Разве красиво будет выглядить такое? x.Мяукать; Нет. Намного лучше назвать все это осмысленным именем. Например: КотВаська : Кот; КотВаська.Мяукать; Ведь намного же легче читается? Ну вот и постарайся чтобы твой код можно было читать на одном дыхании. Как какую-нибудь очень интересную книгу. Вот пример такого кода: http://forum.vingrad.ru/forum/topic-204531.html Удачи!!! |
|||
|
||||
| Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
Делаю пока такие выводы
1. Чаще использовать try finaly , тем более, где вопрос касается создания объектов 2. Использовать константы (почти вообще не использую) 3. Комментарии (обычно комментирую, но редко) Названия переменных для меня лично понятны, хотя над этим тоже надо подумать… THandle, не плохо если бы ты выслал часть своего кода посмотреть…. |
|||
|
||||
| Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
"Zastroy" - это у меня стандартное название
|
|||
|
||||
| THandle |
|
||||||||||||||||||
![]() Хранитель Клуба Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 65 Всего: 372 |
Вот давай переписывай код с учетом этого
Названия переменных типа:
Мне лично категорически не понятны Не могу. Так как: http://forum.vingrad.ru/forum/topic-219450.html Сейчас просто на ноутбуке только код с текущего проекта, который еще не является даже полностью рабочим. Дальше глянем:
Вот это не понятно:
Как то не красиво выглядит. Неужели обычной проверкой нельзя узнать чему равен Inx, и исходя из этого уже присваивать значения? Ну в этом юните вроде все... Хотя возможно я что-то проглядел.
Лично мне удобнее описывать члены класса в таком порядке: private protected public Да и привычнее как-то выглядело бы...
Лишние begin..end. Не красиво выглядит.
Не понятно почему string. Судя по тем значениям. которые этой переменной присваиваются тут вполне хватило бы char.
Вот это есть не хорошо. Гасить ошибку...
Опять лишние... Не красиво читается. Ну вроде бы все... Переписывай код с учетом всех замечаний и выкладывай сюда. Будем смотреть |
||||||||||||||||||
|
|||||||||||||||||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |