cv.cm

Lập trình · Ngôn ngữ lập trình

Hướng dẫn Visual Basic .NET cho người mới bắt đầu

8 phút đọc

Trả lời nhanh

Visual Basic .NET (VB.NET) là ngôn ngữ hướng đối tượng, kiểu tĩnh, dành cho nền tảng .NET, với từ khóa giống tiếng Anh như Dim, If ... Then ... End If và For ... Next. Nó không phân biệt hoa thường và dùng cùng các thư viện .NET với C#. Tạo dự án bằng dotnet new console -lang VB và chạy bằng dotnet run. VBA, ngôn ngữ macro bên trong Microsoft Office, là họ hàng cũ hơn với cú pháp tương tự.

Visual Basic .NET là gì và ai dùng nó

VB.NET là bản kế thừa trên .NET của Visual Basic cổ điển (VB6). Nó biên dịch ra cùng ngôn ngữ trung gian với C#, nên hai ngôn ngữ có thể dùng chung thư viện và thậm chí trộn trong một solution. Nó chủ yếu được dùng cho ứng dụng máy tính để bàn Windows (Windows Forms, WPF), công cụ nghiệp vụ nội bộ, ứng dụng web ASP.NET và bảo trì các cơ sở mã VB hiện có.

Microsoft vẫn hỗ trợ Visual Basic trên .NET hiện đại, nhưng đã cho biết không có kế hoạch phát triển ngôn ngữ với các tính năng mới lớn; các tính năng .NET mới thường xuất hiện ở C# trước. Với dự án mới không có sẵn mã VB, C# là lựa chọn phổ biến hơn, nhưng VB.NET vẫn là ngôn ngữ dễ đọc để học lập trình và viết phần mềm nghiệp vụ.

Cài đặt và chạy Hello, world

Cài .NET SDK (Windows, macOS hoặc Linux). Visual Studio trên Windows cũng có sẵn mẫu Visual Basic và trình thiết kế biểu mẫu trực quan.

dotnet new console -lang VB -o HelloVB
cd HelloVB
dotnet run
# Hello, world!
' Program.vb
Imports System

Module Program
    Sub Main(args As String())
        Console.WriteLine("Hello, world!")
    End Sub
End Module

Module chứa các thủ tục dùng chung, và Sub Main là điểm vào. Chú thích bắt đầu bằng dấu nháy đơn '. Mỗi câu lệnh thường kết thúc ở cuối dòng; không có dấu chấm phẩy hay dấu ngoặc nhọn.

Biến và các kiểu cơ bản

Khai báo biến bằng Dim name As Type. Với Option Infer On (mặc định) bạn có thể bỏ kiểu khi gán giá trị. Hãy đặt Option Strict On ở đầu mỗi tệp (hoặc đặt trong dự án) để các chuyển đổi ngầm định rủi ro trở thành lỗi biên dịch.

KiểuVí dụGhi chú
IntegerDim n As Integer = 4232 bit; Long là 64 bit
DoubleDim x As Double = 3.14Số dấu phẩy động 64 bit
DecimalDim price As Decimal = 19.99DSố thập phân chính xác, phù hợp với tiền bạc
StringDim s As String = "hello"Nối chuỗi bằng &
CharDim c As Char = "a"cMột ký tự đơn, hậu tố c
BooleanDim ok As Boolean = TrueTrue / False
DateDim d As Date = #2026-01-15#Giá trị ngày và giờ
Option Strict On
Module Types
    Sub Main()
        Dim name As String = "Ana"
        Dim age = 30                  ' inferred as Integer
        Console.WriteLine(name & " is " & age.ToString())
        Console.WriteLine($"Next year {name} is {age + 1}")
        Console.WriteLine(7 / 2)      ' 3.5 (always Double)
        Console.WriteLine(7 \ 2)      ' 3 (integer division)
        Console.WriteLine(7 Mod 2)    ' 1
    End Sub
End Module

Luồng điều khiển

Dim score = 85
If score >= 90 Then
    Console.WriteLine("A")
ElseIf score >= 80 Then
    Console.WriteLine("B")
Else
    Console.WriteLine("C")
End If

Select Case score
    Case 90 To 100
        Console.WriteLine("excellent")
    Case 80 To 89
        Console.WriteLine("good")
    Case Else
        Console.WriteLine("keep going")
End Select

For i = 1 To 3
    Console.WriteLine($"{i} squared is {i * i}")
Next

Dim n = 3
Do While n > 0
    n -= 1
Loop

Các câu lệnh này nằm bên trong một Sub. For i = 1 To 3 gồm cả hai đầu; thêm Step -1 để đếm ngược. For Each item In collection lặp qua mọi collection. Dùng Exit For hoặc Exit Do để thoát vòng lặp sớm. Với điều kiện, nên dùng AndAlso và OrElse: chúng dừng đánh giá ngay khi biết kết quả, còn And và Or luôn đánh giá cả hai vế.

Sub, hàm và lambda

Sub không trả về giá trị; Function thì có. Tham số mặc định được truyền ByVal (một bản sao); ByRef cho phép thủ tục thay đổi biến của bên gọi. Tham số có thể là Optional với giá trị mặc định.

Function Add(a As Integer, b As Integer) As Integer
    Return a + b
End Function

Sub Greet(Optional name As String = "world")
    Console.WriteLine($"Hello, {name}!")
End Sub

Sub Increment(ByRef value As Integer)
    value += 1
End Sub

' Inside Sub Main:
Dim x = 5
Increment(x)                                  ' x is now 6
Greet()                                       ' Hello, world!
Dim square = Function(n As Integer) n * n     ' lambda
Console.WriteLine(square(Add(1, 2)))          ' 9

Mảng, List và Dictionary

Dim nums() As Integer = {3, 1, 2}
Dim five(4) As Integer            ' 5 elements, indexes 0 to 4
Array.Sort(nums)
Console.WriteLine(String.Join(", ", nums))   ' 1, 2, 3

Dim names As New List(Of String) From {"Ana", "Ben"}
names.Add("Cleo")
Console.WriteLine(names.Count)               ' 3

Dim ages As New Dictionary(Of String, Integer)
ages("Ana") = 30
ages("Ben") = 17
For Each pair In ages
    Console.WriteLine($"{pair.Key}: {pair.Value}")
Next

Mảng và danh sách được đánh chỉ số từ 0 bằng dấu ngoặc đơn: nums(0). Kiểu generic dùng Of: List(Of String) là dạng VB của List<string> trong C#. Lưu ý Dim five(4) khai báo cận trên chứ không phải độ dài, nên mảng có năm phần tử.

Tính năng nổi bật: lớp, thuộc tính và truy vấn LINQ

VB.NET hướng đối tượng hoàn toàn: lớp có thuộc tính, phương thức, hàm khởi tạo (Sub New), kế thừa (Inherits), interface (Implements) và sự kiện (Event, RaiseEvent, Handles). Truy vấn LINQ có thể viết bằng cú pháp truy vấn dễ đọc.

Public Class Person
    Public Property Name As String
    Public Property Age As Integer

    Public Sub New(name As String, age As Integer)
        Me.Name = name
        Me.Age = age
    End Sub
End Class

' Inside Sub Main:
Dim people As New List(Of Person) From {
    New Person("Ana", 30),
    New Person("Ben", 17)
}
Dim adults = From p In people
             Where p.Age >= 18
             Select p.Name
For Each adultName In adults
    Console.WriteLine(adultName)   ' Ana
Next

Vì VB không phân biệt hoa thường, Name và name là cùng một định danh; trong hàm khởi tạo, Me.Name chỉ thuộc tính còn name chỉ tham số. Những tiện ích riêng khác của VB gồm khối With ... End With, XML literal và namespace My cho các tác vụ thông dụng.

Xử lý lỗi

VB.NET dùng xử lý ngoại lệ có cấu trúc: Try, Catch, Finally và Throw. Một Catch có thể kèm bộ lọc When. Kiểu On Error GoTo cũ từ VB6 và VBA vẫn biên dịch được nhưng không nên dùng trong mã .NET mới.

Function ParseAge(s As String) As Integer
    Dim n As Integer
    If Not Integer.TryParse(s, n) Then
        Throw New FormatException($"Not a number: {s}")
    End If
    If n < 0 Then Throw New ArgumentOutOfRangeException(NameOf(s))
    Return n
End Function

' Inside Sub Main:
Try
    Console.WriteLine(ParseAge("abc"))
Catch ex As FormatException
    Console.WriteLine("Error: " & ex.Message)   ' Error: Not a number: abc
Finally
    Console.WriteLine("done")
End Try

Một chương trình hoàn chỉnh nhỏ: tần suất từ

Imports System
Imports System.Collections.Generic
Imports System.Linq

Module WordCount
    Sub Main()
        Dim text = "the cat and the hat and the bat"
        Dim counts As New Dictionary(Of String, Integer)

        For Each word In text.Split(" "c)
            If counts.ContainsKey(word) Then
                counts(word) += 1
            Else
                counts(word) = 1
            End If
        Next

        Dim top = counts.OrderByDescending(Function(kv) kv.Value).Take(2)
        For Each kv In top
            Console.WriteLine($"{kv.Key} {kv.Value}")
        Next
    End Sub
End Module
' the 3
' and 2

VBA: Visual Basic bên trong Microsoft Office

Visual Basic for Applications (VBA) là ngôn ngữ macro tích hợp trong các ứng dụng Microsoft Office như Excel, Word và Access. Nó dựa trên Visual Basic cổ điển chứ không phải .NET: chạy bên trong ứng dụng Office, dùng mô hình đối tượng của Office (workbook, range, document) và được chỉnh sửa trong trình soạn thảo VBA (Alt+F11 trên Windows). Cú pháp cơ bản của Dim, If, For và Sub giống nhau, nên kiến thức VB.NET hữu ích cho VBA.

' VBA in Excel: write the squares of 1 to 5 into column A
Sub FillSquares()
    Dim i As Long
    For i = 1 To 5
        Cells(i, 1).Value = i * i
    Next i
    MsgBox "Done"
End Sub

Học tiếp ở đâu

  • Microsoft Learn: tài liệu Visual Basic, gồm hướng dẫn bắt đầu và tài liệu tham khảo ngôn ngữ.
  • Học thư viện lớp cơ sở .NET (collection, tệp, LINQ); thư viện này dùng chung với C#.
  • Với ứng dụng máy tính để bàn, hãy thử mẫu Windows Forms hoặc WPF trong Visual Studio.
  • Để tự động hóa Office, hãy đọc tài liệu tham khảo VBA trên Microsoft Learn cho ứng dụng bạn dùng.

Câu hỏi thường gặp

Visual Basic .NET đã chết chưa?

Chưa. Nó được hỗ trợ trên các phiên bản .NET hiện tại và trong Visual Studio, nhưng Microsoft không có kế hoạch thêm tính năng ngôn ngữ mới lớn, nên hầu hết dự án .NET mới chọn C#.

Khác nhau giữa VB.NET và VBA là gì?

VB.NET là ngôn ngữ .NET đầy đủ để xây dựng ứng dụng độc lập. VBA là ngôn ngữ macro dựa trên Visual Basic cổ điển, chạy bên trong các ứng dụng Office như Excel; cú pháp tương tự nhưng môi trường chạy và thư viện thì khác.

Nên học VB.NET hay C#?

Nếu bạn bảo trì mã VB hoặc muốn cú pháp rất dễ đọc, VB.NET là ổn. Với dự án mới, cơ hội việc làm và các tính năng .NET mới nhất, C# thường là khoản đầu tư tốt hơn, và các thư viện bạn học dùng chung được giữa hai ngôn ngữ.

Visual Basic có phân biệt hoa thường không?

Không. Dim Total, total và TOTAL đều chỉ cùng một biến, và trình soạn thảo thường tự chuẩn hóa cách viết hoa cho bạn.

Tất cả hướng dẫn lập trình