Змінні, типи даних і константи

Змінні, типи даних і константи

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

Існує кілька способів за якими можна згрупувати або розділити типи даних.

Приклад: Тип даних Integer (32-ох розрядний знакове ціле) - вбудований. Тип даних DWord (32-ох розрядний беззнаковое ціле) - призначений для користувача, похідний від LongWord. Він оголошений програмістами Borland в тексті бібліотеки VCL.

Типи даних поділяються на фундаментальні (fundamental) і загальні (generic). Фундаментальні типи (їх формат і безліч значень) не залежить від реалізації мови Delphi, його версії, операційної системи і процесора. Формат і безліч значень загальних типів даних специфічні для конкретної платформи і можуть варіюватися в залежності від версії Delphi, ОС і процесора. Слід намагатися використовувати загальні типи даних де це можливо, тому що вони надають оптимальну продуктивність і переносимість програм. Однак залежність формату від платформи може створити проблеми з сумісністю коли мова йде про зберігання (файли) і обробці даних поза програмою (передача даних іншим програмам або ОС).

Приклад: Тип даних Integer в версії Delphi 1 і в Turbo Pascal був 16-ти розрядне знакове ціле число. Тепер в 32-ох розрядних версіях Delphi цей тип даних є 32-ух розрядних. Цілком можливо що при переході на наступне покоління процесорів які будуть оперувати 64-ох бітних машинними словами цей тип даних теж стане 64-ох бітним. На противагу йому Byte завжди є 8-ми бітовим беззнаковим цілим.


За характером даних

Прості типи даних

Прості (simple) - типи даних які можуть зберігати обмежене безліч впорядкованих значень. Прості типи даних підрозділяються в свою чергу на кілька підрозділів в залежності від своєї функціональності.

Порядкові типи даних

Порядкові (ordinal) - типи даних являють собою типи даних які можуть зберігати одне зі значень упорядкованого набору. Порядковим типом даних називається тип описує безліч значень кожне з яких має однозначно певне попереднє значення і подальше значення. Виняток - останнє і перше значення в типі, вони не мають відповідно подальшого і попереднього значень. Кожне значення в типі має порядковий номер. Для конкретного значення з порядковим номером N попереднє значення має порядковий номер N-1 а наступне значення має порядковий номер N + 1.

До порядковим типам даних ставляться наступні зумовлені типи даних:

всі цілочисельні типи (ShortInt, SmallInt, Integer, Cardinal, Int64, Word, LongInt, Byte, LongWord)

логічний тип даних (Boolean)

символьний тип даних (Char)

Рахункова типи даних в яких явно не визначені порядкові номери значень, тоді вони автоматично визначаються порядком заданим при описі можливих значень (типи даних створювані користувачем)

поддиапазон (тип похідний від будь-якого з попередніх типів і включає в себе підмножина значень базового типу)

Речові типи даних

Речовий (real) тип даних визначає безліч чисел які можуть бути записані в формі з плаваючою десятковою крапкою. Кількість значень визначаються речовим типом дуже велике, хоча і кінцеве. До речовим типів даних відносяться Real48, Real, Single, Double, Extended, Comp, Currency.

Строкові типи даних

Рядок являє собою послідовність символів. У Delphi існує три вбудованих типу для строкових даних.
  • ShortString - короткі рядки, довжиною до 255 символів.
  • AnsiString, String - довгі рядки, довжиною до
2 ^ 31 символів.
  • WideString -

    2 ^ 30 символів Unicode

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

    Структуровані типи даних

    Примірники структурованих типів даних можуть містити в собі одночасно кілька значень. До структурованим типів даних відносяться:
    • set - множини.
    • array - масиви.
    • record - записи.
    • class - класи.
    • class reference - посилання на клас.
    • interface - інтерфейси.

    Процедурні типи даних

    Процедурні типи даних дають можливість використовувати інші сутності мови - такі як функції. процедури і методи в якості значень.

    Варіанти, а точніше варіант (variant) - єдиний тип даних який може містити значення різних типів. Тип значень збережених варіантом не визначений на етапі компіляції і управляється програмістом.

    Дані, якими маніпулює програма, зберігаються в змінних. Кожна змінна належить до одного з типів даних. Інакше кажуть що "така-то змінна є змінною такого-то типу" або "така-то змінна має тип такий-то". Вказівка ​​типу даних для змінної є важливою властивістю мови. Вказівка ​​типу даних визначає правила за якими змінна може бути використана, способи її використання та допустимий набір дій які можуть бути зроблені над даними, що зберігаються в цій змінній. Найголовніше, то що завдання типу даних для змінної інформує компілятор про те які "правила гри" потрібно прийняти під час роботи з цієї змінної. Таким чином компілятор має можливість проаналізувати коректність операцій вироблених над змінними і повідомити програмісту про помилки, буде той в своєму програмному коді порушує правила гри.

    Змінні мають також імена або по іншому ідентифікатори. На ім'я змінної компілятор (та й програміст теж :-) відрізняють одну змінну від іншої.

    Над змінними можливо виробляти дві фундаментальних операції - привласнити змінної якесь значення і використовувати значення присвоєне змінної для якихось цілей.

    Спробуємо пояснити концепцію змінних на пальцях

    Припустимо у нас є числове значення 25 яке представляє собою кількість грошей які повинен нам наш знайомий. Нам треба зберегти його (не знайому, а скільки грошей він нам повинен) а потім скористатися ним. Ми беремо коробку на якій написано "Борг", пишемо на папірці число 25 і кидаємо його в коробку. А в голові запам'ятовуємо що розмір боргу знайомого зберігається в коробці з написом "Борг". Згодом зустрівшись з нашим знайомим в темному провулку ми швиденько шукаємо у себе в кишені коробку з написом "Борг", відкриваємо її, вивуджуємо папірець і радісно повідомляємо йому: "Чуєш-ти, гони бабло. Цільних. М-м-м-м. 25 рублів ". Бачачи нашу звірячу пику знайомий з жахом повідомляє нам що в готівки у нього з собою тільки 15 рублів і він готовий віддати нам їх, а залишок буде пізніше. "Без проблем", - говоримо ми бо 15 рублів нам і не вистачало на пляшку "Сибірська корона - Рубінове". Забираємо в нього гроші, стару папірець викидаємо, на новій пишемо 10 (результат від 25-15) і кладемо в коробку "Борг".

    Добре. У нас є пляшка пива і ми хотіли б її зберегти деякий час (наприклад, поки не дійдемо до найближчої шашличної). Спроба заштовхати пляшку пива в таку-ж коробку в якій у нас зберігалася замітка про борг ні до чого не приведе. Пляшка не влізе. Тоді ми штовхаємо пляшку в поліетиленовий пакет з написом "Christian_Dior" і щасливо прем в шашлична до місця розпивання і раз'етія.

    У чому мораль цієї байки, запитаєте ви? А ось у чому. Папірці з написами і пляшка пива - це значення змінних. Ємності для зберігання (коробка і пакет) - це самі змінні, місця де зберігаються значення (дані). Написи на коробці і пакеті - ідентифікатори змінних за якими ми відрізняли їх від інших коробок распіханих по кишенях і пакетів бовтаються за спиною. Різниця розмірів між пакетам і коробкою - типи змінних, в коробку ми можемо класти тільки маленькі папірці, а в пакет тільки пляшки з пивом.

    Коли ми поклали папірець з написом в коробку ми виконали операцію присвоювання. Присвоїли змінної "Борг" значення 25. Коли ми дивилися папірець для повідомлення розміру боргу, ми використовували значення знаходиться в змінної "Борг". Коли ми поклали інший папірець в коробку, ми присвоїли перменная "Борг" нове значення - 10, як результат вираження 25-15. З пивом і пакетом то-ж саме.

    Приклад. може бути записано і так:

    Іноді нам потрібно використовувати в тексті програми фіксовані значення, тобто значення які не повинні змінюватися в процесі виконання програми. Наприклад в програмі розрахунку тиску машини на грунт це може бути кількість коліс автомобіля - 4. Припустимо всюди в розрахунках ми будемо використовувати це число - 4. Але що буде якщо нам запропонують переробити програму щоб вона вважала тиск на грунт БТР-а, у якого цих коліс 8 штук? Ідея переглядати код і замінювати всюди 4 на 8 - не найкраща. Набагато зручніше і правильніше визначити константу і призначити їй потрібне значення, а потім використовувати замість значення цю константу. Компілятор сам підставить значення константи в тих місцях де вона була використана. Таким чином нам досить лише буде виправити значення константи з 4 на 8 а потім перекомпілювати програму.

    Константи поділяються на два види - справжні (true constants) і типізовані (typed). Справжні константи - власне і є константи в чистому вигляді. Типізовані константи - константи які можуть містити типізовані значення. Наприклад можна оголосити масив-константу або запис-константу.

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

    Приклад використання вищезазначених сутностей мови в програмі

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

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

    А ось навіщо. Уявіть собі що наша програма складається не з пари десятків рядків а з пари десятків тисяч рядків (звичайна справа для реального світу) і, скажімо, "кількість коліс", використовується в двадцяти місцях, розсіяних по цій програмі. Припустимо умови задачі зміняться і нам доведеться робити розрахунок не для 4-ох колісного транспортного пристрою, а для 8-ми колісного. Куди простіше завести константу і використовувати її у всіх розрахунках, а при необхідності змінити замість того щоб шукати все місця в програмі де використовується "кількість коліс" і змінювати його з 4 на 8.

    Схожі статті