yandex rtb 1
ГоловнаЗворотній зв'язок
yande share

Організація баз даних і знань

4.4 Правила іменування

 

Є кілька простих правил, які варто виконувати, щоб бути цивілізованим програмістом. Правила, про які ми зараз поговоримо, стосуються оформлення тексту програм. Наведемо основні правила:

·          використовуйте коментарі,

·          дотримуйтесь правил іменування,

·          структуруйте текст,

·          будуйте програми з модулів "піднімального" розміру.

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

Розроблювачі від Microsoft рекомендують дотримуватися більш суворих правил. Ім'я повинне відбивати не тільки зміст, але й тип змінної, область дії. Тому ім'я повинне складатися із префікса й власного імені. Префікс також є складовим, дві його частини відбивають область дії й тип змінної.

4.5 Оператори

 

VBA - операторна мова. Це означає, що її програми (модулі) представляють послідовності операторів. Групу декларативних операторів VBA, з якими працює програма (типів, змінних, констант, об'єктів додатків й ін.), ми вже розглянули. Оператори іншої групи забезпечують присвоєння й зміну значень цих об'єктів, оператори третьої групи керують ходом обчислень, четвертої - роботою з каталогами й файлами й т.д.

4.5.1 Оператори й рядки

При записі тексту програм для спрощення читання, налагодження й модифікації програми кожен оператор слід розміщувати в окремому рядку тексту. Дотримуйтесь правила: "Один оператор - один рядок". Але дозволяється розміщувати на рядку й кілька операторів, на відміну від загальноприйнятого символу поділу операторів "крапки з комою", в VBA символом поділу двох операторів в одному рядку служить двокрапка. Помітьте, деякі оператори, наприклад, оператор If, можуть стояти лише на першому місці в рядку. І із цієї причини кожен оператор, як правило, варто починати з нового рядка, лише іноді, розумно, групу операторів присвоювання розміщувати в одному рядку. Частіше виникає інша ситуація, - оператор занадто довгий і його текст не видний повністю на екрані дисплея, що затруднює читання й розуміння програми. У цьому випадку оператор варто продовжити в одній або декількох рядках. Щоб продовжити (перенести) оператор на наступний рядок, використовується пара символів пробіл-підкреслення "_". Наприклад,

MyAddress = "будинок: " & Number & "вулиця: " & Street _

      & "місто: " & City

Перед оператором у рядку може стояти мітка - послідовність символів, що починається з букви й кінчається двокрапкою ":". Мітки можна розміщати й в окремих рядках перед тими операторами, які вони повинні позначати. Вони потрібні для операторів переходу типу GoTo, використання яких вважається "дурним тоном" у структурному програмуванні. Але іноді без міток і переходів на них обійтися важко - зокрема, для вказівки входів в оброблювачі помилок у деяких процедурах.

4.5.2 Оператор коментарю

Коментарі на виконання програми не впливають, але необхідні як ознака "гарного стилю". Офісні програми використовуються багаторазово й не раз модернізуються в процесі свого життя. Ви можете заощадити на коментарях і написати, налагодити невеликий модуль без них. Але вже через тиждень ніхто, у тому числі й автор, не зможе зрозуміти його дію й модифікувати потрібним способом. Коментар у VBA починається апострофом (') і включає будь-який текст, розміщений правіше в рядку. Звичайно в коментарях описують завдання, які розв'язуються модулями, функції, які виконуються процедурами, зміст основних змінних (якщо він неясний з імен), алгоритми роботи процедур. Корисно також коментувати оператори викликів зовнішніх для даного модуля процедур, пояснюючи їхні дії.

4.5.3 Оператор присвоювання

Оператори присвоювання - основний засіб зміни стану програми (значень змінних і властивостей об'єктів). У VBA кілька видів операторів присвоювання. Найпоширеніший серед них Оператор Let. За допомогою цього оператора відбувається "звичайне" присвоєння значення вирази змінної або властивості.

Синтаксис: [Let] змінна = вирази

Ключове слово Let, як правило, опускається. Змінна є ім'ям змінної або властивості; вираз задає значення, що привласнюється змінній. Його тип повинен відповідати типу змінної.

Приклади:

Public Sub Assign1()

   Dim MyStr As String, MyInt As Integer

   Let MyStr = "Доброго дня!"               ' Із ключовим словом Let

   MyInt = 5               ' Без нього. Звичайний варіант.

   Debug.Print MyStr, MyInt

End Sub

4.5.4 Керуючі оператори

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

Умовний оператор If Then Else End If

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

Є два варіанти синтаксису: в один рядок й у формі блоку. У першому випадку він має вигляд:

If умова Then [оператори1] [Else оператори2 ]

У другому випадку оператор розміщений на декількох рядках:

If умова Then

[оператори]

[ElseIf умова-n Then

[оператори-n]...

[Else

[ІншіОператори]]

End If

Тут умова обов'язково в обох варіантах. Вона може бути числовим або строковим виразом зі значеннями True або False (Null трактується як False). Як умову можна використовувати й вирази виду TypeOf Ім’яОб’єкта Is ТипОб’єкта, де Ім’яОб’єкта - посилання на об'єкт, а ТипОб’єкта - довільний коректний тип об'єкта. Оператори1 й оператори2 - це послідовності з одного або декількох розділених двокрапкою операторів. Принаймні, одна із цих послідовностей повинна бути непустою. Якщо умова істинна (True), виконується послідовність оператора1, неправдива (False) - оператора2. Закриваючий оператор End If необхідний.

4.5.5 Оператор вибору Select Case

Цей оператор робить розгляд випадків, і залежно від значення аналізованого виразу вибирає й виконує одну з послідовностей операторів.

Синтаксис.

Select Case Тест^-тест-вираз-тест

[Case ПерелікВиразів-n

   [оператори-n]]

[Case Else

   [ІншіОператори]]

End Select

Вираз-тест повинен бути присутнім обов'язково. Воно може бути довільним виразом із числовим або строковим значенням. ПерелікВиразів-n повинен бути присутнім у рядку, що починається ключовим словом Case (Випадок).

Цикл For Next

Дозволяє повторювати групу операторів задане число раз.

Синтаксис:

For лічильник_циклу = початок To кінець [Step крок]

тіло циклу

Next [лічильник_циклу]

Тут лічильник_циклу - це числова змінна. На початку виконання циклу вона набуває значення, що задає числовим виразом початок (змінна лічильник_циклу не може мати тип Boolean або бути елементом масиву). Числовий вираз кінець задає заключне значення лічильника циклу. Воно обчислюється до початку виконання тіла циклу й не міняється, навіть якщо вхідні в нього змінні змінюють у тілі циклу свої значення. Числовий вираз крок необов'язковий. Його значення також обчислюється на початку циклу й додається до лічильника циклу щоразу, коли завершується виконання тіла циклу й обчислення досягає рядка Next [лічильник_циклу]. Якщо крок циклу явно не зазначений, за замовчуванням він дорівнює 1. Тіло циклу - це послідовність операторів, яка буде виконана задане число раз. При якому значенні змінної лічильник_циклу відбувається завершення циклу, залежить від знака параметра крок. Якщо крок додатний, цикл завершиться, коли вперше виконається умова: лічильник_циклу > кінець.

Якщо крок циклу від’ємний, умова його завершення: лічильник_циклу < кінець.

Ця умова перевіряється перед початком виконання циклу, а потім - після кожного додатка кроку до лічильника циклу в операторі Next. Якщо воно виконане, керування передається на оператор, що випливає за Next, немає - виконуються оператори з тіла циклу. Завершити цикл For … Next можна й за допомогою оператора Exit For. Такі оператори можуть бути розміщені в тих місцях тіла циклу, де потрібно з нього вийти, не чекаючи виконання умови завершення.

Приклад.

У нашому прикладі три вкладених цикли For … Next використовуються для обчислення добутку двох цілочислених матриць з випадкових чисел. Потім результуюча матриця перевіряється на наявність у ній нульового значення:

Public Sub For1()

             Dim A(1 To 5, 1 To 5) As Integer

             Dim B(1 To 5, 1 To 5) As Integer

             Dim C(1 To 5, 1 To 5) As Integer

             Dim I As Integer, J As Integer, K As Integer

             Dim Res As String

             ' Ініціалізація матриць        A і B випадковими числами в интервалі [-10, +10]

             VBA.Randomize

             For I = 1 To 5

                            For J = 1 To 5

                            'Отримання випадкового числа Rnd і перетворення у ціле

                            A(I, J) = Int(21 * Rnd) - 10

                            Next J

             Next I

             For I = 1 To 5

                            For J = 1 To 5

                                           B(I, J) = Int(21 * Rnd) - 10

                            Next J

             Next I

                           

             'Обчислення добутку матриць

             For I = 1 To 5

                            For J = 1 To 5

                                           C(I, J) = 0

                                           For K = 1 To 5

                                           C(I, J) = C(I, J) + A(I, K) * B(K, J)

                                           Next K

                            Next J

             Next I

                           

             Res = "No"

             C(2, 2) = 0

             'Перевірка на нульове значення

             For I = 1 To 5

                            For J = 1 To 5

                                           If C(I, J) = 0 Then

                                           Debug.Print "Індекси: ", I, J

                                           Res = "Yes"

                                           Exit For

                                           End If

                            Next J

             Next I

             Debug.Print Res

End Sub

 

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

 

45