Gut lesbare Sprache für .NET mit Wurzeln in BASIC
Ausführen: Datei Program.vb in einem Projekt (dotnet new console -lang VB) speichern und mit dotnet run ausführen (.NET SDK von dotnet.microsoft.com).
Module mit Sub Main(); Blöcke enden mit End ...Dim name As Typ = Wert deklariert Variablen, Const Konstanten/ ergibt Double, \ ist die Ganzzahldivision, Mod der Rest, ^ die Potenz& verkettet Strings, $"..." interpoliertdotnet new console -lang VB -o hallo # Projekt anlegen
cd hallo && dotnet run # bauen und starten
dotnet build # nur bauen
dotnet add package Newtonsoft.Json # NuGet-PaketIf/ElseIf/Else/End If, Select Case, If(bedingung, a, b) für VerzweigungenFor ... Next, For Each, While, Do ... LoopSub (ohne Wert) und Function (mit Return); ByVal, ByRef, Optional, ParamArrayFunction(x) x * 2Module Program
Function Vorzeichen(n As Integer) As String
If n > 0 Then
Return "positiv"
ElseIf n < 0 Then
Return "negativ"
Else
Return "null"
End If
End Function
Sub Main()
Console.WriteLine(Vorzeichen(5) & " " & Vorzeichen(-2) & " " & Vorzeichen(0))
Dim n As Integer = 15
If n Mod 15 = 0 Then
Console.WriteLine("FizzBuzz")
ElseIf n Mod 3 = 0 Then
Console.WriteLine("Fizz")
Else
Console.WriteLine(n)
End If
Dim note As Integer = 2
Select Case note
Case 1
Console.WriteLine("sehr gut")
Case 2, 3
Console.WriteLine("gut bis befriedigend")
Case 4 To 5
Console.WriteLine("ausreichend bis mangelhaft")
Case Is > 5
Console.WriteLine("ungültig")
Case Else
Console.WriteLine("unbekannt")
End Select
Dim status As String = If(n > 10, "groß", "klein")
Console.WriteLine(status)
Console.WriteLine(If(Nothing, "Standardwert"))
Console.WriteLine(n > 3 AndAlso n < 20)
Console.WriteLine(n < 3 OrElse n = 15)
Console.WriteLine(Not (n = 15))
End Sub
End Module{...} haben feste Größe, List(Of T) wächst; Dictionary, HashSet, Stack, Queuea(0)Select, Where, OrderBy, GroupBy) und Abfrageausdrücke (From ... Select)From {...} initialisierenImports System.Collections.Generic
Module Program
Sub Main()
Dim a As Integer() = {5, 3, 9, 1, 7}
Console.WriteLine(a.Length & " " & a(0) & " " & a(a.Length - 1))
a(0) = 50
Array.Sort(a)
Console.WriteLine(String.Join(", ", a))
Array.Reverse(a)
Console.WriteLine(String.Join(", ", a))
Dim m(1, 2) As Integer
m(1, 2) = 7
Console.WriteLine(m(1, 2) & " " & m.GetLength(0) & "x" & m.GetLength(1))
Dim l As New List(Of Integer) From {5, 3, 9}
l.Add(1)
l.Insert(0, 100)
l.Remove(3)
Console.WriteLine(String.Join(", ", l))
Console.WriteLine(l.Count & " " & l.Contains(9) & " " & l.IndexOf(9))
l.Sort()
Console.WriteLine(String.Join(", ", l))
l.Reverse()
Console.WriteLine(String.Join(", ", l))
For Each x In l
Console.Write(x & " ")
Next
Console.WriteLine()
Dim zahlen = Enumerable.Range(1, 5).ToList()
Console.WriteLine(String.Join(" ", zahlen))
ReDim Preserve a(7)
Console.WriteLine(a.Length)
End Sub
End ModuleClass, Inherits, MustInherit, Overridable/Overrides, MyBase, MeInterface mit Implements; Structure ist ein Werttyp, Enum eine AufzählungProperty mit Get/Set, Shared für statische MitgliederEvent, RaiseEvent, Handles, AddHandler) und Delegates (Func, Action)Public Class Person
Public Property Name As String
Public Property Alter As Integer
Private _geheim As Integer = 42
Public Sub New(name As String, alter As Integer)
Me.Name = name
Me.Alter = alter
End Sub
Public Function IstVolljaehrig() As Boolean
Return Alter >= 18
End Function
Public Overrides Function ToString() As String
Return $"{Name} ({Alter})"
End Function
Public Shared Function Kind(name As String) As Person
Return New Person(name, 5)
End Function
End Class
Module Program
Sub Main()
Dim p As New Person("Mia", 17)
Console.WriteLine(p)
p.Alter = 18
Console.WriteLine(p.IstVolljaehrig())
Console.WriteLine(Person.Kind("Ben"))
Dim q = New Person("Tom", 25) With {.Alter = 26}
Console.WriteLine(q)
Console.WriteLine(p Is q)
Console.WriteLine(p.Equals(p))
End Sub
End ModuleLeft, Right, Mid, StrReverseSystem.IO.File, Path, Directory; Using gibt Ressourcen freiDateTime und TimeSpan rechnen mit Datum und ZeitTry ... Catch ... When ... Finally behandelt AusnahmenImports System.Text
Module Program
Sub Main()
Dim s As String = "Hallo VB.NET-Welt"
Console.WriteLine(s.Length & " " & s.ToUpper() & " " & s.ToLower())
Console.WriteLine(s(0) & " " & s.Substring(6, 2) & " " & s.Substring(6))
Console.WriteLine(s.Replace("Welt", "Erde"))
Console.WriteLine(String.Join("|", s.Split(" "c, "-"c)))
Console.WriteLine(s.Contains("VB") & " " & s.StartsWith("Hallo") & " " & s.EndsWith("x"))
Console.WriteLine(s.IndexOf("VB") & " " & s.LastIndexOf("l"))
Console.WriteLine("[" & " trim ".Trim() & "]")
Console.WriteLine(New String("*"c, 5) & " " & "ab".PadLeft(5, "_"c) & " " & "ab".PadRight(5, "_"c))
Console.WriteLine(String.Format("{0,-6}|{1,6}|{2:F2}|{3:X}", "li", "re", Math.PI, 255))
Console.WriteLine($"{42:D5} {1234567:N0} {0.256:P1}")
Console.WriteLine(CInt("17") + 1)
Dim zahl As Integer
Console.WriteLine(Integer.TryParse("abc", zahl) & " " & Integer.TryParse("42", zahl) & " " & zahl)
Console.WriteLine(Asc("A") & " " & Chr(66) & " " & AscW("a"c))
Console.WriteLine(StrReverse("Basic"))
Console.WriteLine(UCase("x") & LCase("Y"))
Console.WriteLine(Left("Visual", 3) & " " & Right("Visual", 3) & " " & Mid("Visual", 2, 3))
Console.WriteLine("abc" < "abd")
Console.WriteLine("Apfel".CompareTo("Birne"))
Console.WriteLine(String.Equals("a", "A", StringComparison.OrdinalIgnoreCase))
Dim sb As New StringBuilder()
For i As Integer = 1 To 5
sb.Append(i).Append(","c)
Next
Console.WriteLine(sb.ToString().TrimEnd(","c))
Console.WriteLine("Zeile1" & vbCrLf & "Zeile2" & vbTab & "Tab")
End Sub
End ModuleClass Kiste(Of T), Function F(Of T As IComparable(Of T))(...)Async Function ... As Task(Of T) mit Await; Task.WhenAll für ParallelitätSyncLock und Interlocked schützen gemeinsamen ZustandParallel.For verteilt Arbeit auf mehrere KernePublic Class Kiste(Of T)
Public Property Inhalt As T
Public Sub New(inhalt As T)
Me.Inhalt = inhalt
End Sub
Public Function Zeige() As String
Return $"Kiste mit {Inhalt}"
End Function
End Class
Module Program
Function Groesster(Of T As IComparable(Of T))(liste As T()) As T
Dim m As T = liste(0)
For Each x In liste
If x.CompareTo(m) > 0 Then m = x
Next
Return m
End Function
Sub Tausche(Of T)(ByRef a As T, ByRef b As T)
Dim tmp As T = a
a = b
b = tmp
End Sub
Sub Main()
Console.WriteLine(New Kiste(Of Integer)(42).Zeige())
Console.WriteLine(New Kiste(Of String)("Text").Zeige())
Console.WriteLine(Groesster({3, 9, 4}))
Console.WriteLine(Groesster({"b", "z", "a"}))
Dim a As String = "x", b As String = "y"
Tausche(a, b)
Console.WriteLine(a & b)
End Sub
End ModuleGroupBy, Sum, OrderBy ersetzt SchleifenWith-Initialisierer (New T With {...}) erzeugen Objekte kompaktModule Program
Function Sieb(n As Integer) As List(Of Integer)
Dim prim(n) As Boolean
For i As Integer = 2 To n
prim(i) = True
Next
For i As Integer = 2 To CInt(Math.Sqrt(n))
If prim(i) Then
For j As Integer = i * i To n Step i
prim(j) = False
Next
End If
Next
Dim erg As New List(Of Integer)
For i As Integer = 2 To n
If prim(i) Then erg.Add(i)
Next
Return erg
End Function
Sub Main()
Console.WriteLine(String.Join(" ", Sieb(50)))
Console.WriteLine(Sieb(10000).Count)
End Sub
End ModuleOption Strict On und LINQ machen Code sicherer und kürzerModule Program
Sub Zeile(name As String, wert As Object)
Console.WriteLine(name.PadRight(22) & wert.ToString())
End Sub
Sub Main()
Zeile("CInt(3.5)", CInt(3.5))
Zeile("CInt(2.5)", CInt(2.5))
Zeile("CDbl(""2.5"") + 1", CDbl("2.5") + 1)
Zeile("CBool(0)", CBool(0))
Zeile("CStr(True)", CStr(True))
Zeile("TypeName(1)", TypeName(1))
Zeile("IsNumeric(""12"")", IsNumeric("12"))
Zeile("IsNumeric(""x"")", IsNumeric("x"))
Zeile("Format(1234.5, ""N1"")", Format(1234.5, "N1"))
Zeile("Int(-2.5)", Int(-2.5))
Zeile("Fix(-2.5)", Fix(-2.5))
Zeile("Math.Sign(-9)", Math.Sign(-9))
Zeile("Len(""abc"")", Len("abc"))
Zeile("InStr(""abc"", ""c"")", InStr("abc", "c"))
Zeile("Replace(""aXa"", ""X"", ""-"")", Replace("aXa", "X", "-"))
Zeile("Nothing Is Nothing", Nothing Is Nothing)
Zeile("5 Mod 3", 5 Mod 3)
Zeile("-5 \ 2", -5 \ 2)
Zeile("If(True, 1, 2)", If(True, 1, 2))
End Sub
End Module