[[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