[[oktatas:programozás:basic:visual basic|< Visual Basic]]
====== Visual Basic .Net nyelv ======
* **Szerző:** Sallai András
* Copyright (c) Sallai András, 2017
* Licenc: GNU Free Documentation License 1.3
* Web: http://szit.hu
===== Bevezetés =====
A Visual Basic .Net a Basic nyelvek egyik dialektusa, amelyet a Microsoft fejlesztett
a Visual Studio IDE-vel együtt. A Visual Basic 6.0 után az Microsoft áttért
.Net keretrendszerre, ezzel együtt az Objektum Orientált lehetőségekre.
A .Net keretrendszernek sokáig nem volt nyílt forráskódú, több platformos
megvalósítása, ez keltette éltere a Mono nevű projektet, amely .Net keretrendszer
klónjának is tekinthető.
A .Net keretrendszernek azóta megjelent egy Linuxra is telepíthető
változata, amely .Net Core néven ismert, gyártója a Microsoft. Ez
egyelőre csak C# és F# nyelven használható (2017), de ígérve van a Visua Basic
támogatás is.
Az alábbi leírás Mono és/vagy .Net keretrendszeren is használható Visual Basic .Net nyelvet mutatja be.
===== Helló Világ =====
Module Module1
Sub Main()
Console.WriteLine("Helló Világ")
End Sub
End Module
Fordítás:
vbnc hello.vb
Futtatás:
mono hello.exe
vagy:
chmod +x hello.exe
./hello.exe
A Visual Basic .Net modulokkal dolgozik. A modulokat, a "Module" szóval kezdjük és az "End Module" szóval fejezzük be. A modulokon belül eljárásokat hozhatunk létre, amit "Sub" szóval kezdünk és "End Sub" szóval fejezünk be. A Module és Sub szavak után is meg kell adnunk a modul nevét. Minden programnak kötelezően tartalmazni kell egy Main nevű eljárást. A futtató ebből tudja, hogy melyik eljárást kell elsőként végrehajtani.
===== Megjegyzések =====
Visual Basic megjegyzéseket (') karakterrel kell bevezetni.
' Visual Basic megjegyzés
Akár utasítások után is állhat:
a = 35 ' értékadás
===== Kivitel =====
Console.WriteLine("egy")
Console.WriteLine("kettő")
Console.Write("egy")
Console.Write("kettő")
Változók kiíratása:
Dim a As Double = 35.27
Console.WriteLine(a)
Ha egy aritmetikai kifejezést írunk a zárójelbe, a kifejezés
kiértékelődik, és annak eredménye jelenik meg.
Console.WriteLine(3 + 5)
===== Escape szekvenciák =====
Console.WriteLine("egy" & vbCrLf & "kettő")
Console.WriteLine("egy" & vbTab & "kettő")
Karakter megjelenítése kód alapján:
ChrW(8226)
===== Visual Basic adattípusok =====
^ név ^ méret ^ értéktartomány ^
| Byte | 1 bájt | 0 -- 255 (előjel nélkül) |
| SByte | 1 bájt | -128 -- 127 (előjeles) |
| Short | 2 bájt | -32 768 -- 32 767 (előjeles) |
| UShort | 2 bájt | 0 -- 65 535 (előjeles) |
| Integer | 4 bájt | -2 147 483 648 -- 2 147 483 647 (előjeles) |
| UInteger | 4 bájt | 0 -- 4 294 967 295 (előjel nélkül) |
| Long | 8 bájt | -9 223 372 036 854 775 808 -- \\ 9 223 372 036 854 775 807 (előjeles) |
| ULong | 8 bájt | 0 -- 18 446 744 073 709 551 615 (1.8...E+19 †) (előjel nélkül) |
| Single | 4 bájt | negatív értékek: \\ -3.4028235E+38 -- -1.401298E-45 \\ pozitív értékek: \\ 1.401298E-45 -- 3.4028235E+38 |
| Double | 8 bájt | negatív értékek számára: \\ -1.79769313486231570E+308 -- \\ -4.94065645841246544E-324 \\ pozitív értékek számára: \\ 4.94065645841246544E-324 -- \\ 1.79769313486231570E+308 |
| Decimal | 16 bájt | tizedesvessző nélkül: \\ 0 -- +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9...E+28) \\ tizedesvesszővel: \\ 0 -- +/-7.9228162514264337593543950335 \\ a tizedesvesszőtől jobbra 28 hely \\ \\ a legkisebb nem nulla szám: \\ +/-0.0000000000000000000000000001 (+/-1E-28) |
| Char | 2 bájt | 0 -- 65535 (előjel nélkül) |
| Boolean | attól függ \\ hogyan implementálták \\ az adott platformon | True vagy False |
| String | megvalósítástól függ | 0 és 2 milliárd között Unicode karakter |
| Date | 8 bájt | január 1, 0:00:00 (éjfél), 0001 -től -- december 31-ig délután 11:59:59, 9999 |
| Object | 32 bites platformon 4 bájt \\ 64 bites platformon 8 bájt | bármilyen típusú osztály tárolható benne |
===== Visual Basic változók =====
Változót mindig a Dim utasítással hozunk létre.
A változók kétféleképpen hozhatók létre:
* explicit -- megadom a változó nevét majd a típusát
* implicit -- csak a változó nevét adom meg
Dim a
Dim b As Integer
A változónak rögtön értéket is adhatok:
Dim x As Integer = 100
Dim y As Integer = 6
Vagy vegyesen:
Dim x As Integer = 100
Dim y As Integer = 6
Dim z As Integer
===== Nevesített konstansok =====
Nevesített állandót a Const módosítóval hozhatok létre, például:
Const Pi As Double = 3.1415
===== Operátorok =====
* aritmetikai
* összehasonlító
* összefűző
* logikai bitszintű
==== Aritmetikai ====
^ operátor ^ leírás ^
| + | összeadás |
| - | kivonás |
| * | szorzás |
| / | osztás |
| \ | egész osztás |
| ^ | hatványozás |
Dim x As Integer
x = 5 + 2
x = 4 - 2
Dim x As Integer = 49
Dim y As Integer
y = -x
Szorzás osztás:
Dim y As Double
y = 27 * 17.48
y = 12 / 5
Hatványozás:
Dim z As Double
z = 2 ^ 3
Egész osztás:
Dim k As Integer
k = 23 \ 5
' k értéke 4
Modulus képzés:
Dim x As Integer = 100
Dim y As Integer = 6
Dim z As Integer
z = x Mod y
' z tartalma 4
Dim a As Double = 100.3
Dim b As Double = 4.13
Dim c As Double
c = a Mod b
' c értéke: 1.18
==== Összehasonlító ====
^ Számok összehasonlítása ^^
^ operátor ^ példa ^
| = | 3 = 3 eredménye true |
| > | 3 > 3 eredménye false |
| < | 3 < 2 eredménye false |
| >= | 3 >= 2 eredménye true |
| <= | 3 <= 2 eredménye false |
==== Precedencia ====
^ operátor ^ precedencia sorrend ^
| ( ) | mindig elsőként értelmezve |
| ^ | hatványozás |
| – | negáció negatív számmá alakít |
| * / | szorzás és osztás |
| \ | egész osztás |
| Mod | modulusképzés |
| + - | összeadás és kivonás |
===== Formázott kivitel =====
Százalék:
Dim a As Double = 35.27
Console.WriteLine(FormatPercent(a))
' 3 527,00%
Console.WriteLine("{0} %", 10)
' 10 %
Forint:
Dim a As Double = 35.27
Console.WriteLine("{0:c}", a)
' 35 Ft
Fixpontos alak:
Console.WriteLine("{0:f}", 10)
' 10,00
Lebegőpontos alak:
Console.WriteLine("{0:e}", 10)
' A kimenet: 1,000000e+001
Vezető nullák:
Console.WriteLine("{0:00000}", 10)
'A kimenet: 00010
Hány helyen legyen ábrázolva:
Console.WriteLine("{0,10}", 10)
'A kimenet: 10
Kombinálva:
Console.WriteLine("Érték: {0,10:00000}", 85)
' A kimenet:
' Érték: 00085
Console.WriteLine("Érték: {0,-10:00000}", 85)
' A kimenet
' |Érték: 00085 |
Negatív számok és a nulla:
Console.WriteLine("{0:#;minusz #}", 85)
Console.WriteLine("{0:#;minusz #}", -85)
Console.WriteLine("{0:#;minusz #;nulla}", 0)
' 85
' minusz 85
' nulla
Ezredes tagolás:
Console.WriteLine("{0:+### ### ### ###}", 123456789123)
'+123 456 789 123
Telefonszám egy lehetséges formátuma:
Console.WriteLine("{0:##-####-#####}", 1234567891)
' 1-2345-67891
Tizedesjegyek száma:
Console.WriteLine("{0:#.##}", 55.3242)
' 55,32
Dim a As Double = 35.27
Console.Write(Format(a, "###0.0000"))
' 35,2700
===== Matematikai osztály =====
Console.WriteLine(Math.Abs(-9))
Console.WriteLine(Math.Sqrt(9))
Console.WriteLine(Math.Sin(1 * Math.PI / 180))
Console.WriteLine(Math.Pow(2, 4))
===== Dátum lekérdezése =====
Console.WriteLine(Now)
' 2017.04.11. 23:47:23
Console.WriteLine(Format(Now, "yyyy-MM-dd"))
' 2017-04-11
Console.WriteLine(Format(Now, "HH:mm"))
' 23:46
Console.WriteLine(Format(Now, "yyyy. MMMM. dd."))
' 2017. április. 11.
Console.WriteLine(Format(Now, "yyyy. MMM dd."))
' 2017. ápr. 11.
===== Véletlen szám generálás =====
Dobókocka dobás szimulációja:
Module Modul1
Sub Main()
Dim generator As New Random
Dim kockaDobas As Integer
kockaDobas = Int(generator.Next(1, 7))
Console.WriteLine(kockaDobas)
End Sub
End Module
===== Konvertálás =====
===== Bevitel =====
===== Szelekció =====
If a = 0 Then
Console.WriteLine("Az a nulla")
Else
Console.WriteLine("Az a nem nulla")
End If
===== Iteráció =====
For i As Integer = 0 To 10
Console.WriteLine(i)
Next
Dim index As Integer = 0
While index <= 10
Console.WriteLine(index.ToString & " ")
index += 1
End While
Dim szam As Integer = 0
Do
Debug.Write(szam.ToString & " ")
szam += 1
Loop Until szam > 10
Kollekció bejárása:
For Each egyElem As Object In kollekció
'Amit szeretnénk csinálni az egyes elemekkel
Next egyElem
===== Karaktersorozatok =====
==== Konkatenálás ====
Dim mondat As String = "egy"
Console.WriteLine(mondat & " kettő")
Dim s1 As String = "egy"
Dim s2 As String = "kettő"
Dim s3 As String
s3 = s1 + s2
Console.WriteLine(s3)
==== Hossz ====
Karaktersorozat hosszának mérése:
Module Module1
Sub Main()
Dim szoveg As String
Dim meret As Integer
szoveg = "alma:körte:barack"
meret = Len(szoveg)
Console.WriteLine(meret)
End Sub
End Module
==== Nagybetűssé ====
'Nagybetűsség alakítás
Dim mondat As String = "Egy alma 1234"
'Eredmény: "EGY ALMA 1234".
Dim negybetus As String = UCase(mondat)
==== A string egy része ====
A sztring egy részét a Mid$ vagy Mid függvénnyel vehetjük:
Module Module1
Sub Main()
Dim mondat As String = "Egy alma"
Dim resz As String = Mid(mondat, 1, 3)
Console.WriteLine(resz)
End Sub
End Module
A "Egy" szó íródik a képernyőre.
==== Trim ====
Dim s As String = " alma "
Console.WriteLine(Trim(s))
==== ASCII kód ====
Dim a As Integer
'65 kerül bele:
a = Asc("A")
'a értéke 97:
a = Asc("a")
'a értéke 65
a = Asc("Ananász")
Dim ch As Char
ch = Chr(65) ' értéke "A"
ch = Chr(97) ' értéke "a"
==== Szöveg darabolása ====
Module Module1
Sub Main()
Dim szoveg As String
Dim tomb(4) As String
szoveg = "alma:körte:barack"
tomb = Split(szoveg, ":")
Console.WriteLine(tomb(1))
End Sub
End Module
===== Tömb =====
Dim tomb(4) As Integer
tomb(0) = 35
tomb(1) = 27
tomb(2) = 37
tomb(3) = 63
tomb(4) = 92
Console.WriteLine(tomb(0))
Dim nevek(4) As String
nevek(0) = "Mari"
nevek(1) = "Kati"
nevek(2) = "Teri"
nevek(3) = "Lali"
nevek(4) = "Dani"
Console.WriteLine(nevek(0))
Kezdőértékkel:
Dim nevek As String() = {"Tomi", "Kati", "Mari", "Teri"}
Console.WriteLine(nevek(0))
Tömb bejárása:
Dim nevek As String() = {"Tomi", "Kati", "Mari", "Teri"}
For Each nev As String In nevek
Console.WriteLine(nev)
Next nev
===== Dinamikus tömbök =====
Module Modul1
Sub Main()
Dim lista As New System.Collections.Generic.List(Of String)()
lista.Add("egy")
lista.Add("kettő")
lista.Add("három")
Console.WriteLine(lista(0))
End Sub
End Module
Module Modul1
Sub Main()
Dim lista As New System.Collections.ArrayList
lista.Add("egy")
lista.Add("kettő")
lista.Add("három")
Console.WriteLine(lista(0))
End Sub
End Module
Importálás fordításkor:
Module Modul1
Sub Main()
Dim lista As New ArrayList
lista.Add("egy")
lista.Add("kettő")
lista.Add("három")
Console.WriteLine(lista(0))
End Sub
End Module
Fordítás:
vbnc lista.vb -imports:System.Collections
Osztállyal:
Public Class Program01
Public Shared Sub Main()
Dim lista As New ArrayList
lista.Add("egy")
lista.Add("kettő")
lista.Add("három")
Console.WriteLine(lista(0))
End Sub
End Class
Fordítás:
vbnc Program01.vb -imports:System.Collections
Importálás forrásból:
Imports System.Collections
Public Class Application
Public Shared Sub Main()
Dim lista As New ArrayList
lista.Add("egy")
lista.Add("kettő")
Console.WriteLine(lista(0))
End Sub
End Class
Metódusok:
* arrayList.Clear() -- össze elem törlése
* arrayList.Add(objektum) -- egy elem hozzáadása
* arrayList.RemoveAt(index) -- adott indexű elem törlése
* arrayList.Remove(objektum) -- megadott elem törlése
* arrayList.Contains(objektum):bool -- tartalmazás
* arrayList.Insert(index, objektum) -- adott indexre beszúrás
* arrayList.IndexOf(object) : int -- Keresés
* arrayList.LastIndexOf(object) : int -- utolsó keresése
* arrayList.RemoveRange(int, int) -- tartomány törlése
* arrayList.Sort() -- rendezés
* arrayList.Reverse() -- rendezés csökkenő sorrenbe
* ToArray() : object[] -- tömbbé
Mezők:
* Count -- az elemek száma
Lista bejárása:
Imports System.Collections
Public Class Application
Public Shared Sub Main()
Dim lista As New ArrayList
lista.Add("egy")
lista.Add("kettő")
lista.Add("három")
lista.Add("négy")
For Each nev As String In lista
Console.WriteLine(nev)
Next nev
End Sub
End Class
Kollekció:
Public Class Application
Public Shared Sub Main()
Dim lista As New Collection
lista.Add("egy")
lista.Add("kettő")
lista.Add("három")
System.Console.WriteLine(lista(1))
End Sub
End Class
A kollekcióknál az indexelés 1-től kezdődik, ellentétben a ArrayListtel és a Listtel.
===== Linkek =====
* http://progopedia.com/implementation/mono-vbnet/
* http://docs.go-mono.com/?link=T%3aSystem.Collections.ArrayList%2fM
* https://msdn.microsoft.com/en-us/library/system.math.aspx