Поняття типу, як і, власне, змінної і її значення актуально для будь-якої мови програмування, системи управління базами даних, програмованих оболонок, і застосовуються в різних системних служби і сервіси. Багато розробники додатків і веб-ресурсів вводять свої описатели для типів змінних. Уявлення про базові типи актуальні, дозволяють уникнути помилок та побудувати ефективний алгоритм.
Природні інформаційні елементи
У світі реальної інформації немає змінних, але існують, образно кажучи, опису об’єктів. Що розуміти під об’єктом, часто залежить не від його опису, а від ситуації, в якій сталася «концентрація» інформації і з’явився її споживач.
Шкільна зошит в руках учня – це місце, в яке можна помістити різну інформацію. При цьому в зошит помістяться не тільки числа, рядки, малюнки, але й інтелектуальний рівень господаря, просочиться інформація про його захоплення, грамотності, настрої, можливо, стане відомо, хто його батьки і де він навчається.
- для продавця – це вартість, кількість та облік продажів;
- для покупця – це якість паперу, виробник і можливості: для математики чи письма.
Математики оперують формулами. Особливого значення функції і типи змінних не мають, але маються на увазі. Комплексне число ніколи не буває цілим або дробовим – воно буває лише комплексним. Його дві частини – це зовсім інше. Нескінченно мала величина або величина, що прагне до нескінченності, – теж абстракції природного типу.
Будь-яка бухгалтерська або управлінська завдання в природному світі ставиться гранично чітко і розуміється як постановником, так і виконавцем. Питання, що рівень розуміння може відрізнятися – деталь. Завдання є, і як її поставити – питання не складний. Але ось як запрограмувати завдання? Тут дійсно є над чим подумати.
Формалізація даних: «Паскаль»
Програмування сьогодні – це жорсткі конструкції. У багатьох сучасних мовах зовсім не обов’язково описувати типи змінних, а якщо і описати, то можна завжди автоматом перетворити їх в інший тип.
Коли програмування тільки формувалося як область обробки інформації, вважалося правильним зворотне: кожна змінна повинна бути описана заздалегідь, і змінювати її тип ніяк не можна було.
Як опис, так і обробка даних – це вимога граничної точності і ніякої невизначеності. Професійні і популярні мови мали крім очевидних варіантів подання природних даних, вигадані, але зручні для обробки.
Наприклад, «Паскаль» пропонував:
- 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), то в деякому сенсі це змінна цілого типу. Коли запит йде на виконання він дає цілочисельне значення, за яким можна отримати вибірку або результат операції.
У деяких реалізаціях запит видає логічне значення. В більшості випадків результати запиту виходять абсолютно іншими механізмами.
Перший рядок – це текст запиту, друга виконання запиту. Яке значення матиме змінна $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. З усією певністю можна сказати, що найбільш зручна і ефективна змінна – це послідовність інформації, але рядка імпонують багатьом, а використовують їх всі.
Такий же, як і мова (людина говорить і його розуміють), повинна бути й рядок – вона прийшла і її прочитали.
Що робити, є проблеми кодування і поки рядок – це лише символи і коди. Але бути може завтра буде рядок – звук або відео. Від сучасних технологій можна чекати несподіванок.