Основы объектно-ориентированного программирования на языке C# book | Page 66

5 Типи даних разiв, якi зустрiчаються у текстi програмi, компiлятор може автома- тично перевiрити, чи допустимi операцiı̈, що виконуються над цими значеннями згiдно тексту програми. Наприклад, якщо у текстi програми зустрiчається вираз 1/‘‘abc’’ , компiлятор може визначити, що 1 позначає дане типу “цiле число”, ‘‘abc’’ позначає дане типу “рядок символiв”, а / позначає операцiю дiлення. Далi, в залежностi вiд правил мови програмування та, мо- жливо, контексту, у якому зустрiчається цей вираз, компiлятор може повiдомити програмiсту про помилку в програмi: що застосування операцiı̈ дiлення до даних типу “цiле число” i “рядок символiв” нед- опустимо. Бiльш складнi ситуацiı̈ з неправильним застосуванням операцiй до даних можуть виникати при використаннi змiнних. Наприклад, допу- стимiсть застосування операцiı̈ дiлення у виразi 1/x , де x – iм’я змiн- ноı̈, може залежати вiд типу даного, що мiститься у змiннiй x , яке може змiнюватися пiд час виконання програми (якщо в момент вико- нання значенням x є числом, то допустима, а якщо рядок, то недопу- стима). Вiдповiдних помилок можна уникнути, якщо кожнiй змiннiй у про- грамi призначити незмiнний тип даних (тип змiнноı̈) i прослiдкува- ти, щоб жодна операцiя у програмi не призводила до запису у змiнну даного, яке не належить типу, призначеному змiннiй. В такому ви- падку, наприклад, допустимiсть операцiı̈ дiлення у виразi 1/х можна визначити за типом змiнноı̈ x (якщо х має тип “цiле число”, то допу- стима, якщо має тип “рядок символiв”, то недопустима). Якщо при цьому тип змiнноı̈ х явно вказаний в текстi програми, або може бути визначений за текстом програми, то допустимiсть операцiı̈ дiлення може бути визначена автоматично компiлятором, який матиме змогу повiдомити програмiста про помилку. Проте слiд мати на увазi, що призначення типiв змiнним часто не дає змогу компiлятору автоматично знайти усi помилки невiрного за- стосування операцiй до даних. Наприклад, операцiя дiлення у виразi 1/х веде до помилки пiд час виконання програми, якщо значення х є числом нуль. Проте компiлятори бiльшостi мов програмування не ро- блять спроб впевнитися, що х не зможе набути цього значення пiд час виконання програми. Для бiльшостi мов (в загальному випадку) така перевiрка за вихiдним кодом програми є алгоритмiчно нерозв’язною задачею. Проте, для уникнення помилки програмiст може написати код, що перевiрить, чи значення х рiвне нулю пiд час виконання про- грами перед дiленням. 66