:: Меню ::

Головна
  • Про сайт
  • Введення
  • Середовище програмування VB .NET: Visual Studio .NET
  • Вирази, оператори і передача управління
  • Класи і об'єкти
  •  Спадкоємство і інтерфейси
  • Обробка подій і делегати
  • Обробка помилок в VB .NET
  • Форми Windows, графічний вивід і друк
  • Уведення-виведення
  •  Багатопотокові застосування
  • Підтримка баз-даних в VB .NET
  • Короткий огляд ASP .NET
  • Складки .NET, установка додатків і COM Interop
  • Книга для гостей
    Контакти
    Добавити у вибране

    :: Друзі ::

     
     

    :: Лічильники ::

    = =

     

     

     

     

    Прискорена перевірка

    Якщо компілятор виявляє, що перевірена частина складної логічної умови однозначно визначає результат, він не перевіряє залишок виразу. Це називається прискореною перевіркою (short curcuiting). Наприклад, якщо в наступному прикладі змінна foo помилкова, компілятор не перевіряє змінну bar:

    If foo And bar Then...

    Так було в VB .NET бета-версиі 1, але в колишніх версіях VB прискорена перевірка не застосовувалася. Після численних скарг розробники Microsoft повернули стару інтерпретацію логічних операторів And і Or і додали нові ключові слова Andalso і Orelse, що підтримують прискорену перевірку:

    If foo Andalso Then...

    Select Case

    Як альтернатива для громіздких конструкцій з множиною 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 приводить до багатократних передач управління і породжує «спагеті-коди», які важко читати і відладжувати. З іншого боку, в деяких ситуаціях застосування Goto робить програму зрозумілішою і логічнішою — наприклад, якщо в якійсь ситуації потрібно було вийти відразу з декількох вкладених циклів. Команда Exit для цього не підходить, оскільки вона завершує тільки поточний цикл.

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

    Щоб скористатися командою 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. Одні зміни видно відразу, інші не такі очевидні. Найбільш помітні зміни перераховані нижче.

    • Індексация-елементов в масивах починається з 0. На момент написання книги ключове слово Те не підтримувалося — сподіватимемося, що воно ще повернеться!

      Починаючи з бета-версиі 2 оголошення 01m stri ngli st(7) створює масив з восьми елементів з індексами від 0 до 7. Оскільки в VB .NET індексація завжди починається з нуля, третій елемент масиву позначається stri nglist(2), а попередні елементи позначаються stringlist(0) і stringlist(l).

    • Всі масиви VB .NET є динамічними. Під час роботи програми їх можна переоб'явіть з новим розміром за допомогою команд Redim (з втратою поточного вмісту) і Redim Preserve (із збереженням поточного вмісту). Приклад:

      Dim x() As Single

      Redim x(20)' Починаючи з бета-версиі 2. створює масив з 21 елементу

      Redim Preserve x(50)' 21 елемент зберігається в масиві.

    Команда Redim не дозволяє змінювати тип масиву; також не допускається використання Redim при оголошенні. Перед викликом Redim масив має бути оголошений за допомогою Dim або аналогічної команди.

    • Масиви можуть ініціалізуватися при оголошенні, як показує наступний приклад:

    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

    Програма виводить масив, відсортований із застосуванням надзвичайного ефективного алгоритму «швидкого сортування».

    VB.NET успадковує від .NET Framework деякі дуже корисні структури даних, можливості яких виходять далеко за рамки звичайних масивів. На тлі цих структур колекції Vb5 і подальших версій виглядають примітивно. Зокрема, спискові масиви (з динамічно змінними розмірами) і асоціативні масиви (з доступом до даних по ключу) часто виявляються зручнішими за звичайні масиви. Багато хто з нових структур даних розглядається в розділах 5 і 6.

    Масиви з індексацією елементів в заданому інтервалі

    Твердження про те, що індексація масивів завжди починається з 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(індекс). Але якщо масив створюється так само в режимі жорсткої перевірки типів, вам доведеться поклопотатися про те, щоб привласнюване значення було перетворене до правильного типу!

     




    :: Наша кнопка ::

    Отримати код:

    Підтримайте наш сайт і розмістіть нашу кнопку на своєму ресурсі.


    :: Реклама ::

    Скачати безкоштовно програму Microsoft Front Page 2003


    :: Посилання ::

    -


     

     

     


    Copyright ©