![]() |
|
![]() ![]() ![]() |
|
THandle |
|
||||||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 1 Всего: 372 |
Приветствую всех свободны писателей этой группы!!!
![]() У новичков очень часто бывают залблуждения относительно вопросов программирования на Делфи. В данной теме мы попробуем создать список наиболее часто встречающихся заблуждений и написть по ним небольшой рассказ от имени молодого "диверсанта" взявшегося постигать глубины Дефли. На пути у него будет много сложностей(как раз это и есть наш список заблуждений), и он будет их решать, и что самое удивительное, всегда будет решать неверно. После такого "обучения" он придет на сей славный форум и начнет советовать другим свои неверные решения. Наши доблестные ребята укажут ему в чем он не прав и помогут ему с его неверным кодом, исправят, объяснят, и вскоре наш "диверсант" поймет всю правду правду жизни и встанет на верный путь. Вот такой вот вкратце сюжет нашего рассказа. Писать его я берусь(не получится - сформулируем по-другому ![]() Тут можно представлять как уже готовые заблуждения(красиво написанные, прозаичные и тд.), а можно просто давать код, к которому напишем объяснение и тд. Значит так, нашел пока только следующее, тороплюсь, завтра еще выложу: Циклы работы со строками начинай с нуля, а заканчивай длиной строки минус 1:
А циклы со списками начинай с 1 до List.Count:
Сейчас поищу, что то наверное папку с этими заблууждениями удалил ![]() За флуд в данной теме всем будут выставлены минус!!! Так что не флудим товарищи(на всякий случай). Добавлено через 13 минут и 36 секунд Конструктор объекта надо вызывать в блоке try..finally..end;
Это сообщение отредактировал(а) THandle - 23.3.2008, 20:11 |
||||||
|
|||||||
SneG0K |
|
||||||||
![]() Max Mara ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1887 Регистрация: 1.12.2007 Где: Wis Dells Репутация: 1 Всего: 54 |
Оператор with..do
Изучая дельфи по Фленову, я узнал много, много, чего даже не стоит знать) И только благодаря Thandle я стал на путь истинный! Так, что лучше купить Пачеко, чем Фленова. Так вот, из всего того я не знал про оператор with..do... И в многих примерах пугался его и переписывал! Давай создадим некую структуру
Как бы мы заполняли эту структуру?
Но можно сделать это немножко в меньше кода
Вообщем надеюсь суть понятна. Оператор with..do позволяет получить доступ к переменным какой-либо структуры или юнита, без указания такового) Разницы то в общем нет, но иногда юнит или структура имеет такое "красивое" название... Так же можно делать так
Что позволит получить доступ к переменным Structure1 и structure2.... Вообщем ничего сложного) Это сообщение отредактировал(а) SneG0K - 23.3.2008, 20:40 |
||||||||
|
|||||||||
THandle |
|
|||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 1 Всего: 372 |
Вот это уже сюда подходит))) Именно так я считаю делать не надо, и многие заблуждаются. Попробуй например:
Очень любопытно получается. ![]() |
|||
|
||||
THandle |
|
|||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 1 Всего: 372 |
Значит так, вот еще пара штук:
1. Не стоит удалять динамически созданные объяекты, Делфи умный, он сам их удалит, лучше заняться чем-нибудь более интересным. 2. Чем больше кода ты запихнешь в Synchronize своей дополнительной нити, тем быстрее она будет работать. |
|||
|
||||
THandle |
|
||||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 1 Всего: 372 |
Начало почти готово Думаю в понедельник вторник выложу.
![]() Вот еще: Создавать объект надо так:
а не так:
Напомню, что все советы тут являются довольно таки вредными, и понимать их надо буквально наооборот. ![]() И народ, давайте чтоли уже поактивнее ![]() Это сообщение отредактировал(а) THandle - 28.3.2008, 12:11 |
||||
|
|||||
SneG0K |
|
||||||
![]() Max Mara ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1887 Регистрация: 1.12.2007 Где: Wis Dells Репутация: 1 Всего: 54 |
Некий прикол с if..then
Если мы напишем
ТО это будет абсолютно аналогично
Но не будет аналогично
|
||||||
|
|||||||
THandle |
|
|||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 1 Всего: 372 |
||||
|
||||
SneG0K |
|
||||||||
![]() Max Mara ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1887 Регистрация: 1.12.2007 Где: Wis Dells Репутация: 1 Всего: 54 |
Приложение с параметрами
Все параметры, с которыми приложение было запущено содержатся в
Добавлено через 3 минуты и 41 секунду Забыл сказать отсчет параметров начинается с 0, а не с 1. Но это не значит, что cmd.exe, php.exe, perl.exe и другие получает весь код в параметрах ![]() ![]() |
||||||||
|
|||||||||
THandle |
|
|||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 1 Всего: 372 |
||||
|
||||
SneG0K |
|
|||
![]() Max Mara ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1887 Регистрация: 1.12.2007 Где: Wis Dells Репутация: 1 Всего: 54 |
||||
|
||||
THandle |
|
|||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 1 Всего: 372 |
Значит так, у Len ничего написать не получилось поэтому взялся я
![]() Вот вступление: Жил-был один человек, звали его допустим Иван. Было ему от роду 16 годков. Жил он не бедно – не богато, учился в школе, на двойки. Одеваться любил он модно, был высокого роста и имел гладкие светлые волосы. Жил он себе припеваючи, играл в игры компьютерные, пиво пил с девчонками на дискотеках, в общем был Ваня самым обычным нормальным парнем. Был у Ивана друг, крутой программист и хакер. Хвастался он перед Иванушкой нашим, хвастался. И как иконку в трей запуздырить показывал, и как программку в 30 килобайт забабахать. И говорил этот друг что все это братец, мол, Делфи, круто оно, возьмись, изучай. Задумался тут Иван. Будучи по натуре своей человеком любознательным решил он попробовать поучится работать с этой программой. Взял он у друга дистрибутив, установил и сидит, смотрит. Кнопочки какие-то, надписи не русские. Среди всего этого выделялась красивая кнопочка с изображенным зеленым треугольничком. Решил Иван – тыкну её, будь что будет. И тыкнул. Результат был ужасный - появилось окошко, ну прям как у друга, надпись на нем – Form1, если мышом взять за верхушку – поползет, поползет – берегись - улетит! Обрадовался наш герой, побыстрее выключил компьютер, побежал всем хвастаться что программу написал. И решил с этого момента Ваня твердо – стать программистом, и дело с концом. Вернувшись вечером домой включил он компьютер, полез в Интернет, нашел там книжки по Делфи и стал усердно изучать их. Далее поведаем мы вам сказ о том, какие трудности встали на пути Ивана, и как он их преодолел. |
|||
|
||||
THandle |
|
||||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 1 Всего: 372 |
Всё времени никак не хватает написать... думаю либо в конце этой, либо в начале следующей недели будет продолжение
![]() И на всякий случай, для некоторых, напоминаю, все советы приведенные тут, являются вредными, то есть понимать их нужно прямо наоборот. Например: Надо понимать так: Циклы работы со строками начинай с 1, а заканчивай длиной строки length(string).
А циклы работы со списками начинай с 0 и заканчивай List.Count - 1.
|
||||
|
|||||
THandle |
|
||||||||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 1 Всего: 372 |
Оказалась не легким делом писать все это. Но уже многое готово
![]() Вот еще одна ошибка, которая вызывает у новичков недоумение: Почему компилятор ругается на безобидный цикл for?
Ответ: Да патамучта нильзя в цикле for менять значение переменной счетчика. А вот и еще одно: В таком цикле:
Будет очень много раз вызываться функция length, что сделает программу очень медленной. На самом деле это не так. Начальное и конечное значение цикла for расчитывается только один раз, при начале его выполнения. Поэтому выносить длину строки в отдельную переменную глупо:
Поэтому стоит быть очень осторожным, когда в таком цикле удаляется часть строки, например: Эта процедура по идее должна удалять пробелы:
Однако же все пробелы она не удалит как раз по причине единичного расчета значений цикла. Подробнее об этом я писал тут: http://forum.vingrad.ru/forum/topic-206543.html Ну и ребят, кто тут бывает, поактивнее предлагайте "заблуждения". Проект не заброшен и заброшенным быть не собирается. ![]() |
||||||||
|
|||||||||
SneG0K |
|
||||||
![]() Max Mara ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1887 Регистрация: 1.12.2007 Где: Wis Dells Репутация: 1 Всего: 54 |
THandle ток не ругай меня
![]() Так-с... Может нижеописанное и не относится к начинающим программистам, но это относится к начинающим WinSOCK'ерам. У меня с самого начала изучения дельфи как-то появилась мания использовать стринговые переменные, что иногда очень удобно, а иногда является источником всех бед. Так вот, моя первая сетевая программа ничем необычным не отличалась, она просто передавала какие-либо данные от клиента, к серверу и обратно. Вообщем все просто. В качестве буфера я использовал стринговую переменную. И получал в неё данные как в буфер.
Но я не остановился и решил понять почему текст в стринговой переменной превращается в неизвестно что... Понять почему я так и не смог. Наверно кодировки тут сыграли свою роль. Или переменные... Вообщем неизвестно. Но
Внимание! Это из дневника Грозного Ивана... |
||||||
|
|||||||
THandle |
|
|||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 1 Всего: 372 |
SneG0K, Иваном будешь?
![]() Твой пример вполне подойдет, если использовать его для объяснения работы со строками. Если сможешь оформить в виде рассказика с объяснением что как и куда использовать - то буду очень рад ![]() Вобщем список заблуждений сейчас такой: 1. Работа со строками в цикле. Почему с 1, а не с 0. 2. Работа со списками. Почему с 0, а не с 1. 3. Почему конструктор надо вызывать не как обычный метод? 4. Почему конструктор надо вызывать до try..finally..end? 5. Почему нельзя уничтожить объект в своем же обработчике? 6. Почему надо вызывать не Destroy, а Free? 7. Почему в цикле for нельзя менять значение переменной-счетчика этого же цикла? 8. Эквивалентны ли записи if b = true then и if b then? 9. Почему в цикле for со строками не надо вводить еще одну переменную в которую будет перед циклом заносится длина строки, и эта переменная будет являться конечным значением цикла? 10. Почему в цикле for 0т 1 до длины некоторой строки и удалении некоторых знаков из этой строки, удаляются не все знаки? Вот. Пока 10 штук. Почти все уже готовы. |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Форум группы: Vingrad Delphi - Voluntary Writers Group | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |