Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Интернет: Образование, Работа и Бизнес" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Программирование на Delphi (выпуск 81)
Программирование на DELPHI
Выпуск #81 (01 мая 2008 г.)
Если Вы хотите где-либо разместить материалы, представленные на www.delphi.int.ru или в данной рассылке, свяжитесь, пожалуйста, с их автором или ведущим рассылки.
Delphi.int.ru Expert Последние новости
Архив: вопросы и ответы В архив попадают вопросы, срок действия которых истёк. Каждый заданный вопрос действителен в течение одной недели, т.е. ответы на него принимаются именно в этот период. В сегодняшнем выпуске опубликованы вопросы # 371 - 385. Вопросы, на которые не было дано ни одного ответа, не публикуются. Статистика по выпуску: Кол-во вопросов: 15 Вопрос # 372 Здравствуйте. Как мне сделать так, что бы нажав на кнопку Вопрос задал: Толков Геннадий Викторович (статус: Посетитель) 1. Отвечает эксперт: Федоров Роман Сергеевич 1)uses ShellApi; Ответ отправил: Федоров Роман Сергеевич (статус: 2-ой класс) 2. Отвечает эксперт: Вадим К По поводу языков. Ответ отправил: Вадим К (статус: Кандидат наук) 3. Отвечает эксперт: min@y™ Мог дать ответы на все вопросы, но опоздал. :) Приложение: Ответ отправил: min@y™ (статус: Студент) 4. Отвечает эксперт: Шарайчук Сергій Олександрович Сохранить текст ты можеш используя компонент SaveDialog, например Ответ отправил: Шарайчук Сергій Олександрович (статус: 1-ый класс) Вопрос # 373 Здравствуйте! Мне необходимо написать два класса, один - класс "линия", второй - класс "объект". Класс объект состоит из массива линий. Вот задача заключается чтобы обеспечить безопасный доступ к каждому экземпляру линии через класс объект. Например, обращение должно быть примерно таким как идет обращение к строке в компоненте Memo: Вопрос задал: SMaks (статус: 1-ый класс) 1. Отвечает эксперт: Вадим К Я надеюсь, что объект линия вы в состоянии написать. А вот что бы написать объект, который будет их "содержать" воспользуемся стандарным классов TList (модуль Classes) или TObjectList (Contrls). Во втором случае вам не прийдётся думать о удалении объектов линия. Тоесть вам просто нужно написать наследника. В приложении есть наследник на базе TList Приложение: Ответ отправил: Вадим К (статус: Кандидат наук) Вопрос # 374 Здравствуйте ув. эксперты. Существует замкнутый полигон из N количества линий, соотвественно все вершины данны. Как опередить попадает ли данная точка в полигон или нет? (без использования регионов) Вопрос задал: SMaks (статус: 1-ый класс) 1. Отвечает эксперт: Матвеев Игорь Владимирович Здравствуйте, SMaks! Ответ отправил: Матвеев Игорь Владимирович (статус: Студент) 2. Отвечает эксперт: Роман Здравствуйте, SMaks!Привожу вам функцию которая определяет находится ли точка внутри многоугольника или нет.TestPolygon : array of TPoint - многоугольник;P : TPoint - точка положение которой нужно определить.Работает с любыми замкнутыми многоугольниками. Приложение: Ответ отправил: Роман (статус: 5-ый класс) Вопрос # 375 Здравствуйте. Что делают даные API функции (в прилож) и для чего используются? Приложение: Вопрос задал: SMaks (статус: 1-ый класс) 1. Отвечает эксперт: Вадим К Эти функции устанавливают и запрашивают область перемещения курсора. Тоесть вы имеете возможность ограничить перемещение курсора некоторым прямоугольником. Но я крайне не рекомендую использовать эти функции - некоторые пользователи не понимают почему мышка не может уйти дальше некоторого окна или, что ещё хуже, кнопки. Ответ отправил: Вадим К (статус: Кандидат наук) 2. Отвечает эксперт: Виталий Лещенко Здравствуйте, SMaks! Ответ отправил: Виталий Лещенко (статус: 4-ый класс) 3. Отвечает эксперт: Федоров Роман Сергеевич Здравствуйте, SMaks! Ответ отправил: Федоров Роман Сергеевич (статус: 2-ой класс) Вопрос # 376 Здравствуйте! Вопрос, быстрее ли осуществляется вызов из библиотеки dll функции на прямую, чем если, вызов происходит через Com-сервер, расположенный в библиотеке, т.е. через интерфейс? Вопрос задал: SMaks (статус: 1-ый класс) 1. Отвечает эксперт: Вадим К Я думаю, что быстрей, причём заметно, так как создание com сервера иногда занимает приличное время. Но если сервер загружен в память, то вызов будет более быстрым, но всё равно медленей, чем прямой вызов с заргуженой длл. Ответ отправил: Вадим К (статус: Кандидат наук) 2. Отвечает эксперт: Виталий Лещенко Здравствуйте, SMaks! Ответ отправил: Виталий Лещенко (статус: 4-ый класс) Вопрос # 377 Здравствуйте! Продолжая вопрос 373 напишу новый. У меня есть три класса. Класс TDocument содержит в себе массив "объектных векторов" - ObjectsVector. Приложение: Вопрос задал: SMaks (статус: 1-ый класс) 1. Отвечает эксперт: Вадим К У вас в голове откровенно каша. Вы хотите использовать абстракный класс, не реализовав эти методы. Ответ отправил: Вадим К (статус: Кандидат наук) 2. Отвечает эксперт: min@y™ Набросал ОЧЕНЬ сильно упрощённый примерчик, буквально на коленке. Это не руководство к действию, но я работаю уже много лет именно так. См. приложение. Приложение: Ответ отправил: min@y™ (статус: Студент) Вопрос # 379 Приветствую!!Как програмно нажать на клавиши на клавиатуре?(Во время выполнения программы) Вопрос задал: KilkaMS (статус: Посетитель) 1. Отвечает эксперт: Вадим К Я думаю это поможет Ответ отправил: Вадим К (статус: Кандидат наук) 2. Отвечает эксперт: Николай Рубан Данные манипуляции можно произвести при помощи таких не хитрых действий (смотрите приложение). Приложение: Ответ отправил: Николай Рубан (статус: 9-ый класс) 3. Отвечает эксперт: Роман Здравствуйте, KilkaMS!Щёлкнуть можно по разному;посмотрите на delphiworld.narod.ru/_os_.html в части клавиши,там с десяток разных вариантов реализации. Ответ отправил: Роман (статус: 5-ый класс) Вопрос # 380 Приветствую!!!Как можно работать с удаленным реестром?? Вопрос задал: KilkaMS (статус: Посетитель) 1. Отвечает эксперт: Роман Здравствуйте, KilkaMS!Вообще для этого надо написать клиента и сервера.А так перейдите в архив рассылки http://www.delphi.int.ru/subscribes,скачайте zip и в выпуске 42 (26 февраля 2006 г.) посмотрите ответы на вопрос 232. Ответ отправил: Роман (статус: 5-ый класс) Вопрос # 382 Приветствую!!!Можно-ли заставить все процессы в программе не блокировать друг друга?? Вопрос задал: KilkaMS (статус: Посетитель) 1. Отвечает эксперт: Вадим К А процессы а программе не могут блокировать друг дружку, так как В программе может быть только один процесс. А то что вы назвали процессами называется потоками. Ответ отправил: Вадим К (статус: Кандидат наук) Вопрос # 383 Здравствуйте!Вопрос: Вопрос задал: HotMan (статус: Посетитель) 1. Отвечает эксперт: Вадим К Вы так спрашиваете, вроде это одна-две строчки. Ответ отправил: Вадим К (статус: Кандидат наук) 2. Отвечает эксперт: Роман Здравствуйте, Kardonsky Roman Viktorovich!Посмотрите на http://www.delphimaster.ru/articles9.html статью «DELPHI в примерах для начинающих» - Изучение простейших приемов работы с файлами и потоками на примере программы «Монитор каталогов»,на http://www.delphikingdom.com/ - "Параллельные потоки";поищите книжку М.Фленова "Библия для программиста в среде Delphi" (17 глава "Потоки"). Ответ отправил: Роман (статус: 5-ый класс) 3. Отвечает эксперт: Knjazev Здравствуйте, Kardonsky Roman Viktorovich! Ответ отправил: Knjazev (статус: 3-ий класс) Вопрос # 384 Проведём эксперемент (delphi 6, но скорее всего и в других версиях будет точно также): создадим новый проэкт и добавим ещё одну форму. Пусть form1 - главная - кинем на неё кнопку Button1 и form1.formstyle="fsMDIForm." В обработчике нажатия кнопки Button1 напишем Вопрос задал: mvp (статус: 4-ый класс) 1. Отвечает эксперт: Вадим К А если form2.formstyle="fsMDIChild" Ответ отправил: Вадим К (статус: Кандидат наук) 2. Отвечает эксперт: Knjazev Здравствуйте, mvp! Приложение: Ответ отправил: Knjazev (статус: 3-ий класс) » Найти все предыдущие уроки можно на www.delphi.int.ru в разделе "Статьи". Последние 3 урока: Подпрограммы (часть 2)
Решение домашнего задания из урока №19Для начала разберём домашнее задание, которое было предложено в прошлом уроке. Задание было следующим: Определить, какие входные параметры было бы логично задать для следующих подпрограмм:
1. Необходимо указать текст, в котором будет выполняться поиск буквы и сама буква для поиска. ВведениеВ прошлом уроке мы разобрались, каково назначение подпрограмм, какие бывают подпрограммы и узнали об основных понятиях, связанных с подпрограммами. Итак, подпрограмма - это набор операторов, оформленных специальных образом. Подпрограмму можно вызывать из разных мест основной программы (или из других подпрограмм). Подпрограммы позволяют вынести повторяющиеся блоки кода "за скобку". Сегодня мы научимся создавать свои собственные подпрограммы. Структура подпрограммыЗаголовок представляет собой строку, в которой содержится вся необходимая информация о подпрограмме: её тип, имя, список аргументов, выходное значение. Заголовок является обязательной частью подпрограммы. Тело подпрограммы, т.е. блок, содержащий все команды, выполняемые подпрограммой, записывается после заголовка. Если быть более точным, под заголовком размещается раздел описаний (переменные, константы и т.д.), а уже затем блок реализации. Таким образом,
общая структура подпрограммы напоминает любую самостоятельную программу. Описание заголовкаИтак, мы решили создать свою подпрограмму. Чтобы программа могла её вызывать, подпрограмму нужно описать. Описание обычно начинается с заголовка. Как мы отметили ранее, в заголовке содержится основная информация о подпрограмме. Разберёмся отдельно с каждой из составляющей заголовка. Тип подпрограммы Ранее мы установили, что существуют два типа подпрограмм - процедуры и функции. Их различие в том, что функция возвращает какой-то результат после завершения работы, а процедура этого не делает. Значит, мы должны явным образом указать, чем является наша подпрограмма - процедурой или функцией. Указывается это в самом начале заголовка соответствующим зарезервированным словом - procedure или function. Название подпрограммы Чтобы иметь возможность вызывать подпрограмму, нужно присвоить ей имя. Имя подпрограммы составляется по тем же правилам, что и имя любого идентификатора (переменной). Кто забыл - смотрите урок №8 "Pascal - первое знакомство", там эти правила подробно рассмотрены. Итак, вы придумали имя своей подпрограмме. Куда его написать? А всё просто - сразу же за словом procedure или function через пробел: procedure MyProcedure
или function MyFunction
Иногда подпрограмме не присваивают осмысленного имени и используют именно такие названия, как указано выше. Ещё применяются сокращения вроде MyFunc или MyProc. Если подпрограмма пишется в тестовых целях, то такие названия вполне подойдут, но если разрабатывается "серьёзное" приложение, следует избегать таких названий. Представьте, легко ли будет вам ориентироваться в коде, если подпрограммы будут имена имена MyFunc1, MyFunc2, ..., MyProc1, MyProc2,
... ? Именно поэтому давайте подпрограммам (а также и переменным, константам) какие-то осмысленные имена. Впоследствии разобраться в коде будет гораздо проще.
Окончание заголовка Тип подпрограммы указан, название тоже... Что дальше? А дальше следует подумать над тем, требует ли ваша подпрограмма какие-то входные параметры (аргументы) или она работает без них. Окончание заголовка как и окончание любой команды указывается символом точки с запятой (";"). Допустим, ваша процедура скрывает на форме какие-то элементы и при этом не требует входных параметров. Тогда её заголовок будет выглядеть так: procedure HideElements;
На этом описание заголовка такой простой процедуры заканчивается. Независимо от того, принимает ли подпрограмма входные параметры или нет, является ли она функцией или процедурой - точка с запятой в конце быть должна.
Описание входных параметров Теперь разберёмся, как описать входные параметры. Делается это ни чуть не сложнее, чем описание обычных переменных. Всё, что вам нужно сделать - это открыть круглую скобку после имени подпрограммы, перечислить параметры как обычные переменные, т.е. в формате "имя: тип_данных" и закрыть скобку. При этом переменные одного типа можно перечислять как через запятую, так и отдельно. Сами параметры отделяются друг от друга точкой с запятой, что вполне логично. function Sum(A,B: Integer) или function Sum(A: Integer; B: Integer) Возвращаемое значение (только у функций) Остался последний штрих: если мы описываем функцию, то должны указать, каково будет её выходное значение. А точнее, какой тип данных это значение имеет. Само значение, конечно, мы установим в процессе выполнения функции. Если функция возвращает всё время одно и то же значение, то у неё нет смысла и её можно заменить на процедуру, а само значение сделать константой. function Sum(A,B: Integer): Integer;Сумма двух целых чисел, очевидно, тоже целое число. На этом описание нашей функции закончено. Тело подпрограммыЗаголовок написан, дальше дело за малым - написать тело подпрограммы. Здесь ничего особенного - всё пишется также, как и раньше. Входные параметры становятся самостоятельными переменными и к ним можно обращаться обычным образом. Итак: procedure|function имя_подпрограммы [входные_параметры] [: тип_данных_выходного_значения]; {раздел описаний} begin {раздел реализации} end; Таким образом, сначала написали заголовок подпрограммы, затем её тело и далее подпрограмму можно вызывать. Какие правила при этом нужно соблюдать, сейчас рассмотрим. Возвращаемое значениеУказать выходное значение функции очень легко. Существует 2 способа сделать это, и оба заключаются в присвоении значения "воображаемой" переменной. Первый способ - можно присвоить значение самой функции, т.е. использовать её название как имя переменной и выполнить присвоение. Второй способ - присвоить значение переменной Result. Эта переменная существует только в рамках данной функции, но описывать её нигде не нужно. Вернёмся к нашему примеру функции, выполняющей сложение двух чисел. Ниже представлены оба способа задания возвращаемого значения: function Sum(A,B: Integer): Integer; begin Sum:=A+B end; function Sum(A,B: Integer): Integer; begin Result:=A+B end; Эти записи эквивалентны и означают абсолютно одно и то же. Где располагать подпрограмму?Наверняка, у вас возник вопрос, в каком месте писать подпрограмму? Давайте разбираться. Во-первых, её нужно писать в таком месте, чтобы программа могла её найти. Подпрограммы можно описывать в разделе описаний. Да, именно там, где описываются переменные, только над ними (т.е. выше). Например, если ваша подпрограмма используется только в обработчике нажатия кнопки и больше нигде, то её можно поместить в раздел описаний этого обработчика. Тогда из других обработчиков подпрограмма видна не будет. Второе правило
- любая подпрограмма должна быть описана выше того места, где она вызывается. Т.е. нельзя вызывать подпрограмму, которая расположена ниже - компилятор на этот момент времени о подпрограмме знать ничего не будет. Собственно, это правило применимо и к переменным, и к константам и к любым другим элементам - описание должно идти ранее первого обращения к этому элементу. {...} var Form1: TForm1; implementation {$R *.dfm} procedure MyProc1; procedure MyProc2; {...} function MyFunc1: Integer; function MyFunc2: Real; {...} {обработчики} end. Пример Пусть требуется найти максимальное из трёх введённых чисел с использованием подпрограммы. Числа будут вводиться в 3 текстовых поля TEdit, результат будет появляться при нажатии на кнопку в текстовой метке TLabel. function Max3(A,B,C: Integer): Integer; Реализация тоже довольно проста: например, принимаем первое число за максимальное, а далее смотрим - если второе/третье больше него, то максимальным будет это второе/третье. Итак, полное описание функции: function Max3(A,B,C: Integer): Integer; begin Result:=A; if B > Result then Result:=B; if C > Result then Result:=C end; Ну а далее то, что вы уже прекрасно знаете и умеете: procedure TForm1.Button1Click(Sender: TObject); function Max3(A,B,C: Integer): Integer; begin Result:=A; if B > Result then Result:=B; if C > Result then Result:=C end; var N1,N2,N3: Integer; begin N1:=StrToInt(Edit1.Text); N2:=StrToInt(Edit2.Text); N3:=StrToInt(Edit3.Text); Label1.Caption:='MAX = '+IntToStr(Max3(N1,N2,N3)); end; В данном примере функция помещена в раздел описаний обработчика кнопки и поэтому из других мест программы видна не будет. Важно: обратите внимание, что имена переменных, передаваемых в качестве параметров, не обязаны быть одинаковыми. В данном случае передаются только значения (числа). В объявлении функции указаны имена A, B, C, а значения подставляются из переменных N1, N2, N3. При этом, вместо переменных можно указать вполне конкретные значения, например Max3(N1,10,N3). ЗаключениеНа этом изучение подпрограмм не закончено. Есть ещё важные моменты и приёмы, о которых нужно знать. Их мы рассмотрим в следующем уроке. Домашнее заданиеСоставить подпрограммы:
Примечание к заданию 1: Факториалом числа n называется произведение 1*2*3*...*n и обозначается факториал "n!". Факториал числа 0 равен 1. Оцените данный урок (1 - плохо, ..., 5 - отлично):
-1- -2- -3- -4- -5-. Комментарии в тексте письма приветствуются.
Самые популярные статьи на сайте: ∙ Работа с приложениями Microsoft Office. Excel РефакторингАвтор: Вадим К ВступлениеОчень часто, когда проект разрастается, наступает такой момент, когда он начинает разваливаться. Так умирали многие хорошие проекты – их создатели проигрывали схватку с горой кода. Странно было бы, если бы никто ничего не придумал для упрощения "разгребания кода". И действительно, такая технология существует и называется Рефакторинг. На английском пишется "Refactoring" и мне кажется, что лучше переводить как "повторная движущая сила". Вполне оправданное название. Но технология была бы лишь только технологией, если бы популярные среды разработки не добавили в свои возможности и рефакторинг. Среда Delphi, начиная с версии 2005, также эту технологию поддерживает. Так что же такое рефакторинг? Wikipedia даёт длинный ответ: "Рефакторинг или Реорганизация — процесс полного или частичного преобразования внутренней структуры программы при сохранении её внешнего поведения. В его основе лежит последовательность небольших эквивалентных (т.е., сохраняющих поведение) преобразований. Поскольку каждое преобразование маленькое, программисту легче проследить за его правильностью, и в то же время, вся последовательность может привести к существенной перестройке программы и улучшению её согласованности и четкости. Рефакторинг позволяет разрабатывать архитектуру программы постепенно, откладывая проектные решения до тех пор, пока не станет более ясной их необходимость». Более простыми словами, рефакторинг – это технология улучшения читабельности вашей программы без изменения функциональности. Но иногда в процессе рефакторинга находятся ошибки – тут уже функциональность изменяется, но для конечного пользователя, который надеется, что в программе нет ошибок, функциональность не меняется :-) ПереименованиеКак часто, написав большой участок кода, понимаешь, что имя для переменной крайне неудачное (хороша мысль обычно приходит поздно)... И хорошо, если этот код только что написан, а если нет? Сидеть разбирать, искать все переменные, изменять имена? Или воспользоваться методом "найти-заменить"? Как по мне, то в втором случае ошибок точно больше будет. И здесь нам поможет один из методов рефакторинга под названием "переименование". Итак, начнём. Загрузите в Delphi какой-нибудь проект, желательно побольше, не забыв перед этим сделать его резервную копию, а то мало ли что понаделаете... Выбираем подопытную функцию, в которой находим переменную для переименования. Оставляем просто на ней текстовый курсор и идём в меню Refactor » Rename (или комбинацию клавиш Ctrl+Shift+E). Появится окошко: В поле "New name" вводим новое имя. Галочку "View reference before refactoring" (показать, что изменится перед самим изменением) на первое время рекомендую оставлять – будете видеть, что меняется; потом её обычно снимают. Жмём ОК и видим, как в нижней части редактора появилось небольшое окно: Все изменения видны как на ладони. Теперь достаточно нажать кнопку, где изображен кубик. Понаблюдайте за результатом. Самое интересное, что переменные с таким же именем, но в соседней процедуре, не будут затронуты. Если же редактируется глобальная переменная – будет произведён поиск во всех связанных файлах. Попробуйте выделить в редакторе кода имя кнопки или формы и попробовать его переименовать. В окошке Refactoring в самом низу можно будет увидеть фразу VCL Designer Update – компонент будет переименован не только в коде, но и на форме. По-моему, очень удобно. Аналогичным методом переименовываются и типы, имена классов, имена процедур. Просто пробуйте и будете приятно удивлены. Для того, чтобы сделать всё это, Delphi делает лексический/синтаксический анализ кода. Что-то вроде компиляции на лету. Наверное, вы уже заметили, что неверные участки кода подчёркиваются волнистой линией (хотя иногда и неверно). Извлечение методовА теперь представим такую ситуацию. Есть очень большая процедура. Надо из неё выделить кусочек кода в отдельную процедуру ("разделяй и властвуй"). Маленькие куски кода проще поддаются анализу. Существует негласное правило, что процедуры больше 30 строк – это очень плохо. Процедура извлечения в меню называется Extract Method. Выделите у себя в коде небольшой участок кода и нажмите Ctrl+Shift+M (или выберите в меню Refactor » Extract Method). Появится следующее окно: Теперь достаточно ввести имя процедуры и нажать "ОК". При этом анализируются переменные, переносятся в новую подпрограмму, организовывается список параметров. Правда, у этого метода есть пара недостатков. Delphi не может извлечь метод, если в нём есть команда Exit или оператор Continue/Break и мы находимся внутри цикла, которому они принадлежат. Но и мы не всегда сходу можем выделить в таком коде процедуру. Также замечен один баг – если в функции после извлечения не остаётся своих локальных переменных, то список их очищается (что ожидалось), но слово var не удаляется. Что ж поделаешь... Объявление переменныхКак иногда не хочется перемещаться в блок объявления переменных и вписывать туда новую переменную... Хорошо, если это процедура и всё просто. А если это новый метод класса? Всё предельно просто. Пишем код, но переменную не объявляем. Потом, оставив курсор на ней, выбираем в меню Refactor » Declare variable (Ctrl+Shif+V). К сожалению, Delphi иногда не может "угадать" тип переменной, и подставляет TObject, но курсор сразу оказывается в поле Type, следовательно, можно сразу ввести имя типа и нажать Enter. Отметив галочку Set Value (установить начальное значение), будет добавлен код инициализации нашей новой переменной. Аналогичным способом можно объявлять новые поля для классов. А для объявления ручками иногда приходится скроллить сотни строк... Уточнение имени типаИногда помнишь имя типа, но немного забыл. Или обявляешь переменную какого-то типа, а оно не хочет с ней компилироваться, ругается (причина проста – есть ещё один класс/тип с таким же именем). Как найти эти типы? Очень просто. Для этого вызываем в меню пункт Refactor » Find Unit (Ctrl+Shift+A). Как видно, я написал часть имени и были найдены все типы и функции, которые содержат это слово. Вот только мне непонятно, почему выделенное не вставляется по нажатию Ок. А то было бы очень удобно. Но этот диалог употребляется в другом месте – там он отрабатывает по полной программе. Изменение параметров функции/методаИногда нужно добавить в функцию новый параметр или удалить старый. В этом случае Delphi тоже предоставляет инструмент. Для этого нужно, чтобы текстовый курсор был на имени процедуры в её объявлении (в той строке должно быть слово procedure или function). А потом в меню выбираем Refactor » Change Params... Дальнейшее изучение этого метода оставляю как домашнее задание. А что делать с младшими версиями Delphi?Здесь на помощь придут такие инструменты как Castalia (http://www.twodesk.com/castalia/index.html). У них на сайте можно посмотреть демонстрацию возможностей. Как по мне, то некоторые вещи реализованы очень хорошо. Но автодополнения кода иногда вызывает неконтролируемую агрессию с моей стороны – я его просто отключаю. Но есть один существенный недостаток – продукт платный. Также на помощь может прийти MMX (http://www.modelmakertools.com/code-explorer/index.html). Вначале он вызывает непонятные чувства, но потом помогает находить спорные участки кода, сортировать процедуры, управлять комментариями к процедурам. ВыводИспользуя рефакторинг, вы можете дать своему продукту вторую жизнь. Но также он очень помогает ускорить процесс написания кода, ведь вначале можно написать, потом улучшить. Конечно, откровенно неверный код рефакторинг не улучшит, но работающий код в руках опытного программиста может превратиться в красивый и легкосопровождаемый. Если вас заинтересовала эта тема и вы хотите узнать о рефакторинге больше – поищите книги/статьи Мартина Фаулера. Разделы: Статьи | Компоненты | Plug-in's | Документация | Исходники | Программы | Игры | Изображения Уважаемые читатели! Отправляйте полезные компоненты/модули, исходники, собственные программы/игры, документацию - книги, учебники и они будут размещены на сайте.
Ведущий раздела: Bruder Если бы WINDOWS была написана в Одессе... 1. После загрузки Windows появляется надпись "Таки я загрузилась!" и в течение 15 минут играет мелодия "Семь сорок", которую нельзя ни приостановить, ни отменить. 2. При нажатии на клавишу «Старт» появляется сообщение "Ну, шо ты тут клацаешь, пошел бы лучше в футбол поиграл...". 3. Клавиатурный драйвер автоматически преобразовывает букву "г" в букву "х", а букву "ч" в букву "ш". 4. При открытии нового документа по умолчанию ему присваивется название "Шоб ты был здоров.doc". 5. При подсоединении к Интернету появляется надпись: "Шо ты занимаешь линию? А вдруг мама позвонит?" 6. При открытии любой папки или файла появляется предупреждающее сообщение: "И оно тебе туда надо?" 7. При инсталяции любой программы появляется сообщение: "Ну и куда ты собираешься писать, поц? Ты купил новый харддрайв?" 8. Размеры файлов указываются с точностью до бита, а вместо таймера в панели встроен счетчик потребления электроэнергии за время работы компьютера. 9. При вызове справочной системы всегда появляется инструкция по приготовлению фаршированной рыбы. 10. Каждые 30 минут автоматически включается screensaver с надписью: "Ой-вей, я устала..." :)) Присылайте компьютерные анекдоты, рассказы и истории по этой ссылке и они будут опубликованы в ближайших выпусках рассылки. WWW: http://www.delphi.int.ru/ E-mail: admin@delphi.int.ru; support@delphi.int.ru
Архив рассылки: http://subscribe.ru/archive/comp.soft.prog.delphifaq Ведущий рассылки: Ерёмин Андрей
|
В избранное | ||