Назад к списку статей

О типах данных, переменных и операции присваивания.



         (Как только вам что-то станет непонятно в этой статье
         закройте страницу и отвлекитесь, потом откройте ее
         и читайте сначала.)

     Человек привык мыслить образно. Мы все воспринимаем, как образы. Людей, вещи, звуки, запахи. Сравнивая эти образы с эталонами в нашей памяти мы их распознаем. Компьютерные устройства работают с числами, так как они цифровые устройства. Так как для простоты и надежности на компьютерах используется двоичная система чисел, то все числа в ней состоят из нулей и единиц.
     В технических устройствах при сохранении или использовании чисел в цифровом виде в качестве нулей и единиц используют, например, крошечные участки поверхности намагничивающегося материала дискет или жестких дисков, или наличие или отсутствие напряжения, или отражение или поглощение лазерного луча от поверхности компакт диска. Так и получают последовательность из нулей и единиц, то есть фактически данные в виде чисел.
     За базовую (основную) единицу информации принята комбинация из восьми таких элементов, которую называют байтом. Мы не можем заранее знать, что находится в каждом из этих элементов нуль или единица. Это означает, что если в комбинации все нули, значит это число ноль, а если все единицы - число 255. Выходит, что байт это ячейка памяти, в которой может храниться число от 0 до 255.  Хочешь узнать об этом подробнее: смотри файл О числах.

    
Итак, мы решили: компьютер использует только цифры, откуда берутся буквы? Просто, согласно договоренности между людьми, каждому числу соответствует символ, буква, цифра, знак препинания, или другой знак. Хочешь узнать подробнее об этом: смотри файл Кодировки текста.
.
     Поэтому, когда компьютер работает с данными (числами, находящимися в памяти), программа, а в конечном счете программист, определяет, как ему использовать эти данные, как числа или, как символы. Вот отсюда и появляется потребность сообщать компьютеру с какими данными он имеет дело. Зачем это нужно? А просто делать это по другому никто еще не придумал.
     Рассмотрим пример. В обычном BASIC-е есть два типа данных числовые и символьные. То есть если мы собираемся в программе что то складывать или умножать то нам потребуются числа. А где нам взять числа? А кто же нам их даст, мы сами должны создать их своими руками. Вот здесь настало время определиться с понятием переменная. Если вы собираетесь программировать (иначе зачем бы вы читали эти строки), то с этим фундаментальным понятием нужно разобраться досконально.
      Для того, что бы использовать в программах числовые и символьные данные мы просто должны отвести для них место в памяти и указать программе на это место если она захочет их использовать. Так вот, для работы с данными программы используют переменные, то есть величины, которые могут изменять свое значение. Любая переменная в любом языке программирования имеет три характеристики. Имя, тип, и значение.
     Имя - это название переменной, по которому к ней будет обращаться программа.
     Тип - указывает на то, какие данные в ней хранятся, например символьные или числовые.
     Значение - это то что конкретно хранится в этой переменной, например если это число, то может быть 10 или 0.55 или 100.25, а если символы то, например, буква А или слово РОССИЯ или слово Коля.
    Как мы можем видеть, для хранения разных данных требуется разное количество памяти, если это число 1, то, наверное, можно обойтись одним байтом (смотри выше). Если это символьные данные, еще это называют строкой, то для хранения этих данных может потребоваться много байт. Поэтому мы должны сказать программе: эта переменная, которую я назову вот этим именем должна будет хранить числовые данные, а эта символьные.
      В программной среде Qbasic мы можем это сделать так:
DIM A Аs Integer эта строка заставляет программу выделить память для хранения значения переменной с именем A числового целого типа. Или так
DIM M as String - здесь мы говорим компьютеру, чтобы он выделил память в которой будет храниться значение переменной с именем M символьного типа, еще говорят данные типа: строка (String) .
     Строка вида: DIM K As Integer - называется объявлением переменной, в данном случае числовой с именем K.
     В Qbasic в отличии от более ранних языков BASIC, (а было их великое множество и все друг от друга отличались, но несильно) появилась возможность объявлять переменные явно, как было показано выше. И в отличии от более ранних бейсиков ввели несколько новых (для BASIC) типов данных например: LONG, SINGLE, DOUBLE Это все числовые типы данных. Для чего это сделано?
    1. Для порядка. SINGLE и DOUBLE это уже обозначения для вещественных (реальных) чисел, то есть тех, которые могут иметь дробную часть. Чтобы программист знал: эти переменные хранят результаты расчетов. А числа имеющие тип INTEGER и LONG целые числа без дроби это например количество учеников, количество вагонов или длина строки символов. Ведь в этом случае число не может быть дробным.
   2. Для программы. Строгая типизация: указание на тип переменной при ее объявлении, позволяет программе рационально расходовать память, а еще предполагать, что если программист складывает целое и вещественное, то он знает что делает, потому, как результирующее число уже будет вещественным и использовать его можно только в этом качестве. Можно также его округлить или отсечь дробную часть, чтобы использовать его, как целое. А без этих мер применение результата арифметических операций нецелых чисел, например для выбора адреса в памяти может быть плачевным для программы и данных в памяти. В том смысле, что адрес может быть неприемлимым и программа зависнет, а значит результаты ее работы могут быть потеряны.
     Есть еще плюсы явного объявления переменных, но это уже мелкие подробности, а статья не об этом.

     Минус типизации один: сложности для начинающих программистов.
Рассмотрим простую задачу. Имеем число в памяти, нужно показать его на экране. Начинающий скажет: "Так для этого же есть PRINT в BASIC и WRITE() в Паскале. Это все, конечно, хороше, но, например число в памяти 47 в двоичной системе (101111), вы не задумывались, как из этой комбинации на экране возникнут два символа 4 и 7. И при всей кажущейся простоте это не очень простая задача. Специалисты говорят, что при выводе на экран происходит скрытое (неявное) преобразование данных одного типа в другой.
         Хочешь узнать подробнее об этом: смотри страничку с рассказом "Как я помогал Васе учить таблицу умножения" Она здесь.
      В Basic-программе кроме явного объявления типа переменной существует замечательная возможность объявлять тип неявно.
     Например, казалось бы, простая строчка Basic-программы Q$="Маша" на самом деле выполняет очень много полезных и нужных вещей.
    Во первых, выделяется память для символьной переменной,
    во вторых ей дается имя - Q$,
    в третьих этой переменной присваивается значение - Маша.
Программная среда Basic сама определяет тип переменной по данным, которые мы ей присваиваем.
Это называется: неявное объявление переменной 
    Например: A=5. В этом случае A - переменная числового типа. Но в случае A = "Ваня" - A уже символьная переменная.
    Для исключения путаницы раньше всегда в конец имени переменной добавляли идентификатор ее типа %- означало числовую переменную, а $ - символьную. Сейчас это правило часто игнорируется, а зря.
    В серьезной литературе имя переменной сейчас стали называть идентификатором, но как было сказано выше - раньше это имело другое значение.
    То есть идентификатор обозначал ее тип. Наверное поэтому, не проходит такая конструкция DIM Q$ As STRING, можно использовать DIM Q$ или DIM Q As STRING. В самом деле глупо говорить, что это масло и, к тому же, оно масляное.
       Попробуем рассмотреть в общем виде смысл операции присваивания, которая в BASIC выглядит, как A=10. Встретив такую конструкцию, программа где то в памяти компьютера отведет блок, на который будет указывать имя этой переменной - в данном случае A. В этот блок, размер которого определяется типом этой переменной: в данном случае числовым; поместит значение этой переменной: в данном случае число 10. Вдальнейшем, когда в программе встретится где-то в выражении или другой конструкции имя этой переменной то будет использоваться не символ A, а значение этой переменной, то есть число 10 на которое указывает имя переменной A.
 

      Хотелось кратенько пояснить, что такое тип данных и переменная, а получилась целая огромная статья, тема то очень интересная.