Опубликован: 25.06.2014 | Уровень: для всех | Доступ: платный | ВУЗ: Учебный центр "ANIT Texno Inform"
Лекция 4:

Основы кода

< Лекция 3 || Лекция 4: 12 || Лекция 5 >
Аннотация: Эта лекция посвящена основам кодирования на Паскале. Рассмотрены такие понятия, как Типы данных, Переменные, Константы, Комментарии, Значения, Выражения, Ключевые слова и так далее. Для закрепления материала приводятся подробные практические примеры по темам лекции.

Цель лекции

Знакомство с типами данных. Применение переменных, констант, комментариев.

Типы данных

Наверное, вы понимаете, что умение пользоваться компонентами - это еще не программирование? Разработка пользовательского интерфейса - настройка формы, размещение на ней компонентов, организация меню, придание всему этому привлекательного вида и удобства использования - всё это, скорее, дизайн. Программирование - это знание языка, умение писать исходный код. Этим мы сегодня и займемся.

Любые данные, которыми приходится оперировать программисту, имеют свой тип. Паскаль, который лежит в основе многих языков и сред разработки, в том числе и в основе Lazarus, отличается более строгими правилами использования данных различного типа. В частности, в Паскале любую переменную любого типа нужно предварительно объявить - указать имя переменной и ее тип, присвоить начальные значения (во многих других языках переменная объявляется прямо там, где она потребовалась, а в некоторых языках обходятся и вовсе без объявления и указания типа). Всё это приучает программиста к более качественному стилю программирования, делает программу более читаемой и понятной компилятору.

В Паскале существует всего несколько стандартных типов, с которыми может работать программист:

  • Целые числа (числа без запятой: 5; -12; 0)
  • Вещественные числа (числа с запятой: 5,3; -3,14; 0,0)
  • Символы (отдельные буквы или другие символы: "Б", "z", "&", "/")
  • Строки (группы символов: "Это строка", "This is a text")
  • Логический тип (может принимать значение либо Ложь - False, либо Истина - True)

Lazarus основан на Object Pascal, который имеет множество дополнительных типов данных. Например, тип Дата-Время, коллекции строк, файлы, записи, классы и так далее. Со многими типами мы будем знакомиться в течении курса, в порядке возрастания сложности материала.

Элементы программы

Программа на языке Object Pascal может содержать следующие стандартные элементы:

  • Служебные (зарезервированные) слова
  • Идентификаторы
  • Типы
  • Переменные
  • Константы
  • Комментарии
  • Метки
  • Подпрограммы

Служебные (зарезервированные) слова - это такие слова, которые являются частью языка и применяются для обозначения различных инструкций или элементов программы. Примеры служебных слов: as, class, if, for, var, array, unit, interface, uses.

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

Идентификаторы - это слова (имена), которыми программист обозначает любой другой элемент языка, кроме служебных слов, комментариев и собственно, идентификаторов. Например, когда мы даем имя переменной или константе, мы идентифицируем ее.

Правило. Для идентификаторов разрешено использовать только символы латинского алфавита, цифры и знак подчеркивания. Причем первым символом идентификатора не может быть цифра. Строчные и заглавные символы не различаются, то есть myvar, MyVar и MYVAR - это один и тот же идентификатор.

Примеры правильных идентификаторов:

  • MyVar
  • _perem
  • a2
  • MinimalnayaZarplata

Примеры неправильных идентификаторов:

  • Зарплата (не латинские символы)
  • 2a (первый символ - цифра)
  • My perem (в идентификаторе неразрешенный символ - пробел)

Типы - это специальные конструкции языка, указывающие компилятору, сколько памяти нужно зарезервировать для объявляемого элемента, например, переменной, массива, константы. Типами могут быть стандартные типы Паскаля, расширенные типы Объектного Паскаля или типы данных, объявленные пользователем. Мы будем знакомиться с разными типами данных на протяжении всего курса.

Примеры типов: integer (целое число), real (число с запятой), string (строка) и т.п.

Переменные

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

Все данные, с которыми работает программа, располагаются в ОЗУ (Оперативное Запоминающее Устройство, Оперативная память) компьютера. Когда пользователь загружает программу, то в оперативную память считываются все инструкции программы и данные, которые в ней используются. Данные располагаются в памяти по различным адресам, которые фактически, представляют собой цифры. Так, первый байт памяти располагается под номером 1, второй под номером два и т.д. Однако не все данные занимают только один байт, есть и двухбайтовые, и четырехбайтовые данные, и даже больше. Именно поэтому так важно указывать тип данных - компилятор должен знать, сколько байт в памяти будет занимать ваш элемент, сколько места ему нужно выделить. Допустим, нам нужен некий элемент данных в 2 байта, и компьютер поместит его в ОЗУ по адресу, например, 1000000. Значит, когда потребуется узнать содержимое этого элемента, компьютер должен обратиться к ячейке памяти под номером 1000000, и считать оттуда два байта.

В процессе работы программы эти данные могут меняться. Поэтому нам нужен некий контейнер, ящик определенного размера, где мы будем хранить данные. Эти данные будут меняться, а адрес ящика в памяти останется неизменным, пока работает наша программа. Такой ящик и называется переменной - элементом, чьи данные могут меняться. Итак,

Переменная - это ячейка оперативной памяти, которая занимает соответствующее её типу количество байт. Данные в этой ячейке могут меняться, а адрес размещения в ОЗУ остается неизменным, пока работает программа.

Чтобы программист не мучался с адресацией этих ячеек, в Паскале переменным присваивается имя - идентификатор. Когда мы объявляем переменную с определенным именем, компьютер запоминает это имя и ассоциирует его с реальным адресом в памяти, и количеством занимаемых переменной байт. А когда мы считываем данные переменной MyPerem, то компьютер сам находит нужный участок памяти и считывает оттуда нужное количество байт.

Переменные объявляются в разделе var (англ. variable - переменная). Объявление имеет следующий синтаксис (конструкцию):

var
   Имя_перем_1: Тип_1;
   Имя_перем_2: Тип_2;
   …
   Имя_перем_n: Тип_n;
    

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

var
   перем_1, перем_2,… перем_n: Тип;
    

Объявление переменных в разных строках - это не правило языка, всё описание можно уместить и на одной строке:

var перем_1: Тип_1; перем_2: Тип_2;
    

Но такой код будет сложно читать, он труден для восприятия. Поэтому предыдущие примеры все же предпочтительней, когда каждый оператор описывается на своей строке, программа становится более "читабельной".

Совет. Давайте переменным и другим элементам и конструкциям, которые вы описываете, осмысленные имена, а не просто непонятные наборы символов!

Например, если мы хотим хранить в переменной минимальную заработную плату, то разумно назвать такую переменную MinZarPlat, для переменной с вашим именем - MyName или MoeImya - зависит от вашей фантазии, лишь бы вам самим было понятно, для чего вы вообще создавали эту переменную. Ведь это только поначалу вы будете помнить, что за переменные вы используете. А если вы откроете свой проект через год? Или его откроет ваш друг или коллега? Что хранится в переменной a? Для чего создана переменная d3? Такие непонятные идентификаторы затрудняют восприятие программы и категорически не рекомендуются к использованию.

Исключение могут составить переменные, которые обычно создаются в качестве счетчиков для циклов, например, или для каких-то коэффициентов. Такие переменные традиционно называют i, k, l (или др. символами английского языка).

Давайте попробуем использовать переменные на практике. Откроем второй проект из второй лекции, тот, где пользователь вписывает свое имя, а программа выводит ему приветствие. Если вы следовали моим рекомендациям, у вас этот проект должен храниться по адресу:

C:\Education\02-02\

Загрузите файл проекта Hello.lpi - это приведет к загрузке Lazarus и открытию в нем данного проекта. На переднем плане должен оказаться Редактор кода (если это не так, нажмите <F12>, чтобы переключиться с формы на код). Вы можете сразу заметить, что одна переменная у нас уже объявлена:

Переменная fMain

Рис. 4.1. Переменная fMain

Вот ведь любопытно: у нас есть форма fMain, да еще и переменная с таким же именем! Дело в том, что компилятор FPC рассматривает нашу форму, как переменную. Обращение к этой переменной - это обращение к самой форме.

Теперь опустим курсор до обработки события нажатия на кнопку Button1 и немного изменим код этого события:

Новый код события OnClick кнопки Button1

Рис. 4.2. Новый код события OnClick кнопки Button1

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

procedure TfMain.Button1Click(Sender: TObject);
var
  MyName: String;
begin
  MyName:= 'Привет, ' + Edit1.Text + '!';
  ShowMessage(MyName);
  MyName:= 'Рады вас видеть, ' + Edit1.Text + '!';
  ShowMessage(MyName);
end;
    

Как видите, здесь мы использовали переменную MyName с типом String (строка). Мы дважды присваивали ей разные значения, а затем считывали их, чтобы вывести в сообщении. Где именно нужно объявлять переменные, мы поговорим в "Числа" (Подпрограммы), там же обсудим такое важное понятие, как область видимости переменной. Пока лишь учтите, что при использовании событий, переменные нужно объявлять до служебного слова begin, а использовать саму переменную нужно после этого служебного слова.

< Лекция 3 || Лекция 4: 12 || Лекция 5 >
Инга Готфрид
Инга Готфрид
Александр Скрябнев
Александр Скрябнев

Через WMI, или используя утилиту wmic? А может есть еще какие более простые пути...

Нина Фисенко
Нина Фисенко
Россия, Саратов, Саратовский государственный университет им Чернышевского, 1972
Галина Талисман
Галина Талисман
Россия