Навчіться програмувати за допомогою Delphi Community Edition: Частина 5 - Складання калькулятора

програмувати

Ласкаво просимо до останнього епізоду серії "Навчіться програмувати за допомогою видання спільноти Delphi". У перших чотирьох епізодах ми висвітлювали "Вступ та встановлення" безкоштовного видання спільноти Delphi, а потім ми перейшли до основ IDE в "Будівництво в налагодженні". У "Архітектурі та шарах коду" були обговорені ключові концепції належної структури додатків, і в останньому епізоді ми розпочали "Проектування користувацьких інтерфейсів".

У попередньому епізоді ми створили проект калькулятора з основною формою з 20 кнопками та міткою, яка діє як "дисплей". Дуже важливо відокремити код інтерфейсу користувача від логіки програми. Найкращий спосіб досягти цього розділення - використання інтерфейсів. Однак це додало б занадто багато складності для початкової серії, тому я волію писати окремий клас за допомогою логіки калькулятора.

По-перше, ми додали два нових типи даних до блоку uCalculator. Перший - це перелік, як перелік дійсних значень для "роботи" калькулятора. Другий - це фактичний клас з логікою, визначеною в декількох методах, та інформацією про стан, представленою кількома полями, як будь-який хороший клас, який слідує об’єктно-орієнтованому підходу:

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

Методи мають різні ролі. Дві операції додавання, NewOperator та CalcTotal беруть участь безпосередньо при натисканні різних кнопок в інтерфейсі. AddDigit просто передає цифру натиснутої кнопки, а NewOperation робить те саме для операції, запускаючи обчислення поточного вхідного значення. Ось їх код:

Метод CalcTotal є найважливішим, який запускається натисканням кнопки = будь-якої з операцій. Зверніть увагу, як цей код використовує клас TCalculator, який ми написали на кроці 3 серії. Він також скидає стан відображення, так що метод DisplayValue може бути перекошений в ту чи іншу сторону:

Останній крок - переконатися, що у формі використовується клас TCalcStatus, а кнопки викликають відповідні методи. Але спочатку нам потрібно створити фактичний екземпляр цього об’єкта. Ми можемо додати об’єкт до класу форми, у розділі приватних полів, та ініціалізувати/звільнити його у двох конкретних обробниках подій, OnCreate та OnDestroy. Це повне визначення класу форми, з усіма компонентами та обробниками подій, а також спеціальним полем та користувацьким методом. Форма - це просто клас, тому її можна розширити, як і будь-який інший клас у коді:

Для 4 операцій код подібний до першого обробника подій OnClick нижче. Усі операції схожі, але обробники подій окремі, а також десятковий роздільник та знак =. Натомість для числових клавіш ми створили єдиний обробник події, підключений до всієї кнопки (ви просто робите, вибравши метод для обробника подій у розкривному списку Інспектора об’єктів поруч із OnClick. Таким чином код передається спільно і він покладається на параметр "Sender", об'єкт, який вказує, які кнопки були натиснуті, для доступу до тексту поточної кнопки (номера, який було натиснуто). Ось код:

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

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

Заради цієї початкової серії дописів у блозі, призначених для відкриття Delphi Community Edition, ми зосередилися лише на Windows. Але цю програму можна легко перекомпілювати для мобільних платформ, на чому ми зосередимось на наступній публікації в блозі.

Зараз це кінець серії, і ось посилання на попередні публікації. Незабаром буде додано більше.

Частина 5: Складання калькулятора (цей пост)