Основные типы переменных: формализация данных

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

Естественные информационные элементы

В мире реальной информации нет переменных, но существуют, образно говоря, описания объектов. Что понимать под объектом, часто зависит не от его описания, а от ситуации, в которой произошла «концентрация» информации и появился ее потребитель.

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

Школьная тетрадка: своя кодировка
  • для продавца – это стоимость, количество и учет продаж;
  • для покупателя – это качество бумаги, изготовитель и возможности: для математики или для письма.

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

Любая бухгалтерская или управленческая задача в естественном мире ставится предельно четко и понимается как постановщиком, так и исполнителем. Вопрос, что уровень понимания может различаться – деталь. Задача есть, и как ее поставить - вопрос не сложный. Но вот как запрограммировать задачу? Тут действительно есть над чем подумать.

Формализация данных: «Паскаль»

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

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

Формализация данных

Как описание, так и обработка данных – это требование предельной точности и никакой неопределенности. Профессиональные и популярные языки имели кроме очевидных вариантов представления естественных данных, вымышленные, но удобные для обработки.

Например, «Паскаль» предлагал:

  • byte – целое (0..255);
  • boolean – логическое (по сути, фикция, но размером в 1 байт);
  • word – целое (0..65535);
  • integer – целое число (-32768..32767);
  • real, single, double - вещественное число;
  • char - символ и др.

Кроме того, программист мог использовать перечислимые, интервальные и структурные типы переменных.

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

Формализация данных: С/С++

Разработчики С/С++ пошли значительно дальше. Здесь не только вариантов описания одного типа integer ровно столько, сколько в «Паскале» всего описаний, но и операции с указателями (адресами на переменные) гораздо сложнее.

Формализация: С/С++

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

По описаниям: тип, значения, переменная. По каждой конструкции обработки, например, циклов было ровно столько, сколько есть вариантов проверки условия выхода. Операторы условий (if) и ветвления (switch/case) были жестко определены.

В конечном счете все это привело к кардинально разным противоположностям:

  • C# - одна идея: точно описано, правильно исполнено;
  • JavaScript & PHP (и им подобные) – вторая идея: «полная» свобода описаний.

Обе идеи прекрасно уживаются в современном динамичном мире и имеют достаточное количество благодарных разработчиков.

Байты, слова и указатели

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

Байты, слова и указатели

Описатели byte & boolean – близнецы братья. Очень выгодно при кодировании работать с байтами. Причем есть шикарные операции сдвига влево и вправо, а байт состоит из восьми бит. Это очень практичные описания типов данных. Переменные могли свободно управлять ветвлениями, циклами, счетчиками.

Перемещение единички по позициям в байте – очень востребованный метод управления исполнением кода.

Указатели – это первая реальная возможность сделать код динамичным. Это призрачная динамика: посредством указателя можно было перемещаться по переменным, не обращая внимания на их описанный тип.

Можно сказать, что период жесткой формализации позволил понять, что и как хотят сделать разработчики С#, чего и зачем добиваются сторонники JavaScript & PHP.

Базы данных: запрос – это строка символов

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

В любой базе данных есть:

  • целое число;
  • вещественное число;
  • логический тип;
  • строка фиксированная;
  • строка переменная.

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

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

Базы данных: запрос - это смысл и совокупность типов

Если рассматривать запрос (на PHP), то в некотором смысле это переменная целого типа. Когда запрос уходит на исполнение он дает целочисленное значение, по которому можно получить выборку или результат операции.

Запрос на выборку

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

  1. $cQuery = "delete from `ex_owners`"
  2. $cMySQL = mysqli_query($this->iConnectId, $cQuery)

Первая строка – это текст запроса, вторая исполнение запроса. Какое значение получит переменная $cMySQL, или какой будет у нее тип - мало интересно.

  • $cQuery = "create table if not exists sc_bees_1990 (";
  • $cQuery .= " oj_owner char (20), "; // код владельца
  • $cQuery .= " oj_code char (20), "; // код экземпляра
  • $cQuery .= " oj_name char (244), "; // имя объекта
  • $cQuery .= " oj_line int (3), "; // номер строки объекта или 0
  • $cQuery .= " oj_store varchar (18000),"; // тело объекта
  • $cQuery .= " oj_status char (200)) "; // статус,
  • $cMySQL = mysqli_query($this->iConnectId, $cQuery);

Это более практичный запрос – создание таблицы. Но здесь также не интересно ни значение, ни тип $cMySQL.

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

В данном случае (на PHP), совершенно не важно, как и когда была описана переменная $cQuery, но крайне важно описание типов внутри нее. PHP очень тесно связан с базой данных MySQL, и посредством запросов могут создаваться таблицы просто как списки переменных, потом удаляться или читаться.

Так что где, что и как описал программист – это вопрос алгоритма и решаемой задачи.

Кодировка строк

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

Кодировка символов

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

Например, идет заполнение товаром интернет-магазина. Бухгалтер может ошибиться, или программист может предусмотреть переход из одного режима ввода в другой по изменению типа переменной. Закончился ввод цен, и пришла команда на ввод изображений товара, но ввод осуществлялся в одном поле на стороне клиента.

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

Идеальная переменная

Современный мир программирования многообразен, но удивительно стабильно развивается. Интересен путь С# и идея JavaScript & PHP. Со всей определенностью нельзя сказать, что самая удобная и эффективная переменная – это последовательность информации, но строки импонируют многим, а используют их все.

Идеальная переменная

Такой же, как и речь (человек говорит и его понимают), должна быть и строка – она пришла и ее прочитали.

Что делать, есть проблемы кодировки и пока строка – это только символы и коды. Но быть может завтра будет строка – звук или видео. От современных технологий можно ждать неожиданностей.