|
|||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||
|
Прискорена перевірка
Якщо компілятор виявляє, що перевірена частина складної логічної умови однозначно визначає результат, він не перевіряє залишок виразу. Це називається прискореною перевіркою (short curcuiting). Наприклад, якщо в наступному прикладі змінна foo помилкова, компілятор не перевіряє змінну bar: If foo And bar Then... Так було в VB .NET бета-версиі
1, але в колишніх версіях VB прискорена
перевірка не застосовувалася. Після
численних скарг розробники
Microsoft повернули стару інтерпретацію
логічних операторів
And і Or і додали нові ключові
слова Andalso і Orelse, що
підтримують прискорену
перевірку: If foo Andalso Then...
Як
альтернатива для громіздких
конструкцій з множиною Elself в VB .NET
була збережена команда Select Case,
що спрощує ухвалення рішень
залежно від стану числової
або строкової змінної. Приклад: Select Case average Case Is > 90 Console.WriteLine("A") Case Is > 80 Console. Wri teli ne("B") Case Is > 70 Console.WriteLine("C") Case
Else Console.WriteLine("You fail") End
Select Програмісти з
досвідом роботи на З і Java, звернете
увагу — команда break не потрібна,
оскільки виконується тільки одна
секція Case. Дискретні набори
значень перераховуються через
кому, а ключове слово Те
дозволяє задавати інтервали: Select Case yourchoice Case 1
To 9 ' Порядок Case -1. 0 ' Неправильне введення End
Select
Кажучи про конструкції, що
управляють, не можна
обійти увагою команду Goto. Якщо
перефразовувати старий жарт,
сучасні програмісти діляться
на три групи: ті, хто не знає, як
користуватися Goto, і знати не хоче;
ті, хто не знає, але переживає із
цього приводу; і ті, хто уміє нею
користуватися. Часте
використання Goto приводить до
багатократних передач управління
і породжує «спагеті-коди», які
важко читати і відладжувати. З
іншого боку, в деяких
ситуаціях застосування Goto робить
програму зрозумілішою і логічнішою
— наприклад, якщо в якійсь ситуації
потрібно було вийти відразу
з декількох вкладених циклів.
Команда Exit для цього не підходить,
оскільки вона завершує тільки
поточний цикл. Щоб
скористатися командою Goto в VB .NET,
необхідно привласнити мітку
відповідному рядку. Мітка
починається в першій позиції рядка,
її першим символом є буква,
а останнім — двокрапка.
Прагніть привласнювати міткам
змістовні імена. Приклад: Bad-input: '
Фрагмент, що
виконується при переході Припустимо, в
нашій програмі дані вводяться у
вкладеному циклі For. Щоб завершити
введення, користувач вводить ZZZ : Submain() Dim getdata As String Dim i, j As Integer For i = 1 To 10 For j = 1 To 100 Console.Write("Type
the data, hit the Enter key between " & _ "ZZZ to end: ") getdata = Console. Readline() If
getdata = "ZZZ" Then Goto Bad
Input Else ' Обробка даних End If Next j Next i Exit Sub Badinput: Console.WriteLine("Data entry ended at user request") Console. Readline() End
Sub Виходити з
вкладеного циклу командою Exit For
незручно — нам довелося б писати
додатковий код для виходу із
зовнішнього циклу. Звернете увагу:
команда Exi t Sub запобігає
передачі управління поміченому
коду після завершення обох циклів.
Починаючи
з бета-версиі 2 логічні оператори (Not, And, Or і
т. д.) працюють на
рівні двійкових розрядів, як і в колишніх
версіях VB. Допустимо, у вас є
два цілі числа X і Y. Кожен біт результату
X And Y дорівнює 1 лише в тому
випадку, якщо рівні 1 відповідні
біти обох операндів; інакше біт
результату дорівнює нулю. Таким
чином, при обчисленні результату
X And Y обчислюється кожен біт 32-розрядного
цілого числа. Приклад: X = 7 'В двійковому уявленні = 0111 Y = 12 'В
двійковому уявленні = 1100 Вираз X And Y в
двійковій системі рівне 0100 (4 в
десятковій системі), оскільки лише
в другій позиції обидва біта рівні 1.
Решта біт результату дорівнює 0,
оскільки в цих позиціях хоч би
один з бітів операндів дорівнює 0.
Цей спосіб дозволяє перевірити
значення окремих бітів цілого
числа. Приклади: (X And 1) = 1:
перевірити, чи встановлений молодший
біт числа. (X And 2) про 2:
перевірити, чи встановлений
передостанній біт числа (оскільки
в двійковій
системі число 2 представляється
записом 10). X And 255:
молодший байт числа (255 дес. = 11111111 дв.). X And
65280: старший байт числа (65280 дес. =
1111111100000000 дв.). Значення,
призначене для перевірки
окремих бітів числа, називається маскою
(mask).
У VB .NET імена
масивів повинні підкорятися тим же
правилам, що і імена змінних.
Посилання на елемент масиву виглядає
як ім'я масиву, за яким в
круглих дужках указується індекс. Масиви VB .NET багато в
чому відрізняються від масивів Vb6.
Одні зміни видно відразу, інші
не такі очевидні. Найбільш
помітні зміни перераховані
нижче.
Dim weekend() As
String = {Saturday. Sunday} Менш очевидні
зміни обумовлені тим, що
масиви VB .NET є екземплярами
класу Array. Подробиці будуть
розглянуті в розділі 4, а поки
досить вказати, що це
дозволяє виконувати операції з
масивами викликом методів класу
Array. Нижче продемонстрований приклад
сортування масиву методом Sort: Sub Main() Dim stuff() As
Integer = (9. 7, 5, 4, 2. 1 -37, 6} Array.Sort(stuff) Dim i As
Integer For i = 0 To Ubound(stuff) Console.WriteLine(stuff(i)) Next Console. Readline() End Sub Програма
виводить масив, відсортований із
застосуванням надзвичайного
ефективного алгоритму «швидкого
сортування».
Масиви з індексацією елементів в заданому інтервалі
Твердження про
те, що індексація масивів завжди
починається з 0, не зовсім точно.
Теоретично можна визначати
масиви із заданою верхньою і нижньою
межею індексу, але із-за
незручного синтаксису і зниження
швидкодії навряд чи вам
захочеться це робити. У наступному
фрагменті створюється масив з
індексацією елементів від 1995 до 2002: Sub Main() Dim
anarray As Array Dim i As
Integer Dim i(0) As Integer Dim lowerbounds(0)
As Integer i(O)= 7 lowerbounds(0)=
1995 ' Створити масив з індексами 1995 -
2002 аnаrrау = Array.CreateInstance(Gettype(System.Int32).
1. lowerbounds) anarray.SetValue(200000, 1995) anarray.SetValue(1000000.
2001) Console.WriteLine("The entry in position 1995 is " & _ (anarray.GetValue(1995).ToString)) Console.WriteLine("The entry in position 2002 is " & _ (anarray.GetValue(2001).ToString)) Console. Readline() End
Sub Привласнення виконується
методом Setvalue (значення, індекс),
а читання — методом Getvalue(індекс). Але
якщо масив створюється так
само в режимі жорсткої перевірки
типів, вам доведеться поклопотатися про
те, щоб привласнюване значення
було перетворене до правильного
типу!
|
|
|||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||