Уроки Дельфийского. Часть 3
В третьей, заключительной, части уроков (см. первую и вторую части) я расскажу о функциях и процедурах, их отличиях и применении. Но для начала мне хотелось бы обратить ваше внимание на несколько моментов, упущенных мной в первых двух частях «Уроков». Во-первых, этот цикл ориентирован прежде всего на людей, изучавших в школе/институте Pascal и немного знакомых с его синтаксисом. Во-вторых, основная задача, которую я ставил перед собой при написании «Уроков», — познакомить людей, все ещё использующих старые среды разработки, с преимуществами объектно-ориентированного программирования. Надеюсь, теперь всем всё понятно… Если так, то я, с вашего разрешения, начну урок.
Ну что, ещё не все разбежались? Надеюсь, вы уже поняли, что изучение любого языка программирования — занятие столь же увлекательное, сколь и сложное. В рамках данного цикла я физически не могу рассказать всего, поэтому рекомендую прикупить какую-нибудь книжку. Вы этого ещё не сделали? Тогда бегом в магазин или к знакомому программисту! «Мегабайт» не резиновый, и я не могу рассказать на его страницах всё, что касается Delphi (да это и на страницах книги сделать затруднительно). Я бы порекомендовал учебники по Delphi под редакцией Фаронова или же книги «Программирование на Delphi» из серии «Учебный курс». Впрочем, выбор за вами. Ну а я тем временем продолжу…
Как и было обещано, третий урок будет посвящён методам разбиения кода на логические фрагменты — функции и процедуры.
Собственно говоря, с процедурами мы уже познакомились (а вы и не заметили?), поскольку обработчики, созданные нами для пунктов меню во втором уроке были именно процедурами (о чём легко можно догадаться по служебному слову procedure). Но процедуры можно создавать и самостоятельно. Зачем? Во-первых, в виде процедур очень удобно оформлять повторяющиеся фрагменты кода, а во-вторых, упорядоченный таким образом код впоследствии будет удобнее читать и/или вносить в него изменения. Например, вы хотите, чтобы диалог открытия файла появлялся не только при выборе пункта меню, но и при нажатии на кнопку панели инструментов. Что делать? Писать код в двух разных обработчиках? Нет! В таком случае удобно создать процедуру вида:
procedure TForm1.OpenFile;
begin
if OpenDialog1.Execute then
begin
Editor.Lines.LoadFromFile(OpenDialog1.FileName);
end;
end;
Помните, что просто написать процедуру недостаточно, её нужно «объявить», то есть внести в специальный список процедур. Это нужно для того, чтобы Delphi всегда знала, какие процедуры ей доступны. Объявить процедуру очень просто: найдите в начале программы служебное слово private и добавьте сразу после него строку:
procedure OpenFile;
Если вы используете Delphi 2005, то для объявления процедуры вам достаточно написать саму процедуру и нажать комбинацию [Shift]+[Ctrl]+[C].
После этого вашу процедуру можно будет вызвать всякий раз, когда это нужно. Например, в обработчике для пункта меню во втором уроке можно заменить непосредственный вызов диалога на вызов нашей процедуры:
procedure TForm1.N2Click(Sender: TObject);
begin
OpenFile;
end;
При необходимости внутрь процедуры можно передавать различные переменные. В таком случае процедура будет выглядеть, например, следующим образом:
procedure TForm1.OpenFile(Filter: string);
begin
OpenDialog.Filter:=Filter;
if OpenDialog1.Execute then
begin
Editor.Lines.LoadFromFile(OpenDialog1.FileName);
end;
end;
А вызов при таком раскладе может выглядеть, к примеру, так:
OpenFile(‘Текстовые документы;*.txt’);
На этом я, пожалуй, закончу рассказ про процедуры в Delphi. Дальнейшую информацию вы можете почерпнуть из книг.
Функция отличается от процедуры тем, что всегда возвращает какой-нибудь результат. Кроме того, она может использоваться в выражениях. Рассмотрим простейший пример:
function Summa(A: integer, B: integer): integer;
begin
result:=A+B;
end;
Как видите, описание функции начинается со служебного слова function, далее в скобках указываются входные переменные и их типы, а завершает описание тип результата, возвращаемого функцией. В теле функции вы можете совершать с входными переменными какие-либо действия, после чего должны присвоить виртуальной переменной result конечный результат.
Например, вызов описанной выше функции вот таким образом:
S:= Summa(6, 7);
приведёт к тому, что переменной S будет присвоено значение 13.
Использование функций имеет те же самые достоинства, что и использование процедур, то есть сокращение и упорядочение кода. Только функции, в отличие от процедур, обычно используются для обработки каких-либо данных, а не для совершения действий с компонентами или интерфейсом.
Вот и всё, что я хотел рассказать в сегодняшнем уроке. Надеюсь, вы всё поняли. Если что-то неясно — пишите мне и/или читайте книги.
На этом я завершаю свои «Уроки», но не прощаюсь с начинающими (и не очень) программистами. В дальнейшем я буду рассказывать вам о наиболее интересных, на мой взгляд, алгоритмах, компонентах и обо всем, что касается Delphi. Также вы можете присылать мне свои вопросы, и я постараюсь по мере моих возможностей отвечать на них.