Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];

Вниз

Вредные советы чайникам   Найти похожие ветки 

 
Leonid Troyanovsky ©   (2007-11-12 15:25) [0]

Hi, All!

Попробую выделить из ветки
http://delphimaster.net/view/15-1194730016/
отдельно тему написания списка советов, осмысление
которых должно помочь избавлению от некоторых заблуждений,
(и порождаемых ими ошибках) связанных с програмированием в дельфи.

В теме "Самые распространенные дельфийские заблуждения"
остался недописанный портрет КП - Крутого прогера (раб. название)
и все обсуждения по теме.

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

А вот и сам Список вредных советов чайнику:

Оформление исходников и написание комментариев - пустая трата времени.

Помни, что за создание объектов и выделение памяти отвечает А.С.Пушкин.

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

Всегда полагай, что деструктор обнулит все твои ссылки на объект.

Сообщение Access Violation относится не к твоим программам.

Try finally/except - тупые примочки, загромождающие код.

Лучший способ повторного использования кода - это copy & paste.

Разбивай приложение на exe & dll и смело передавай между ними классы.

Используй дельфийские глобальные переменные формы FormX.

Навсегда забудь про Screen, Application, DecimalSeparator и прочую лабуду.

Почаще пользуй  функции win32 API, но никогда не вызывай Win32Check.

Создавай побольше потоков, заморочиваться же с Synchronize не стоит.

Убогий TListBox (TDrawGrid, ..) замени парой десятков кнопок, Edit.

Записи из списка всегда  удаляй  в цикле for начиная с 0.

List index out of bounds - это фича, а не баг.

Инсталяторы придумали лузеры, у твоих юзеров и так все есть.

Record с полями String весьма удобен для файлового ввода/вывода.


Да, еще хотел добавить, что для некоторых утверждений
может потребоваться доказательная база, а
доказать все я один не смогу :)

--
Regards, LVT.


 
tesseract ©   (2007-11-12 15:29) [1]

Вдогонку - возврат из функции Pchar объявленного в функции - лучший из вариантов.


 
antonn ©   (2007-11-12 15:32) [2]

всегда рисуй на панели, а не специализированных контролах...


 
Reindeer Moss Eater ©   (2007-11-12 15:34) [3]

Тоже распространенное заблуждение:
Формирутся строка с помощью многоступенчатых Copy, Delete и Pos, которая передается аргументом куда-либо. Например в CopyFile.
И если при этом CopyFile ничего не копирует, то проверять что же именно передается в качестве аргумента не надо, так как алгоритм формирования не может быть ошибочным.


 
Leonid Troyanovsky ©   (2007-11-12 15:43) [4]


> tesseract ©   (12.11.07 15:29) [1]

> Вдогонку - возврат из функции Pchar объявленного в функции
> - лучший из вариантов.

Причесать не могу, а если все точно описать  - больно громоздко.

Зато могу другой.

Функция, возвращающая объект - гораздо круче его конструктора.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2007-11-12 15:50) [5]


> Reindeer Moss Eater ©   (12.11.07 15:34) [3]

> Тоже распространенное заблуждение:

Как-то АП рассказывал, как следует использовать (и почему)
локальные переменные, но, боюсь, не сформулирую точно.

Кста, with тут болтался-болтался и выпал.

А глобальные переменные, во-ще, сгинули.
Т.е.

Глобальные переменные много полезней локальных.

--
Regards, LVT.


 
boriskb ©   (2007-11-12 15:54) [6]

> [0] Leonid Troyanovsky ©   (12.11.07 15:25)


Ты как то сам упоминал, что "сваливаешься на конкретику".
Частных случаев столько много, что не хватит ни 10, ни 100, боюсь и 1000 пунктов не хватит.
И решить какие из них "важней" невозможно.

На мой взляд надо бы писать что-то вроде:
(цитата из родительской ветки)
[307] Сергей Суровцев ©   (12.11.07 14:40)
Возлюби F1 и (список литературы) как самое себя.
Не возжелай совета ближнего своего, ни кода его, пока не все испробовал сам.
А из вредных:
Чтение отнимает время и портит зрение. Всегда спрашивай любую мелочь.
Никогда не формулируй понятно свой вопрос. Доставь людям удовольствие от угадывания его смысла.



 
Leonid Troyanovsky ©   (2007-11-12 16:02) [7]


> boriskb ©   (12.11.07 15:54) [6]

> Ты как то сам упоминал, что "сваливаешься на конкретику".

Неа, я переживал за философию.
А то, что их больше 10 - не страшно, сейчас наберем,
а потом отсеем самые полезные.


> На мой взляд надо бы писать что-то вроде:

Про заповеди я отвечал, правда не Сергею.

Ну, а если тебе, то скажу, что заповеди я не потяну,
кто захочет, тот сделает - материал-то публичный.
А вот советы должны быть конкретными, даже в ущерб юмору, IMHO.

--
Regards, LVT.


 
vpbar ©   (2007-11-12 16:04) [8]


> Функция, возвращающая объект - гораздо круче его конструктора.

Конечно круче. http://delphimaster.net/view/11-1193577066/ тому пример :)


 
boriskb ©   (2007-11-12 16:05) [9]

> А вот советы должны быть конкретными,

Ок.
Значит я не правильно понял тебя с самого начала :)


 
Anatoly Podgoretsky ©   (2007-11-12 16:08) [10]

> Leonid Troyanovsky  (12.11.2007 16:02:07)  [7]

Советы и заповеди могут существовать паралельно.
Как я понял ты уже готов на серию?
Как серия это будет интересный ресурс.
Если на него часто ссылаться, то рейтинг будет высокий.


 
Сергей Суровцев ©   (2007-11-12 16:10) [11]

>Leonid Troyanovsky ©   (12.11.07 16:02) [7]
>А то, что их больше 10 - не страшно, сейчас наберем,
>а потом отсеем самые полезные.

Вот это чисто по-российски. А может лучше самые полезные как раз оставить?


 
Сергей Суровцев ©   (2007-11-12 16:22) [12]

>Leonid Troyanovsky ©   (12.11.07 16:02) [7]
>А вот советы должны быть конкретными, даже в ущерб юмору, IMHO.

В ущерб юмору это потеряет вообще всякий реальный смысл.

Если цикл ты замыслил,
Переменную назначил,
То используй непременно,
После цикла ты ее.
Ну а если будет вылет,
(Кто бы в этом сомневался),
Глючный Делфи поругаешь,
Ты на форуме потом.


 
Anatoly Podgoretsky ©   (2007-11-12 16:30) [13]

> Anatoly Podgoretsky  (12.11.2007 16:08:10)  [10]

Вот еще типовой вопрос, относится к пунктам инсталяции БДЕ - всегда помещайте ДЛЛ рядом с программой.


 
Anatoly Podgoretsky ©   (2007-11-12 16:39) [14]

> Anatoly Podgoretsky  (12.11.2007 16:30:13)  [13]

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


 
Anatoly Podgoretsky ©   (2007-11-12 16:40) [15]

> Сергей Суровцев  (12.11.2007 16:10:11)  [11]

:-)


 
Игорь Шевченко ©   (2007-11-12 16:50) [16]

Вызывать конструктор нужно так:
var
 Form1: TForm1;

...

 Form1.Create;


 
ferr   (2007-11-12 17:06) [17]

совет:Пишите программы.


 
ferr   (2007-11-12 17:13) [18]

А по делу:

Нужно дерево? Зачем парится, можно использовать TreeView выставив visible = false.

Нужно сделать подсветку синтаксиса? Используйте TRichEdit.

Нужно остортировать массив? Пишите пузырёк ведь все так делают.

Программа должна посчитать какое-то значение? Ни в коем случае не пишите консольное приложение -- это прошлый век.

Нужно отсортировать что либо а пузырёк писать не умеете? Сгодится любая субд.


 
ferr   (2007-11-12 17:16) [19]

Если ваш сосед пишит на другом языке, то непременно потратьте неделю на поиске информации о том что язык используемый соседом давно устарел, уродлив и вот-вот помрёт.


 
Leonid Troyanovsky ©   (2007-11-12 17:26) [20]


> Сергей Суровцев ©   (12.11.07 16:10) [11]

> >а потом отсеем самые полезные.

> Вот это чисто по-российски. А может лучше самые полезные
> как раз оставить?

А и не предлагал выбрасывать, лишь отсеять - операция такая.
Разделить фракции - так понятней?

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2007-11-12 17:30) [21]


> Сергей Суровцев ©   (12.11.07 16:22) [12]

> Если цикл ты замыслил,

Цикл замыслил АП :)
Ну, а чего, форма доходчивая, и не в ущерб смыслу.

Можно и так, дерзай ;)
Я ж говорю, материал есть, и он публичный.

--
Regards, LVT.


 
homm ©   (2007-11-12 17:32) [22]

> [0] Leonid Troyanovsky ©   (12.11.07 15:25)
> Попробую выделить из ветки

Славя хочется? :)


 
Marser ©   (2007-11-12 17:35) [23]

ещё смачно

for i:=0 to SomeList.Count do

:-)


 
Leonid Troyanovsky ©   (2007-11-12 17:38) [24]


> homm ©   (12.11.07 17:32) [22]

> Славя хочется? :)

Не, индекс цитирования поднимаю ;)

--
Regards, LVT.


 
@!!ex ©   (2007-11-12 17:47) [25]

>
>
> [23] Marser ©   (12.11.07 17:35)
> ещё смачно
>
> for i:=0 to SomeList.Count do
>
> :-)

Обычно делают вот так:
for i:=1 to SomeList.Count do


 
Leonid Troyanovsky ©   (2007-11-12 17:48) [26]


> Anatoly Podgoretsky ©   (12.11.07 16:08) [10]

> Как я понял ты уже готов на серию?

Не, Анатолий, к серии не готов :)

Да, и на самом деле, если не касаться БД, или местного нетикета,
т.е., куда лезть мне не хочется, то фонтан быстро иссякнет.

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

--
Regards, LVT.


 
Сергей Суровцев ©   (2007-11-12 18:05) [27]

Если книжек начитавшись
Пишешь в тексте коментарий,
Помни - это оскорбляет,
Всех читающих твой код.


 
ocean ©   (2007-11-12 18:24) [28]

Если пишете в команде
Вы фрагмент функциональный,
Не используйте пробелов,
Текст пишите кирпичом.


 
Anatoly Podgoretsky ©   (2007-11-12 18:46) [29]

> Игорь Шевченко  (12.11.2007 16:50:16)  [16]

Было в форме var := Class.Create


 
Anatoly Podgoretsky ©   (2007-11-12 18:47) [30]

> ferr  (12.11.2007 17:06:17)  [17]

Это вредный или полезный совет, на мой взгляд вредный, правильнее купить.


 
Anatoly Podgoretsky ©   (2007-11-12 18:48) [31]

> homm  (12.11.2007 17:32:22)  [22]

Ну вот пришел и все опошлил.


 
Anatoly Podgoretsky ©   (2007-11-12 18:49) [32]

> Leonid Troyanovsky  (12.11.2007 17:48:26)  [26]

Серия начинается с двух


 
Anatoly Podgoretsky ©   (2007-11-12 18:49) [33]

> Сергей Суровцев  (12.11.2007 18:05:27)  [27]

А не хочешь после публикации сделать стихотворную версию?


 
kaif ©   (2007-11-12 18:57) [34]

Вот я ту для SQL набросал (алаверди к Johnmen-у):

1. нормализация баз данных от лукаваго - все запихай в одну широкую таблицу
2. почаще используй TTable + OnFilterRecord
3. чтобы не получать key violation дропни уникальные индексы
4. генераторы в interbase вызывают только в триггере before insert.
5. настоящие парни все делают только через ХП
6. сборка мусора помогает уменьшить размер файла базы данных interbase
7. у ORACLE лучший оптимизатор запросов
8. сначала напиши все запросы, потом ускоряй их работу, пробуя создавать всякие индексы, а если уже ничего не помогает, задавай вопросы на форум, нормализацию оставь на будущее.
9. У крутых sql-щиков самые многоэтажные запросы. Поэтому не стесняйся спросить на форуме "почему у меня не работает такой вот запрос?", приведя сразу все 100 строк его текста.
10. Предметные ключи лучше суррогатных.
11. Изучай SQL на примере MySQL
12. Правильный запрос авторизации в web делается так:
 "select * from users where user_name=""+s1+"" and password=""+s2+""",
где s1 и s2 - параметры, полученные методом GET.
13. Если не знаешь, какие нужны справочники, все запихай в дерево.
14. Дерево обходят с помощью запроса select * from <table>, полного фетча и запуска рекурсивной процедуры над полученным набором. Потом все это нужно сунуть в TreeView. Есть такие TreeView, которые сами это все сделают за тебя.
15. Если видишь дубликаты, используй слово DISTINCT. Если тебе говорят про декартово произведение, тем более используй DISTINCT.


 
Anatoly Podgoretsky ©   (2007-11-12 18:59) [35]

> kaif  (12.11.2007 18:57:34)  [34]

1. видал
9. сам приводил на sql.ru - 21000 символов
10. убьют


 
ferr   (2007-11-12 19:02) [36]

> [30] Anatoly Podgoretsky ©   (12.11.07 18:47)
> Это вредный или полезный совет, на мой взгляд вредный, правильнее
> купить.

Вредный конечно.


 
kaif ©   (2007-11-12 19:15) [37]

Если на твои запросы
Сервер долго соображает,
Это значит, что крутые
Ты запросы наваял.

Если у твоей таблицы
Двести сорок пять колонок,
Значит полный экспорт в Эксел
Можешь смело начинать.

Ты свои поля старайся называть
(Чтоб легче помнить) именем своей
Собаки и соседских двух котов.
Если этого не хватит, разбавляй
Названья цифрой,
Например: kot_barsik_30
Будет здорово звучать.


 
Johnmen ©   (2007-11-12 19:20) [38]


> kaif ©   (12.11.07 18:57) [34]

Ашот, ты упустил одни из главных моментов. Я о них говорил в той ветке -
про записи в DBGrid (это бОянище из бОянов) и про RecordCount (очень частый момент).


 
Leonid Troyanovsky ©   (2007-11-12 19:23) [39]


> Anatoly Podgoretsky ©   (12.11.07 18:49) [33]

> А не хочешь после публикации сделать стихотворную версию?

Неплохо бы еще и в виде сказок, т.е. для самых маленьких.

--
Regards, LVT.


 
kaif ©   (2007-11-12 19:39) [40]

2 Johnmen ©   (12.11.07 19:20) [38]
OK

Если хочешь ты в таблице
Сумму чисел получить,
То возми сначала сетку,
К ней запросец подключи.

Если сетка не умеет
Вдруг колонку плюсовать,
Ты в отчаянье не падай,
Смело цикл напиши.

В этом цикле целой ишке
ты присвоишь постепенно
Все с нуля до РекордКаунт
(Свойство у запросца есть)

После этого, присвоив
РекордНо запросца ишке,
Ты увидишь, как в таблице
Ходишь ты от верху книзу.

Это код почти готовый
И коммерческий к тому же,
Остается только сумму
В переменной накопить.

Если же в твоем запросце
РекордКаунт странно глючит,
Значит нужно очень срочно
На ADO переходить.



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.56 MB
Время: 0.043 c
2-1195732044
Василий К.
2007-11-22 14:47
2007.12.16
Непонятный Access Violation


2-1195822761
Maker
2007-11-23 15:59
2007.12.16
Перебор компонентов по имени


4-1180599186
bns
2007-05-31 12:13
2007.12.16
Long file path


15-1195087762
СетьЕть
2007-11-15 03:49
2007.12.16
Как узнать русская у пользователя Виндос или нет?


2-1195310612
datorn
2007-11-17 17:43
2007.12.16
wm_gettext





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский