Введение в программирование на Delphi

Переменные

Показывать лекцию целиком

В любом языке программирования приходится использовать переменные. При загрузке программы, компьютер вначале считывает все необходимые данные в оперативную память, после чего уже имеет возможность работать с ними. Переменнаяэто ячейка оперативной памяти, которая может хранить данные какого-то одного типа. Переменная похожа на ячейку в MS Excel, там тоже в ячейке можно указать нужный формат данных. Если переменная имеет тип данных "строка", то в нее нельзя записать число. А в переменную с типом "целое число" нельзя записать вещественное число. В языках программирования вещественным называют число, у которого есть запятая, после которой имеются цифры, хотя бы нули:

125,00
348,24

Каждая переменная имеет уникальное имя. Для компьютера имя переменной – это адрес ячейки памяти, где хранятся данные. Присваиванием имен (идентификаторов) переменным занимается программист. Имена переменным в Delphi даются по определенным правилам:

  • Имя переменной может содержать любое количество английских букв, цифр и знака подчеркивания, другие символы недопустимы.
  • Первым символом обязательно должна быть буква или знак "_" (подчеркивание).
  • В Delphi нет разницы, какие буквы вы даете переменным – большие или маленькие. То есть, myperem, MyPerem, MYPEREM – это одна и та же переменная.
  • Совет: Переменную можно назвать одной буквой. Однако уже через месяц или раньше вам очень трудно будет вспомнить, зачем вы делали переменную F, и какие данные в ней хранятся. Поэтому старайтесь давать переменным осмысленные имена и сочетайте большие буквы с маленькими для разделения на слова. Хорошие примеры – MinZarplata или Glav_Param.

    Типы переменных

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

  • Объявление переменной (указываем имя и тип переменной ). Переменная объявляется в специальном разделе var (позже мы познакомимся с этим разделом).
  • Присвоение переменной какого-то значения.
  • Объявление переменной выглядит так:

    var
       Peremennaya1 : Real;
       Peremennaya2, Peremennaya3 : Integer;

    Как видно из примера, вначале указывается имя переменной, затем, после двоеточия указывается тип переменной. Если нужно объявить несколько переменных одного типа, их имена разделяются запятыми. В приведенном примере мы объявили одну вещественную переменную типа Real и две целые переменные типа Integer.

    Присваивать значение переменным можно неоднократно. Переменная потому и называется так, что ее значение в процессе работы программы может меняться. Оператор присвоения значения выглядит так:

    :=

    Примеры присвоения значений переменным:

    A := 10; 
    B := 20.35; 
    C := 'Это строка'; 
    D := True; 
    A := 3+5-1;

    Механизм присвоения значения работает следующим образом: вначале рассчитывается значение в правой части команды, то есть, после знака " := ". Затем результат этого значения записывается в переменную. В последней строке примера мы использовали выражение "3+5-1". Вначале получается результат, в нашем случае он равен 7. Затем этот результат записывается в переменную.

    В дальнейшем, имя переменной можно использовать в различных выражениях, например:

    A1 := 3;
    A2 := A1 + 7;
    A1 := A1 + 1;

    В первой строке мы записали в переменную число 3. Вторая строка содержит выражение, результатом которого будет число 10. А вот третья строка интересней. Как вы полагаете, что будет записано в переменную A1? Если ваш ответ 4, вы совершенно правы: вначале рассчитывается результат правой части команды, где в переменной A1 еще старое значение, затем он записывается в эту же переменную, изменяя ее значение.

    В таблице 2.1 перечислены основные типы переменных:

    Название типа Описание Пояснения
    Integer Целое число Переменная может содержать только целые числа, как со знаком, так и без знака.
    Real Вещественное число Переменная может принимать в качестве значения целые и дробные числа, со знаком и без знака.
    String Строка Переменная может хранить любые символы и наборы символов. В переменную String можно записать до 2 Гб символов.
    Boolean Логический тип Булева переменная, может быть либо False (Ложь), либо True (Истина).

    На самом деле, типов переменных значительно больше, и по мере усложнения программ мы будем изучать эти типы. В таблице представлены только основные типы.

    Строки

    С этим типом переменных приходится работать довольно часто. В примере выше мы указывали строку 'Это строка', а в прошлой лекции имели дело со строкой 'Hello, world!'. Вы уже заметили, что все строки должны быть заключены в одинарные кавычки. Размер строки практически не ограничен. Вы можете записать в строку любой текстовый файл, все зависит от того, сколько места есть у Вас на диске, и какой объем ОЗУ у Вас установлен.

    Изучать новое удобней сразу на практике, поэтому запускайте Delphi. Автоматически должен создаться новый проект. Напишем простенькую программу, в которой поработаем со строкой. Все компоненты, которые нам для этого понадобятся, находятся на вкладке Standard Палитры компонентов.

    Поместите на форму, один под другим, следующие компоненты:

    Label, Edit и Button. С Label и Button вы уже знакомы по прошлой программе – Label это простая надпись, а Button – кнопка на форме. Компонент Edit представляет собой поле для ввода пользователем какого-то значения, какой-то строки.

    Растяните компонент Edit, сделав его примерно вдвое длинней.

    Выделите компонент Label (одним нажатием мыши!), и в его свойстве Caption вместо "Label1" впишите "Как твое имя?".

    Теперь выделите компонент Edit, и удалите "Edit1" из свойства Text, оставив там пустое поле. Свойство Text этого компонента содержит тот текст, который в данный момент находится в поле ввода. Вообще, со свойствами компонента можно обращаться, как с переменными. В большинство свойств можно заносить значения не только в Инспекторе объектов, в момент разработки формы, но и во время выполнения программы.

    Выделите кнопку, и в ее свойстве Caption напишите "Нажми меня!". Для красоты, переместите ее в центр формы.

    Измените размер формы, чтобы на ней не было много пустого места. А также в свойстве Caption формы напишите "Приветствие". Напомним, чтобы выделить форму, нужно один раз щелкнуть мышью по любому свободному месту формы. Если вы все сделали правильно, у вас должна получиться такая форма:

    (рис 2.1) Внешний вид формы

    Теперь создадим обработчик события для кнопки. Для этого дважды щелкните по кнопке, которую вы разместили на форме. Сразу же вы попадаете в Редактор кода, и курсор мигает между строками begin и end. Begin – это начало процедуры, после него точка с запятой не ставится. End – конец процедуры, после этого оператора точка с запятой обязательна. Если вы присмотритесь, то в последней строке редактора кода увидите end с точкой – это конец программы. Переменные указываются (описываются) перед началом процедуры. Следовательно, строку begin нужно будет опустить, а перед ней вписать раздел переменных var, и указать переменную s. Процедура должна выглядеть так:

    procedure TForm1.Button1Click(Sender: TObject);
    var
      s: String;
    begin
      s:= 'Привет, ' + Edit1.Text + '!';
      ShowMessage(s);
    end;

    Обратите внимание, что когда вы поставите точку после названия компонента Edit1, выйдет список доступных свойств, методов и событий. Когда мы впишем первую букву "T", список сортируется – в нем останутся только команды на букву "T", причем Delphi оценивает контекст, и оставляет в списке только те команды, которые в этом контексте могут быть использованы. В нашем случае, это строка. Свойство Text, которое останется в списке, может быть использовано в качестве строки:

    (рис 2.2) Выбор свойства из списка – подсказки

    Теперь нет нужды вводить "Text" самим – это свойство выделено в списке, и нам достаточно нажать <Enter>, чтобы вставить его в код. На будущее запомните: всегда, когда вы ставите точку после названия компонента, дождитесь такого списка. Дело не только в том, что так легче вводить код. Если список так и не появился, значит вы допустили ошибку. Возможно, в названии компонента, или даже в предыдущей строке.

    Теперь сохраните проект в отдельную папку, модуль, как обычно, назовите Main, а проект можете назвать, например, Privet. После сохранения скомпилируйте его и посмотрите, какое сообщение будет выходить при различных строках, которые введет пользователь в поле ввода Edit1.

    Справедливости ради стоит заметить, что в данном примере вовсе необязательно было использовать переменную – мы это сделали лишь в учебных целях. Такого же эффекта можно было добиться, если использовать выражение

    'Привет, ' + Edit1.Text + '!'

    прямо в команде ShowMessage:

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ShowMessage('Привет, ' + Edit1.Text + '!');
    end;

    Стиль

    Если вы надумаете пойти устраиваться на работу программистом, первым делом вас попросят показать ваши исходные коды. И дело тут вовсе не в том, что кто-то хочет украсть вашу программу, чтобы потом выдать ее за свою. Понимающие люди в первую очередь смотрят на стиль оформления кода. Давайте рассмотрим предыдущий пример:

    procedure TForm1.Button1Click(Sender: TObject);
    var s: String; begin s:= 'Привет, ' + Edit1.Text + '!';  ShowMessage(s); end;

    Такой код вполне работоспособен, однако выглядит он не очень "читабельно", в нем легко запутаться. Посмотрите такой пример:

    procedure TForm1.Button1Click(Sender: TObject);
    var
    s: String;
    begin
    s:= 'Привет, ' + Edit1.Text + '!';
    ShowMessage(s);
    end;

    Уже лучше, не правда ли? Каждая команда располагается на своей собственной строке, читаемость кода стала намного легче. Однако в таком коде сразу сложно разобраться, где заканчивается один раздел и начинается другой. Классический стиль требует, чтобы вложенные команды выделялись несколькими пробелами, сдвигались вправо:

    procedure TForm1.Button1Click(Sender: TObject);
    var
       s: String;
    begin
       s:= 'Привет, ' + Edit1.Text + '!';
       ShowMessage(s);
    end;

    Такой код читать еще легче. Старайтесь сразу привыкать к такому стилю, чтобы не только другим было легко читать ваш код, но и вы сами не запутались в нем. Позднее мы еще вернемся к стилям программирования.

    Комментарии

    Комментарий – это текст, который программист в качестве подсказки вписывает для себя. Компьютер такой текст игнорирует, он нужен только для вас. При компиляции все комментарии просто вырезаются. В хорошем коде комментариев должно быть не менее трети от всего размера кода. Когда Вы будете делать большие проекты, без комментариев не обойтись. Уже через месяц, открыв исходный код большой программы, будет очень сложно вспомнить, что тут к чему, и как работает, поэтому не скупитесь на комментарии!

    Комментарии бывают многострочные и однострочные. Многострочный комментарий заключается в фигурные скобки, и в этих строках не должно быть действующих операторов. Пример:

    {Это многострочный
       комментарий!}

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

    Однострочный комментарий ставится после символов "//", то есть двух слэшей. Этот комментарий может находиться как на отдельной строке, так и после (но не до!) оператора. Примеры:

    //комментарий на отдельной строке
    a := "Действующий оператор";  //комментарий после оператора

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

    Собственный Блокнот

    Каждый пользователь, работающий с Windows, хоть раз да использовал простой текстовый редактор Блокнот. Сейчас мы создадим немного упрощенную версию Блокнота, которая позволяет вводить текст, сохранять его на диск, и загружать с диска. Для этого нам требуется создать новый проект. Если в данный момент у вас уже открыт какой либо проект, выберите команду меню "File – Close All (Файл – Закрыть всё)", затем "File – New – Application (Файл – Новое – Приложение)".

    У нас есть новая форма, и пока больше ничего нет. Сразу изменим некоторые свойства формы. В свойстве Caption впишите "Мой блокнот" (естественно, без кавычек). Свойство Name изменим на "fMain".

    Совет: чтобы легче ориентироваться в названиях модулей (файлов с кодом) и форм, лучше сразу выработать правила:

  • Перед названием формы будем указывать маленькую букву f, чтобы показать, что это именно форма.
  • Имена форм будем подбирать информативные, чтобы было понятно, с какой формой мы имеем дело.
  • Модули форм будем называть так же, но без буквы f.
  • Главную форму всегда будем называть fMain, а модуль, соответственно, Main.
  • Эти рекомендации не являются обязательными, но в дальнейшем, когда пойдут проекты с множеством форм, они помогут вам ориентироваться в названиях. Можете выработать собственные правила.

    Сохраним проект в отдельную папку. Модуль называем Main, а проекту даем имя MyNotebook.

    Теперь познакомимся с новым, мощным компонентом Memo, который находится на вкладке Standard и предназначен для ввода пользователем многострочного текста.

    Установите этот компонент на форму, в верхнюю левую часть формы, и растяните его по форме, оставив внизу немного места. Вниз установите, одну рядом с другой, три кнопки Button. У вас должно получится что-то вроде этого:

    (рис 2.3) Заготовка редактора текстов

    Теперь выделим первую кнопку, и в свойстве Caption этой кнопки напишем "Сохранить". На второй кнопке напишем "Загрузить", на третьей – "Очистить".

    Выделим компонент Memo, который представляет собой большое белое поле. У компонента есть одно интересное свойство Lines, которое содержит строки текста, набранного в компоненте. Подробней с этим свойством мы познакомимся позже, а пока выделим его в Инспекторе объектов, нажмем на кнопку с тремя точками справа от свойства и тем самым откроем редактор текста. Здесь можно набрать текст, который будет выведен в компонент "по умолчанию", при каждой загрузке программы. Нам как раз нужно, чтобы текста никакого не было, поэтому удалите все строки, какие там есть и нажмите "ОК". Компонент Memo очистился.

    Это еще не все. Нам нужно, чтобы при вводе текст автоматически переносился на другую строку, а пользователь имел возможность его пролистывать. Найдите свойство ScrollBars (компонент Memo должен быть выделенным), это свойство отвечает за наличие полос прокрутки. Выберите значение ssVertical, чтобы появилась вертикальная полоса прокрутки.

    С интерфейсом покончено, осталось вписать код, который будет выполняться программой. Дважды нажмем на первую кнопку, создадим обработчик события для кнопки "Сохранить". В месте, где мигает курсор, впишем только одну строку:

    Memo1.Lines.SaveToFile('MyFile.txt');

    Метод SaveToFile() свойства Lines компонента Memo сохраняет весь текст в указанный файл. Если вы не указываете путь к файлу, по умолчанию файл будет создан там, откуда была запущена программа.

    Для второй кнопки напишем две строки:

    if FileExists('MyFile.txt') then
        Memo1.Lines.LoadFromFile('MyFile.txt');

    Разберем эти строки. Что, если пользователь нажмет эту кнопку до того, как что-нибудь сохранит в файл? Файла еще нет! Первая строка как раз выполняет проверку на существование файла. Если файла нет, то вторая строка выполняться не будет. Если он есть, тогда вторая строка считает текст из этого файла в компонент Memo. С условными операторами мы будем знакомиться позже, тогда смысл первой строки будет понятней.

    Для третьей кнопки код еще проще:

    Memo1.Clear;

    Эта команда очищает компонент Memo от текста. Вот, собственно, и вся программа. Сохраните ее и скомпилируйте, проверьте, как она работает. Оцените легкость программирования – для создания полноценного редактора текстов мы написали всего 4 строки кода!

    Поэкспериментируйте со свойством Font (Шрифт) компонента Memo, посмотрите, каким образом будет изменяться шрифт текста.

    Вернуться к учебному плану