Lxf74-75 gambas
Секрети і хитрощі
В останній статті цієї серії король графічного інтерфейсу д-р Марк Олександр Бейн (Dr Mark Alexander Bain) розкриває свої секрети в роботі з цим схожим на Visual Basic мовою програмування.
Завжди залишайте шлях для відступу
Я говорив це раніше і повторю ще раз: перед тим, як додавати що-небудь в вашу Gambas-форму, реалізуйте можливість коректно закрити її. Це може бути кнопка або пункт меню, після натискання на які виконується код
Об'єднуйте ваші процедури в модулі
Наприклад, ви можете помістити все, що відноситься до роботи з базами даних, в модуль Data.
Не забувайте про залежності при повторному використанні коду
Якщо ви використовуєте раніше написаний код для нового додатка, не забудьте підключити компоненти, від яких залежить цей код. Наприклад, якщо ви використовуєте модуль для підключення до бази даних, вам буде потрібно компонент gb.db, і так далі.
Створюйте необов'язкові параметри функцій і використовуйте для них значення за замовчуванням
У процесі роботи над проектом ви часто будете створювати функції, яким не потрібні ніякі параметри. Ось, наприклад, проста підпрограма для підключення до бази даних (не набирайте її, вона приведена тут тільки для пояснення ідеї!):
Ця підпрограма буде працювати тільки в тому випадку, коли сервер баз даних розташований на тому ж комп'ютері, де і програма, така поведінка зашито в коді. Але ж можна написати і процедуру, яка отримує ім'я сервера баз даних в якості параметра:
Тепер сервер не прошитий в коді процедури, але зате вам доведеться завжди вказувати його при виклику цієї підпрограми. Фактично, ваш додаток обрушиться, якщо ви раптом викличете процедуру підключення до бази даних, не вказавши їй обов'язковий параметр, наприклад ось так:
Але ви можете поєднати кращі властивості обох варіантів, використавши необов'язковий параметр із значенням за замовчуванням.
Тепер підпрограма буде працювати правильно незалежно від того, вказали ви їй, до якого сервера приєднуватися, чи ні (в цьому випадку буде виконано підключення до localhost).
Ловіть помилки, і не давайте їм впустити вашу програму
Якщо ви спробуєте додати останню функцію, яку я тільки що розглядав, в свій додаток і запустіть її, то воно обов'язково впаде. Це відбудеться тому, що я не передав досить відомостей об'єкту conn - крім імені сервера, йому потрібні ще й тип бази даних, її назва, а також ім'я користувача та пароль.
Не дуже приємно бачити, як ваша програма руйнується через таких простих речей. Набагато краще обробити помилку, інформувати про неї користувача і коректно завершити роботу, а краще - дати можливість користувачу зробити те, що він все ще може зробити. Для цього вам буде потрібно оператор TRY. Ось приклад готової процедури підключення до бази даних, з обробкою помилок і необов'язковими параметрами зі значеннями за замовчуванням:
Тепер, навіть якщо підключення до бази даних виявиться з якоїсь причини неможливим, додаток просто видасть повідомлення про помилку і продовжить роботу. Чи не використовуючи при цьому базу даних, зрозуміло.
використовуйте властивості
Якщо вам необхідно просто задавати і зчитувати значення, то вас повністю влаштують звичайні змінні. Але властивості (property) мають особливості, які часом роблять їх дуже корисними. До них відносяться функція _Read і підпрограма _Write. Отже, спробуйте вгадати, в який момент вони виконуються? Ось визначення властивості Host:
Зверніть увагу, єдиним публічним елементом є Host, все інше закрите від користувача цього модуля. Подивіться, як у функції Host_Read визначається значення для цієї властивості за замовчуванням.
Вивчіть параметри командного рядка
У наших прикладах всі значення параметрів (таких як назва бази даних або код користувача) були зашиті всередині програми. Але ви не зобов'язані робити так само, якщо вам це не подобається. Змінюються значення можна запросто передавати в параметрах командного рядка. Звичайно, вам доведеться написати трошки коду, що-б обробити їх правильно. Все, що ви набрали в командному рядку додатка Gambas, називається аргументом і зберігається в масиві Application.Args. Ось простий приклад роботи з ним (цю функцію можна помістити в модуль Startup).
Якщо потім ви створите який виконувався додаток і запустіть його з консолі, передавши кілька параметрів командного рядка, воно відобразить серію повідомлень, по одному на кожен параметр. Це не найкорисніше додаток на світлі, але воно дає уявлення про те, з якого боку підходити до обробки параметрів.
Наступний приклад трохи більш осмислений. Ця програма очікує, що ви передасте їй два параметра (в потрібному порядку), і зберігає їх значення в глобальних змінних:
Як я вже говорив, в даному випадку порядок має значення. А ось якщо ви використовуєте прапори, то це вже не так важливо:
Тепер ви можете викликати свій додаток як myapp -u / localhost -d mysql або як myapp -d mysql -u / localhost. результат при цьому не зміниться.
Запуск Gambas без графічного інтерфейсу користувача
Я думаю, ви вже звернули на це увагу, коли Новомосковсклі попередню хитрість - ви не зобов'язані використовувати Gambas тільки для додатків з графічним інтерфейсом. Ви можете також створювати консольні додатки або додатки командного рядка. Фактично, при створенні нової програми Gambas ви повинні вказати, чи буде потрібно вам графічний інтерфейс (за замовчуванням вважається, що потрібно).
Якщо ви виберете створення консольного застосування, то виявите, що у властивостях проекту папки Forms немає взагалі - і це правильно, адже вам не потрібен GUI. Але крім усього іншого, це означає, що вам ніде відображати інформацію, окрім як в стандартному потоці виводу, на консолі.
Прошу вибачення за включення в цей підручник набив оскому приклад «Hello World», але такі умови мого контракту: я повинен представити його хоч раз в кожному циклі статей. Це чергова директива Європарламенту.
Ось обов'язкова програма «Hello, World» на Gambas:
Консольні додатки можуть використовувати всі компоненти Gambas, крім графічних, звичайно.
Використовуйте INPUT, щоб передати інформацію в консольний додаток.
Ми з вами вже бачили, як використовувати в Gambas параметри командного рядка. Це прекрасно працює і з графічним інтерфейсом, і з консольним додатком. У графічній формі зазвичай є ще й поля введення для передачі з додатком додаткової інформації. В консолі ви можете використовувати в тих же цілях оператор INPUT:
Перетворення консольного застосування в графічне і навпаки
Коли Gambas задає вам питання, проект графічного або консольного застосування йому створювати, ви маєте право поцікавитися - в чому різниця? Відповідь проста - різниця в одному єдиному компоненті Gambas - gb.qt. Якщо ви підключите його до проекту консольного застосування, то вам буде доступний графічний інтерфейс. І навпаки, якщо в графічному проекті ви вимкніть gb.qt, то отримаєте проект консольної програми. Простіше простого.
Витяг інформації з файлів
У попередній статті ми розглядали, як отримати інформацію з бази даних. Подивимося сьогодні, як прочитати її зі звичайного файлу. Все, що вам треба зробити - це відкрити файл в одному з чотирьох режимів: read (читання), write (запис), create (створення) або append (дописування в кінець). Думаю, досить просто здогадатися, що робить кожен з цих методів, хоча різницю між записом і створенням варто уточнити. Режим запису write очистить і запише заново вже існуючий файл. Режим створення create може створити файл, якщо такий відсутній, але якщо він вже є - діє в точності як write. Ось простий приклад:
Цей код Новомосковскет файл / etc / passwd і відображає на екрані його вміст.
Використовуйте динамічні масиви Gambas на всю котушку
Цей заголовок може трохи ввести вас в оману, адже насправді в Gambas будь масиви - динамічні. Давайте розглянемо, як їх можна використовувати. Визначення масиву виглядає так:
Тут створюється масив рядків, що не містить жодного елемента. Поки він залишається порожнім, ви не можете привласнювати йому ніяких значень. Наприклад, ось так:
ви отримаєте помилку «Вихід за межі масиву» (out of bounds). Замість цього потрібно використовувати метод Add:
Це виклик додати ще один елемент в кінець масиву. Але ви так само можете додавати елементи з початку:
Цим способом можна вставити новий елемент в будь-яку позицію в масиві. Якщо у вас є масив з десяти елементів, то наступний код вставить ще один точно посередині:
Індекси масивів починаються з нуля, тому елемент з індексом 4 стане п'ятим за рахунком, а всього в масиві тепер буде 11 рядків. Упевнений, що ви відразу ж спробуєте написати
Gambas просто додасть новий рядок після останнього елемента.
Швидке вимір масиву
Якщо вже ми говоримо про кількість елементів, то давайте запитаємо себе - а наскільки великий ось цей масив? Відповідь проста. Масиви Gambas мають дві властивості - mArray.count і mArray.length. Обидва цих властивості означають одне і те ж і повертають загальне число елементів в масиві.
Ви можете використовувати будь-який з них для того, щоб перебрати всі елементи:
Цей код просто створює масив з десяти елементів, а потім показує кожен елемент в окремому повідомленні. Вас може здивувати, що в якості індексу я використовував i-1, а не i. Але, як я згадував раніше, індекси масиву починаються з нуля, так що в масиві з десятьма елементами вони нумеруються від 0 до 9, а не від 1 до 10. Якщо вам не подобається i-1, то можна використовувати інший спосіб:
На цей раз ми починаємо з нуля і зупиняємося на індексі номер mArray.Count - 1, тобто на індексі номер дев'ять (оскільки mArray.Count одно десяти).
Додавання кількох елементів
Так, я знаю, що ви хочете сказати: вам зовсім не хочеться додавати елементи по-одному. Ви просто хочете відразу створити необхідну кількість елементів, і потім заповнювати їх в тому порядку, в якому вважаєте за потрібне. Немає проблем!
У цьому прикладі я створив масив, визначив його розмір рівним 10 елементам (за допомогою методу Resize) і поставив значення шостого за рахунком елемента (зверніть увагу, як я мужньо впорався зі спокусою використовувати П'ятий елемент!).
Цікаво, що ви так само можете зменшити розміри масиву. Для цього треба скористатися методами Resize або Remove. Як працює Resize ви можете здогадатися, а Remove - це просто зворотний метод для Add, тобто він видаляє останній елемент або елемент з індексом, який йому передали.
масив підказок
Якщо ви зберігаєте свої дані у файлі, вам буде потрібно якийсь символ для відділення різних секцій один від одного. Кома - досить частий вибір, але вам слід уникати її: якщо хто-небудь випадково введе в текстове поле рядка з коми, в вашій «базі даних» з'явиться зайве поле. Використовуйте що-небудь більш рідкісне, наприклад, вертикальну риску (|).
Існує кілька приємних методів, які ви можете знайти дуже корисними при використанні масивів Gambas. Перший з них - це Sort. Подивіться на це:
Цей код заповнює масив з десяти елементів цифрами від 1 до 10. Потім він сортує його по спадаючій і по зростанню, відображаючи на місці першого елемента 10 і 1 відповідно. Цікаво буде подивитися, що зміниться, якщо замінити визначення масиву на String []. На цей раз програма виведе 9 і 1. Чому? Тому що Gambas правильно визначає тип змінних в масиві, і сортує числа в арифметичному порядку, а рядки - в лексикографічному. Другий цікавий метод масивів Gambas - це Reverse (звернути). Здогадалися, що він робить? І останній - це Find (знайти). Вам потрібні пояснення? Думаю ні. Давайте замість цього просто розберемо приклад:
Цей приклад використовує код для читання даних з файлу, який ми розглядали раніше. На цей раз імена користувачів і їхні домашні каталоги з / etc / passwd завантажуються в масиви. В кінці по імені користувача шукається відповідний йому ідентифікатор, а по ньому в свою чергу відображається домашній каталог.
Тут є тільки одна строчка коду, яку мені здається потрібним пояснити: lArray = Split (lLine, «:»). Він розбиває рядок lLine на окремі елементи, використовуючи зазначений роздільник (в даному випадку - двокрапка. Зверніть увагу на врізку «Поради» вище), а потім завантажує частини рядка в масив lArray.
Збереження налаштувань
Тепер ми знаємо, як отримати доступ до параметрів командного рядка з програми Gambas. Це дозволить користувачеві задавати режим роботи, якщо тільки він погодитися вводити цілком все опції кожен раз, коли запускає нашу програму. Чи не можна це автоматизувати? Звичайно, ключем до вирішення є конфігураційний файл, який зчитується при старті програми. Потім значення, перераховані в конфігураційному файлі, замінюють установки за замовчуванням, прийняті в програмі.
А наостанок Я СКАЖУ ...
Повний вихідний код розробляється в цьому підручнику програми ви можете знайти на компакт-диску. Він поєднує в собі всі прийоми і трюки, які ми обговорювали, і показує, наскільки легкими стають складні завдання, якщо під рукою є Gambas.