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

Поняття типу, як і, власне, змінної і її значення актуально для будь-якої мови програмування, системи управління базами даних, програмованих оболонок, і застосовуються в різних системних служби і сервіси. Багато розробники додатків і веб-ресурсів вводять свої описатели для типів змінних. Уявлення про базові типи актуальні, дозволяють уникнути помилок та побудувати ефективний алгоритм.

Природні інформаційні елементи

У світі реальної інформації немає змінних, але існують, образно кажучи, опису об’єктів. Що розуміти під об’єктом, часто залежить не від його опису, а від ситуації, в якій сталася «концентрація» інформації і з’явився її споживач.

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

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

Математики оперують формулами. Особливого значення функції і типи змінних не мають, але маються на увазі. Комплексне число ніколи не буває цілим або дробовим – воно буває лише комплексним. Його дві частини – це зовсім інше. Нескінченно мала величина або величина, що прагне до нескінченності, – теж абстракції природного типу.

Будь-яка бухгалтерська або управлінська завдання в природному світі ставиться гранично чітко і розуміється як постановником, так і виконавцем. Питання, що рівень розуміння може відрізнятися – деталь. Завдання є, і як її поставити – питання не складний. Але ось як запрограмувати завдання? Тут дійсно є над чим подумати.

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

Програмування сьогодні – це жорсткі конструкції. У багатьох сучасних мовах зовсім не обов’язково описувати типи змінних, а якщо і описати, то можна завжди автоматом перетворити їх в інший тип.

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

Як опис, так і обробка даних – це вимога граничної точності і ніякої невизначеності. Професійні і популярні мови мали крім очевидних варіантів подання природних даних, вигадані, але зручні для обробки.

Наприклад, «Паскаль» пропонував:

  • 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), то в деякому сенсі це змінна цілого типу. Коли запит йде на виконання він дає цілочисельне значення, за яким можна отримати вибірку або результат операції.

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

  • $cQuery = “delete from `ex_owners`”
  • $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, і за допомогою запитів можуть створюватися таблиці просто списків змінних, потім віддалятися або читатися.

    Так що де, що і як описав програміст – це питання алгоритму та задачі.

    Кодування рядків

    Сучасне програмування змушене рахуватися з усіма природними мовами і використовувати всі кодування, які задовольняють звичайні вимоги локалізації.

    Як текст коду програми може бути записаний в конкретній кодуванні, так і рядок бази даних може бути закодована інакше. Правильно визначити тип змінної, важливо не тільки з цієї точки зору. Як правило, не типізовані надають програмісту можливість створювати змінні на льоту.

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

    Обробник JavaScript в браузері працює в одному кодуванні, механізм AJAX має свої обмеження, декодування на стороні сервера може призвести до інтерпретації числа рядком, а рядки числом. У будь-якому випадку, перш ніж здавати код в промислову експлуатацію, важливо дуже уважно поставитися до кодування. Це не тип змінної, але це вкрай важливо.

    Ідеальна змінна

    Сучасний світ програмування різноманітний, але напрочуд стабільно розвивається. Цікавий шлях З# і ідея JavaScript & PHP. З усією певністю можна сказати, що найбільш зручна і ефективна змінна – це послідовність інформації, але рядка імпонують багатьом, а використовують їх всі.

    Такий же, як і мова (людина говорить і його розуміють), повинна бути й рядок – вона прийшла і її прочитали.

    Що робити, є проблеми кодування і поки рядок – це лише символи і коди. Але бути може завтра буде рядок – звук або відео. Від сучасних технологій можна чекати несподіванок.