|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Оголошення змінних
У VB .NET, як і в Vb6,
змінні оголошуються в
процедурах і функціях за допомогою
ключових слів Dim і As, а привласнення
виконується знаком =: Dim foo As String foo = "bar" Якщо ви не
змінювали стандартне налаштування VB .NET,
змінні повинні оголошуватися
перед використанням (режим Option
Explicit, вперше представлений в Vb4,
тепер використовується за умовчанням).
У VB .NET підтримується
ініціалізація змінних при
оголошенні. Приклад: Dim salestax As
Decimal = 0.0825d Команда
оголошує змінну з ім'ям salestax
і привласнює їй початкове
значення 0.0825 типу Decimal. При
ініціалізації можуть
використовуватися будь-які
синтаксично правильні
вирази VB .NET. Наступна команда
привласнює змінною startangle
вбудоване значення
математичної константи п, використовуючи
для цього константу класу System. Math:
Dim startangle As Decimal - Math.PI Якщо змінна
не ініціалізувала при оголошенні,
їй привласнюється стандартне
значення, відповідне
її типу, — наприклад,
числовим змінним привласнюється
0. При такому зручному синтаксисі,
як в VB .NET, завжди краще ініціалізувати
змінну при оголошенні,
чим покладатися на значення
за умовчанням. У наступному фрагменті
використовується оператор &,
що застосовувався в Vb6 для
конкатенації рядків: Sub Main() Dim salestax As
Decimal = 0.0825d Dim
state As String = "California" Console.WriteLine("The
sales tax in " & state & " is " &
salestax) Console. Readline() End
Sub Програма
виводить наступний результат: The sales tax in
California is 0.0825 На відміну від попередніх версій VB, оголошення декілька змінних в одному рядку програми працює саме так, як підказує здоровий глузд. Інакше кажучи, наступна команда оголошує три змінні: i, j і до, Integer, що відносяться до типу: Dim i, j, до As
Integer При
одночасному оголошенні
декілька змінних
ініціалізація виконуватися не може,
тому наступний рядок
недопустимий: Dim i, j, до As
Integer = 1 Як і в колишніх
версіях VB, замість вказівки типу з
ключовим словом As може
використовуватися суфікс типу.
Наприклад: Dim i%, myname$ Приведена
команда оголошує змінну i типу
Integer (аналог Long в старому VB) і
змінну myname типу String.
Програмістам VB .NET поступати
так само не рекомендується. Всі
програмісти добре пам'ятають, які
жаркі дискусії проходили з
приводу угод про імена
змінних. Існує складна
система префіксів (так званий
угорський запис), що дозволяє
з першого погляду визначити
тип змінних. Згідно
загальним рекомендаціям
програмування для .NET Framework застосування
угорського запису небажане. Ми
слідуватимемо цим рекомендаціям, і в
книзі префікси зустрічаються дуже
рідко.
Перетворення різнотипних значень
На думку
багатьох програмістів, колишні
версії Vb6 дуже ліберально
відносилися до перетворення типів.
В результаті виникало явище «злісного
спотворення типів» — скажімо, Vb6
дозволяв помножити строкове
представлення числа на Integer. У VB .NET
передбачений режим жорсткої
перевірки типів Option Strict. Щоб
активізувати його, включите
наступну команду в початок
програми (також можна
скористатися прапорцем Strict Type
Checking на вкладці Build діалогового
вікна Project Properties): Option Strict On При активізації
цього режиму (а це слід робити
завжди!) VB .NET вимагає, щоб
будь-які перетворення типів,
які можуть привести до втрати
даних, виконувалися явно. Наприклад,
при перетворенні Single до типу Integer
може відбутися втрата точності,
оскільки тип Integer не дозволяє
представити весь інтервал
допустимих значень типу Single. З
іншого боку, якщо втрата даних
виключена (скажімо, при
перетворенні Integer в тип Long або
Decimal), VB .NET виконує перетворення
автоматично. У документації VB .NET
перетворення без втрати даних називаються
розширяльними перетвореннями (widening
conversions). У таблиці. 3.3 переділені
допустимі розширяльні
перетворення для базових типів
даних. Таблиця 3.3. Допустимі
розширяльні перетворення для
базових типів VB .NET
Більш того, при
активному режимі жорсткої перевірки
типів ви не зможете використовувати
конструкції вигляду: Dim foo As Boolean foo = 3 У цьому
фрагменті логічної змінної foo
значення True привласнюється у вигляді
ненульового числа (у Vb6 це було
цілком поширеним явищем).
Подібні перетворення повинні виконуватися
явно: Dim foo As Boolean foo =СВооl(З) VB .NET автоматично
виконує перетворення
між символьним типом
і рядком, що складається з
одного символу. За бажання ви
можете повернутися до доісторичних
часів і відмовитися від жорсткої
перевірки типів. Для цього
досить почати модуль з
наступної команди: Option Strict Off Втім,
поступати так само не
рекомендується. Якщо вміст
змінної одного типу може бути
перетворене до іншого типу, можна
скористатися функцією явного
перетворення, як в тільки що
приведеному прикладі зі Свооl.
Функції явного перетворення
типів перераховані в таблиці. 3.4. Таблиця 3.4.
Функції явного перетворення типів
,vb
.NET виконує числові перетворення
тільки в тому випадку,
якщо перетворюване число входить в
інтервал допустимих значень нового типу;
інакше видається повідомлення про
помилку.
Ймовірно,
ви відмітили, що при описі
типів ніде не згадується тип Variant. BVB
.NET цей тип не підтримується — і
це дуже добре! У Vb6 змінні
Variant допускали зберігання
даних довільного типу.
Програмісти часто зловживали
цією можливістю, що приводило
до виникнення
нетривіальних помилок в програмах. У VB .NET всі
типи даних (навіть числові, як
Integer) є окремими випадками
типу Object. Може здатися, що тип
Object став аналогом Variant в VB .NET, але це
не так. Як буде показано в розділах 4 і
5, тип Object займає
в програмуванні .NET
значно важливіше місце і володіє
безліччю цікавих
можливостей. Ми повернемося до типу
Object в розділах 4 і 5. Нижче приведений
хрестоматійний приклад —
перетворення температури за
Цельсієм в температуру за шкалою
Фаренгейта. Ми керуємося
наступними припущеннями:
' Перетворення температури за Цельсієм в температуру за Фаренгейтом Option Strict On Module Modulel Sub Main() Dim cdeg
As Decimal Console. Writer
Enter the degrees in centigrade...") cdeg = Cdec(Console.ReadLine()) Dim fdeg
As Decimal fdeg = (((9@ / 5) *
cdeg) + 32) Console.WriteLine(cdeg
& " is " & fdeg & " degrees Fahrenheit.") Console. Readline() End Sub End
Module
Звернете увагу на суфікс @ —
він гарантує, що при
обчисленнях використовуватиметься тип Decimal. Якщо
прибрати цей суфікс, то при
включеній жорсткій перевірці типів
буде видано повідомлення про помилку! При
використанні простого оператора /
для ділення в VB .NET необхідно
враховувати деякі нюанси. За
додатковою інформацією
звертайтеся до розділу «Математичні
оператори».
Строкова
змінна містить текст в
кодуванні Unicode завдовжки до 231 (більше
2 мільярдів!) символів. Як було
показано вище, значення строкового
типу полягають в лапки: Dim message As String message = "Help" Конкатенація (об'єднання)
рядків зазвичай виконується
оператором &. Старий варіант з
оператором + теж працює, але при
відключенні жорсткої перевірки типів
він може викликати серйозні
проблеми, тому використовувати
знак + при конкатенації не
рекомендується. Старий спосіб
ідентифікації строкових
змінних з суфіксом $ (наприклад,
astringvariables) іноді використовується для
тимчасових змінних.
У вашому
розпорядженні залишилися всі
класичні строкові функції Vb6 (Left,
Right, Mid і т. д.), але версії цих функцій
з суфіксом $ тепер не
підтримуються. У таблиці. 3.5
перераховані найважливіші функції
класу String, замінюючі строкові
функції Vb6. Не забувайте, що при
багатократній модифікації рядків (наприклад,
при виклику Mid в циклі) слід
використовувати клас Stringbuilder,
описаний в розділі 4. Деякі з
приведених методів використовують
масиви, які будуть розглянуті
нижче в цьому розділі. При
програмуванні для .NET
рекомендується по можливості
використовувати методи і властивості
класу Stri ng, що входить в .NET
Framework. Найпоширеніші строкові
методи перераховані в таблиці. 3.6. Таблиця 3.5.
Основні строкові функції
Таблиця 3.6. Основні
строкові методи і властивості .NET
Framework
Оскільки в .NET
Framework рядка є об'єктам,
синтаксис виклику цих методів
достатньо логічний і зручний.
Виконаєте наступну програму: Sub Main() Dim river As String =" Mississippi Missippi" 'один
пропуск зліва Consol e. Wri teli
ne( ri ver. Tollpper ()) Console.Wri teli net
ri ver.ToLower()) Console.WriteLineCriver.Trim()) Console.
Writelinetri ver. Endswith("I")) Consol e.Wri teli ne
З ri ver.EndsWith("i")) Console.WriteLine(river.IndexOf("s")) 'Індексація
починається з 0! Console.WriteLineCriver.Insert(9. " river")) 'Індексація '
починається з 0! Consol e.ReadLine()
End Sub Результат
виглядає так: MISSISSIPPI MISSIPPI mississippi missippi Mississippi Missippi False True 3 Mississi riverppi
Missippi
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||