|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
06.10.2009, 20:47 | #1 |
Новичок
Джуниор
Регистрация: 06.10.2009
Сообщений: 5
|
Правила пространства имён Delphi
Уважаемые продвинутые и начинающие Дельфисты!
Прошу Вас помочь с подсказкой, где можно посмотреть материал с подробными примерами объявлений/определений/вызовов процедур и функций НЕ в плане ООП ( с ним как раз нет проблем, почти всё понятно), А В ПЛАНЕ применения перекрестных вызовов функций из смежных модулей, вложенных функций и применения директивы FORWARD. Использую Дельфи 7. Причём хотелось бы посмотреть примеры комбинаций этих действий- или узнать, какие комбинации ошибочны (например, вложенное объявление с директивой forward возможно?, или несколько объявлений forward подряд?). Про директиву forward вообще хотелось бы просто понять - она существует только для разрешения косвенной рекурсии функций, то есть узкоспециализирована, или есть другие варианты её применения- если есть, то какие, где их посмотреть? Искал ответы у Архангельского, Флёнова, Марко Кенту, других уважаемых авторов, в русскоязычном и англоязычном хэлпе (в нём, кстати, очень мало полезных примеров кода). Имею опыт работы с Си/Ассемблером, с Дельфи 7 знаком менее года. Предпочитаю не приводить листинг для поиска ошибок, а найти источник с примерами и всё выяснить. |
07.10.2009, 09:26 | #2 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
1. Это отживающий себе аттавизм, и используется редко. 2. Смысл ее в том чтобы дать возможность (насколько я помню) описывать параметры функции только в обьявлении, а в реализации писать только имя функи. Вот пример: Код:
Код:
Сейчас такая проблема решена - forward обьявлния по умолчанию стоят. Это насколько я помню...
I'm learning to live...
|
|
07.10.2009, 12:56 | #3 |
Новичок
Джуниор
Регистрация: 06.10.2009
Сообщений: 5
|
Для Stilet'а
[QUOTE=Stilet;358570]Про эту директиву я знаю две вещи:
1. Это отживающий себе аттавизм, и используется редко. 2. Смысл ее в том чтобы дать возможность (насколько я помню) описывать параметры функции только в обьявлении, а в реализации писать только имя функи. ................................... ............................. Без forward в старых паскалях приходилось писать параметры и в обьявлении и в реализации. Сейчас такая проблема решена - forward обьявлния по умолчанию стоят. ................................... ............................. Спасибо за реплику, Виталий. Видимо, под "сейчас" Вы имеете в виду более поздние версии Дельфи (там, 2005, 2007 и т.д.)? К сожалению, они для меня сейчас недоступны, работаю с Дельфи 7. Читал, что начиная, кажется, с 2005-й версии в Редакторе Кода Дельфи появилась опция "скрытия блоков", с помощью "+"/"-" знаков, как в Проводнике, которая позволяет разместить все реализации процедур прямо в месте их объявления и затем скрыть эти блоки в листинге и перейти к собственно телу главной процедуры модуля, откуда все скрытые блоки и вызываются. При таком сервисе forward действительно "отмирает" как GOTO, но в 7-й версии такой опции нет, а так хочется сначала выкатить список объявлений с директивами forward, затем записать тело вызывающей процедуры, а затем уже прописать все блоки для вызываемых процедур.... Скажете "блажь", но я так не считаю, поскольку привык именно таким образом оформлять все свои листинги, даже если никто больше их не увидит - такой стиль очень эргономичен и экономит массу времени при внесении изменений и при повторном использовании ранее сделанных наработок, когда при прокрутке сразу видишь основной алгоритм, а затем в случае необходимости докручиваешь экран до нужной процедуры..... Меня также интересует, можно ли использовать FORWARD ДЛЯ ВЛОЖЕННЫХ процедур, поскольку это также очень упростило бы мою работу (отдельно могу объяснить, почему...). Надеюсь, кто-нибудь уже сталкивался с подобными вопросами, и подскажет путь решения..... |
07.10.2009, 13:16 | #4 | |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
С директивой forward в Дельфи чисто практически дело обстоит следующим образом.Если Вы создаете свои методы и они используются следующим образом:
Процедура1; Процедура2; (содержит вызов Процедуры1) Процедура3; (содержит вызов Процедуры2) Процедура4; (содержит вызовы Процедуры1 и Процедуры3) В зтом случае не обязательно предварительно объявлять эти процедуры, а достаточно только описать их в такой же последовательности в коде программы (1,2,3,4). Но встречаются случаи использования методов в следующем виде: Процедура1; (содержит вызов Процедуры3) Процедура2; (вызов Процедуры1) Процедура3; (вызов Процедуры2) В таком случае следует предварительно объявить Процедуру3 (с ее параметрами,если они есть) и директивой forward.Объявляется после глобальных var до implementation. А уже само описание процедур пишете в коде в нужном месте в той же последовательности (1,2,3). Это же правило соблюдается и не только для рекурсивного вызова методов, а и для случаев с переменными и др. объектами.Например - в Процедуре1 используется переменная-объект типа TBitMap , а создается она (Create) в Процедуре3. Тогда аналогично следует предварительно дать объявление Процедуре3 с директивой forward. Цитата:
И не сомневайся даже ... отдых - кайф, работа - лажа!
Последний раз редактировалось DeKot; 07.10.2009 в 13:19. |
|
07.10.2009, 13:21 | #5 | |||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Цитата:
Так ты отделишь масло от хлеба. Цитата:
I'm learning to live...
|
|||
07.10.2009, 14:39 | #6 |
Новичок
Джуниор
Регистрация: 06.10.2009
Сообщений: 5
|
Спасибо Stilet и DeKot за реплики по моему вопросу. Всё же, Stilet, я интересовался возможностью использовать FORWARD для ВЛОЖЕННЫХ процедур, а вложенные процедуры, как известно, в INTERFACE секции не объявляются - на то они и вложенные. У вложенных процедур есть одно преимущество - они обитают в пространстве имён вызывающей процедуры, и, соответственно, могут иметь доступ ко всем созданным в ней структурам, объектам и переменным без явной передачи через формальные параметры, и я нахожу это для себя весьма удобным (таков контекст проекта...), даже несмотря на снижение читабельности кода, зато не надо в две строки перечислять фактические параметры - это улучшает восприятие....Я прошу подсказать мне именно Источник, где можно было бы (желательно по-русски) прочитать инфу по этим вопросам, желательно с примерами реализации - примеры даже важнее, как говориться, один раз увидеть....
|
07.10.2009, 15:15 | #7 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
http://www.citforum.ru/programming/bp70_lr/lr9.shtml Здесь в общем, примерно так и поступай. Ничего страшного что вложенные Вот от меня пример: Код:
I'm learning to live...
|
|
07.10.2009, 16:22 | #8 |
Новичок
Джуниор
Регистрация: 06.10.2009
Сообщений: 5
|
Хорошо, Stilet, я ппросмотрю указанный тобой форум.
|
07.10.2009, 17:36 | #9 |
Новичок
Джуниор
Регистрация: 06.10.2009
Сообщений: 5
|
Для Stilet'а :
Благодарю за подсказку, просмотрел указанный форум, похоже, это именно то, что я искал - подробные очень формализованные описания операторов и директив, много примеров. Всё описание Паскаля скачаю себе. Ещё раз благодарю. Тему за сим прошу считать закрытой - это уже МОДЕРАТОРАМ. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Считывание имён файлов | dobrohleb | Microsoft Office Excel | 21 | 06.09.2012 11:35 |
Правила написания кода на Delphi | Virtson | Общие вопросы Delphi | 17 | 06.08.2010 08:59 |
Правила разделов/главные правила | Alex Cones | О форуме и сайтах клуба | 1 | 30.09.2009 17:49 |
Правила написания формул в Delphi | yurik44 | Общие вопросы Delphi | 1 | 13.06.2007 15:57 |