3-bo‘lim
O'zgaruvchilar va ma'lumot turlari
Dim bilan e'lon qilish, Integer, Double, Decimal, String, Boolean va Date turlari, Const, turlar almashinuvi va CInt ning kutilmagan yaxlitlashi.
Ushbu bo‘lim mundarijasi
O'zgaruvchi - qiymat saqlanadigan nomlangan joy. Visual Basic da u
Dim so'zi bilan e'lon qilinadi.
Module Dastur
Sub Main()
Dim ism As String = "Malika"
Dim yosh As Integer = 22
Dim boy As Double = 1.68
Dim talabami As Boolean = True
Console.WriteLine(ism)
Console.WriteLine(yosh)
Console.WriteLine(boy)
Console.WriteLine(talabami)
End Sub
End Module
Malika
22
1.68
True
Shakl har doim bir xil: Dim nom As Tur = qiymat.
Asosiy turlar #
| Tur | Nimani saqlaydi | Diapazon yoki misol |
|---|---|---|
Integer | Butun son (32 bit) | -2 147 483 648 ... 2 147 483 647 |
Long | Katta butun son (64 bit) | taxminan 9.2 kvintillion |
Double | O'nlik son | 3.14159 |
Decimal | Aniq o'nlik son | pul uchun |
String | Matn | "Namangan" |
Boolean | Rost yoki yolg'on | True / False |
Char | Bitta belgi | "A"c |
Date | Sana va vaqt | #2026-09-12# |
Module Dastur
Sub Main()
Dim katta As Long = 9000000000L
Dim harf As Char = "A"c
Dim tugilgan As Date = #3/15/2001#
Console.WriteLine(katta)
Console.WriteLine(harf)
Console.WriteLine(tugilgan.Year)
End Sub
End Module
9000000000
A
2001
Diqqat qiling: Char uchun qiymatdan keyin c harfi qo'yiladi.
Usiz "A" oddiy String bo'lib qoladi.
Dim ning qisqa shakli #
Agar boshlang'ich qiymat berilsa, turni yozmasa ham bo'ladi - kompilyator uni o'zi aniqlaydi:
Module Dastur
Sub Main()
Dim son = 42
Dim matn = "salom"
Dim kasr = 2.5
Console.WriteLine(son.GetType().Name)
Console.WriteLine(matn.GetType().Name)
Console.WriteLine(kasr.GetType().Name)
End Sub
End Module
Int32
String
Double
Integer aslida Int32 deb ataladi - bu .NET dagi haqiqiy nomi.
Turni o'zi aniqlash imkoniyati Option Infer On bilan boshqariladi va
u standart holatda yoqilgan.
Uni o'chirsangiz, Dim son = 42 da son turi Object bo'lib qoladi -
bu esa sekin va xavfli. Shuning uchun uni o'chirmang.
Bir nechta o'zgaruvchi #
Module Dastur
Sub Main()
Dim a, b, c As Integer
a = 1
b = 2
c = 3
Console.WriteLine(a + b + c)
Dim x As Integer = 10, y As String = "o'n"
Console.WriteLine($"{x} = {y}")
End Sub
End Module
6
10 = o'n
Dim a, b, c As Integer da uchalasi ham Integer bo'ladi.
Lekin boshqa tillardan kelganlar ko'pincha Dim a As Integer, b, c
deb yozadi va b bilan c ni ham Integer deb o'ylaydi. Aslida
ularda tur ko'rsatilmagan.
Chalkashmaslik uchun har bir o'zgaruvchini alohida qatorda e'lon qiling.
O'zgarmaslar #
Qiymati hech qachon o'zgarmaydigan narsalar Const bilan yoziladi:
Module Dastur
Const Pi As Double = 3.14159
Const Shahar As String = "Namangan"
Sub Main()
Dim radius As Double = 2
Console.WriteLine(Pi * radius * radius)
Console.WriteLine(Shahar)
End Sub
End Module
12.56636
Namangan
Const ga qiymat berishga urinsangiz, kompilyator xato beradi. Bu
yaxshi: tasodifan o'zgartirib qo'yishdan saqlaydi.
Turlarni almashtirish #
Bir turdan boshqasiga o'tish kerak bo'lganda C bilan boshlanadigan
funksiyalar ishlatiladi:
Module Dastur
Sub Main()
Dim matn As String = "123"
Dim son As Integer = CInt(matn)
Console.WriteLine(son + 1)
Dim kasr As Double = 9.99
Console.WriteLine(CStr(kasr))
Console.WriteLine(CInt(kasr))
End Sub
End Module
124
9.99
10
| Funksiya | Nimaga aylantiradi |
|---|---|
CInt | Integer |
CLng | Long |
CDbl | Double |
CDec | Decimal |
CStr | String |
CBool | Boolean |
CDate | Date |
CInt kutilganidek yaxlitlamaydi #
Bu - eng ko'p adashtiradigan joylardan biri:
Module Dastur
Sub Main()
Console.WriteLine(CInt(0.5))
Console.WriteLine(CInt(1.5))
Console.WriteLine(CInt(2.5))
Console.WriteLine(CInt(3.5))
End Sub
End Module
0
2
2
4
Natija g'alati ko'rinadi: 1.5 va 2.5 ikkalasi ham 2 bo'ldi.
Sabab - bankir yaxlitlashi (banker's rounding). Yarim qiymat
eng yaqin juft songa yaxlitlanadi. 0.5 -> 0, 1.5 -> 2,
2.5 -> 2, 3.5 -> 4.
Har doim yuqoriga yaxlitlansa, ko'p sonli hisob-kitobda natija asta-sekin oshib boradi. Bankda million marta yaxlitlansa, bu sezilarli xatoga aylanadi.
Juftga yaxlitlash esa yuqoriga va pastga yaxlitlashlar sonini teng qiladi, shuning uchun umumiy xato nolga yaqin bo'lib qoladi.
Agar sizga odatiy yaxlitlash kerak bo'lsa, Math.Round ni ikkinchi
argument bilan chaqiring - buni 4-bo'limda ko'ramiz.
Xavfsiz aylantirish #
Foydalanuvchi "abc" deb yozsa, CInt("abc") dasturni to'xtatadi.
TryParse esa xato bermaydi - u shunchaki muvaffaqiyatni qaytaradi:
Module Dastur
Sub Main()
Dim natija As Integer
If Integer.TryParse("456", natija) Then
Console.WriteLine($"O'qildi: {natija}")
Else
Console.WriteLine("Bu son emas")
End If
If Integer.TryParse("salom", natija) Then
Console.WriteLine($"O'qildi: {natija}")
Else
Console.WriteLine("Bu son emas")
End If
End Sub
End Module
O'qildi: 456
Bu son emas
Foydalanuvchidan kelgan har qanday matnni doim TryParse bilan
o'qing. CInt ni faqat qiymat to'g'ri ekaniga ishonganda ishlating.
Decimal - pul uchun #
Module Dastur
Sub Main()
Dim d As Double = 0.1 + 0.2
Dim m As Decimal = 0.1D + 0.2D
Console.WriteLine(d)
Console.WriteLine(m)
Console.WriteLine(d = 0.3)
Console.WriteLine(m = 0.3D)
End Sub
End Module
0.30000000000000004
0.3
False
True
Double ikkilik kasrlar bilan ishlaydi va 0.1 ni aniq saqlay
olmaydi. Decimal esa o'nlik asosda ishlaydi.
Yuqoridagi False - haqiqiy dasturlarda hisob-kitob xatolarining
eng keng tarqalgan sababi.
Narx, hisob raqami, soliq - hammasi Decimal bo'lishi kerak.
Qiymatdan keyin D harfini qo'yishni unutmang: 19.99D.
Nothing #
Qiymat berilmagan o'zgaruvchi Nothing bo'ladi:
Module Dastur
Sub Main()
Dim matn As String = Nothing
Dim son As Integer
Console.WriteLine(son)
Console.WriteLine(matn Is Nothing)
Console.WriteLine(String.IsNullOrEmpty(matn))
End Sub
End Module
0
True
True
Diqqat: Integer uchun Nothing - bu 0, String uchun esa
"hech narsa yo'q". Har bir tur o'zining standart qiymatiga ega.
matn = Nothing emas, matn Is Nothing deb yoziladi.
= belgisi qiymatlarni solishtiradi, Is esa obyektning o'zini.
String uchun ikkalasi ishlagandek tuyulishi mumkin, lekin sinflar
bilan ishlaganda farq juda muhim bo'ladi.
- O'z ismingiz, yoshingiz va bo'yingizni saqlaydigan uchta o'zgaruvchi yarating va ekranga chiqaring.
Dim son = 42dasonqaysi tur bo'lishiniGetType().Namebilan tekshiring.Charnicharfisiz yozib ko'ring va xatoni o'qing.Constga yangi qiymat berishga urinib, xato matnini yozib oling.CInt(4.5)vaCInt(5.5)natijalarini taxmin qiling, keyin tekshiring.Integer.TryParsebilan "12abc" ni o'qishga urinib ko'ring.0.1 + 0.2 = 0.3niDoublevaDecimalda solishtiring.Integerning eng katta qiymatiga 1 qo'shsangiz nima bo'ladi?Dim a, b As Integerda ikkala o'zgaruvchi turini tekshiring.Dateturidagi o'zgaruvchidan oy raqamini chiqaring.
Xulosa #
- O'zgaruvchi
Dim nom As Tur = qiymatshaklida e'lon qilinadi. - Boshlang'ich qiymat berilsa, turni yozmasa ham bo'ladi - buni
Option Inferta'minlaydi. Integer- 32 bitli butun son, uning.NETdagi nomiInt32.Constqiymati hech qachon o'zgarmaydi.CIntbankir yaxlitlashini qo'llaydi:2.5->2,3.5->4.- Foydalanuvchi kiritgan matnni
TryParsebilan o'qing,CIntbilan emas. - Pul uchun har doim
Decimal, hech qachonDoubleemas. Nothingni tekshirishda=emas,Isishlatiladi.
Keyingi bo'limda operatorlar va ifodalarni ko'ramiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.