Навчальний курс. 19. Підпрограми (частина 1), Різне, Програмування, статті

Введення


Уявіть, що у Вас в програмі одна і та ж послідовність дій повторюється і прописана в різних місцях (наприклад, в обробниках натисків різних кнопок, вибору пунктів меню і т.п.) Якщо в програмі щось дублюється, то написана вона невірно. Точніше, сам програміст не знає про можливості, які надає йому мову програмування і / або не знайомий з методами оптимізації. Чим погано дублювання? Ви скажете, код стає більш громіздким? Так, в тому числі і це, але це не головне. Справа в тому, що пряме копіювання фрагментів коду сковує руки і не дає можливості в подальшому робити виправлення. Ні, звичайно, їх можна робити, але якщо в програмі в 100 різних місцях написано одне й те ж і це “одне і те ж” потрібно підправити, піде не одна хвилина на роботу, яка, загалом-то, марна. Якщо мова йде про якісь візуальних зміни програми – це ще куди не йшло … Уявіть іншу ситуацію: програма розраховує небудь дані по заданій формулі. Крім розрахунків програма будує графіки, зберігає інформацію в базі даних і т.п. Загалом, багатофункціональна програма. І в один прекрасний момент з’ясовується, що формулу розрахунку потрібно змінити. А у нас вона по всій програмі задана в явному вигляді. Доведеться виправляти скрізь. А якщо десь забудемо виправити, ще й проблеми виникнуть – половина розрахунків стануть невірними, не ті дані потраплять в базу даних і т.д. Логічно було б задати формулу розрахунку один раз і яким-небудь чином її викликати. Але як? Поставити змінну-формулу не можна … Ось тут на допомогу і приходять підпрограми.


Підпрограми


Підпрограма являє собою набір операторів, команд, оформлених спеціальним чином. Підпрограму можна викликати з основної програми, причому необмежену кількість разів. Виносячи якийсь код в підпрограму, ми виключаємо дублювання цього коду в різних місцях програми і, природно, зменшуємо загальний обсяг коду програми. Використання підпрограм надає додатком більш структуровану форму. У якийсь ступеня підпрограми і спрощують читання коду для інших користувачів. Більше того, використання підпрограм дозволяє організувати розподіл праці при роботі над великим проектом кожен працює над своєю завданням, а всі результати швидко і просто підключаються до основної програми.
За структурою підпрограма практично ідентична самій програмі – вона містить заголовок, блок описів, блок реалізації. Звичайно, форма запису підпрограм (тобто їх опису) відрізняється від форми запису самої програми.
У загальному випадку робота з підпрограмою ділиться на два етапи. Насамперед потрібно описати підпрограму, інакше основна програма просто її не знайде. Після того, як підпрограма описана, її можна викликати з основної програми. При цьому, звичайно, ніхто не забороняє Вам редагувати підпрограму і програму паралельно. Тобто Ви можете спочатку просто описати підпрограму і “повісити” на неї найпростіше дію зразок виведення віконця з повідомленням, потім прописати виклик підпрограми у всіх потрібних місцях, протестувати працездатність програми, і потім продовжити написання підпрограми.
Виклик підпрограм здійснюється за їх іменами. Ім’я підпрограми складається за всім тим правилам, за якими складаються імена ідентифікаторів (змінних). Тобто може складатися тільки з латинських букв, цифр і знака підкреслення, не може починати з цифри і т.д. Більш докладно правила завдання імен ідентифікаторів були розглянуті в одному з перших уроків. Імена підпрограм повинні бути унікальними, тобто не може існувати підпрограм з однаковими іменами. Але, як відомо, на будь-яке правило є своє виключення … І тут є особливі випадки – в об’єктно-орієнтованому програмуванні (ООП) є принцип поліморфізму, згідно з яким у об’єктів можуть бути методи (вони є підпрограмами) з однаковими іменами. Але знайомитися з ООП ми будемо пізніше, тому не забивайте голову зайвими незнайомими словами 🙂
Отже, крім імені підпрограми ми повинні описати список аргументів (параметрів), переданих підпрограмі. Приміром, якщо підпрограма обчислює деяке значення за заданою формулою, параметрами можуть бути складові змінні, включені в цю формулу. Припустимо, якщо підпрограма обчислює площу кола, то параметром (аргументом) буде його радіус. Важливо відзначити, що підпрограми можуть і не мати вхідних параметрів (тобто працювати без вказівки всяких даних), а також можуть мати нефіксоване число параметрів (тобто хочете – передавайте один, а хочете – п’ять, справа Ваше). У третю групу можна виділити підпрограми, у яких частина параметрів обов’язкове, а частина – ні. Другі зустрічаються досить рідко і вимагають особливого підходу. Кожен параметр – це, по суті, звичайна змінна, тому при описі параметрів потрібно кожному з них дати унікальне ім’я і вказати тип даних.
У стандартних модулях Delphi описано безліч підпрограми і їх можна викликати без опису. Вони вже описані, просто в інших модулях. Пам’ятаєте, ми підключали модуль Math для доступу до математичних функціями? А модуль StrUtils з функціями обробки рядків? Так от, в цих модулях і описані підпрограми, які ми використали. Якщо модуль не підключений, Delphi не дізнається, де знаходиться підпрограма і які функції вона виконує. Але варто модуль підключити і додатковий арсенал у нас в кишені. Природно, крім використання готових подпрогрмм ми можемо створювати і свої власні, користувальницькі.


Типи підпрограм


Всі підпрограми діляться на процедури і функції. У попередніх уроках ці терміни вже використовувалися. Зараз Ви дізнаєтеся, в чому різниця. А відмінностей насправді небагато. Функція – це підпрограма, результатом роботи якої є яке-небудь значення (Одне єдине). Це дозволяє використовувати функції як звичайні змінні, тобто як операнди у виразах. Просто значення будуть обчислюватися “на льоту”. Процедури – це підпрограми, які не повертають ніякого значення в результаті своєї роботи. Тим не менш, процедури можуть використовуватися для передачі в основну програму-яких даних, причому передаватися може не одне значення, а декілька. Але в загальному і цілому процедуру слід розуміти просто як ярличок на виконання зазначених дій.


Управління підпрограмами


Коротенько про управління. Як вже було сказано вище, підпрограми викликаються по іменах. Якщо підпрограма вимагає вхідні параметри, то вони вказуються в дужках і розділяються комами. З цим ми вже неодноразово зустрічалися, викликаючи готові підпрограми. Оскільки виклик підпрограми є окремою командою, в кінці необхідний символ “;” (крапка з комою). Якщо підпрограма-функція використовується як операнд в вираженні, крапка з комою, природно, не потрібні – слід сприймає ім’я підпрограми як змінну. Якщо підпрограма не вимагає вхідних параметрів, дужки можна опустити, залишивши тільки ім’я самої підпрограми. А можна дужки і написати, просто між ними не буде нічого. Пам’ятайте, одного разу ми вчилися працювати з генератором случаних числі (урок № 12)? Там ми викликали процедуру Randomize для ініціалізації генератора … Ось у цієї процедури вхідних параметрів немає, тому її можна викликати як Randomize;, так і Randomize (); Особисто мені більше подобається писати зі скобами – так код стає красивішим, та й відразу зрозуміло, що це підпрограма, а не змінна. Але, повторюся, писати дужки чи ні – справа Ваше. Нарешті, можна в будь-який момент завершити виконання підпрограми. Робиться це командою Exit (англ. “вихід “). Виконання переривається в тому місці, де знаходиться ця команда. Однак важливо пам’ятати, що якщо Exit знаходиться у функції, то потрібно передбачити значення, що повертається функцією. Завершення виконання функції зовсім не означає, що вона не поверне жодного значення – все з точністю до навпаки. Пам’ятайте, що значення будь-якої змінної (а значить і результату роботи функції) спочатку не визначено! Якщо результатом є число, не думайте, що там записано нуль! Там може бути все, що завгодно.


Висновок


Сьогоднішній урок носить в основному теоретичний характер. Ми не розглядали ніяких конкретних прикладів і поки що не вчилися створювати свої підпрограми. Цим ми займемося в наступний раз. Зараз важливо зрозуміти призначення підпрограм і засвоїти основну термінологію, яка використовується при роботі з ними. Далі, коли перейдемо до практики, все стане більш зрозумілим.


Домашнє завдання


Визначити, які вхідні параметри було б логічно поставити для наступних підпрограм:



  1. Функція, яка вважає, скільки разів буква зустрічається в тексті.

  2. Функція, що обчислює об’єм циліндра.

  3. Функція, що перевіряє, чи є паралелепіпед кубом.

  4. Процедура, яка робить 3 кнопки, розташовані на формі, недоступними для натискання.

  5. Процедура, що змінює дозвіл екрана.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*