Chủ Nhật, 27 tháng 1, 2013

Visual Basic căn bản

VB.net là ngôn ngữ lập trình hướng đối tượng bậc cao.Theo mình đây là một ngôn ngữ rất mạch lạc ,dễ học và dễ nhớ.Chú ý là kiến thức mình học được đều là tự học,qua mạng,bạn bè.Không từ bất kì thầy cô nào,nên đôi khi một số điều mình hiểu ko đúng 100% .Có gì sai mong ai biết góp ý để mình hoàn thiện kiến thức.

Bài 1:Cấu trúc vb.net và khai báo biến.

Đầu tiên để làm quen với cấu trúc lệnh ta thực thi các ví dụ trên Console application cho dễ nhìn.
Cấu trúc của Vb.net đc miêu ta như sau

Public/Private Function/Sub Tên(Biến tham chiếu hoặc tham trị)
 Dim bien_1 As Kiểu_biến_1                     'khai bao bien
 Dim bien_2 As Kiểu_biến_2
 Command_1
 Command_2
End Sub/Function
ta thấy trong visual basic kết thúc các câu lệnh ko có kí tự ngắt lệnh,để kết thúc câu lệnh ta buộc phải xuống dòng,khác với các ngôn ngữ khác.Và để comment trên visual basic ta dùng dấu nháy đơn đặt trước comment. Ví dụ sau đây yêu cầu nhập 1 số nguyên và in ra bình phương của nó.


Module Module1
    Sub Main()
        Dim a As Integer 'khai báo biến a là kiểu integer
        Console.WriteLine("nhập giá trị a")
        a = Integer.Parse(Console.ReadLine())
        Dim result As Integer = Chuongtrinh(a)
        Console.Write("gia tri binh phuong cua bien a:")
        Console.WriteLine(result)
        Console.ReadKey()
    End Sub
    Public Function Chuongtrinh(ByVal a) As Integer
        Return a * a
    End Function
End Module
Ví dụ như ta nhập vào là 3 thì kết quả in ra là --> gia tri binh phuong cua bien a:9
Ta dùng Console.ReadKey() để tạm dừng chương trình mà xem kết quả.Nếu như ko có câu lệnh này thì chạy xong nó tắt luôn.Ta chưa kịp nhìn thấy gì cả.
Như ví dụ trên thì ta thấy có thể viết ra màn hình bằng 2 lệnh Console.Write() và Console.WriteLine().
2 cái này nó khác nhau ở chỗ 1 cái in ra ở trên cùng một dòng và một cái in ra xong nó xuống dòng.Tương tự điều này cho Console.Read() và Console.ReadLine().



Khi khai báo biến,có một số kiểu khai báo như sau:

Public       :Sử dựng toàn chương trình,có phạm vi toàn cục
Private     :Sử dụng đc trong phạm vi đc khai báo và phải dùng bên ngoài thủ tục.
Protected :Như các ngôn ngữ khác ,Sử dụng trong phạm vi lớp khai báo và lớp con.
Friend      :Sử dụng trong phạm vi project.
Dim          :Sử dụng trong phạm vi như private và đc dùng bên trong thủ tục.

Ở trong Function Chuongtrinh ,ta khai báo biến a có kiểu là tham trị,mọi thay đổi trong Function Chuongtrinh() đều không dẫn đến sự thay đổi của a bên ngoài.Nếu ta khai báo kiểu tham chiếu như sau thì kết quả biến a nhận đc cuối cùng sẽ khác đi


Module Module1
    Sub Main()
        Dim a As Integer 'khai báo biến a là kiểu integer
        Console.WriteLine("nhập giá trị a")
        a = Integer.Parse(Console.ReadLine())
        Dim result As Integer = Chuongtrinh(a)
        Console.Write("gia tri binh phuong cua bien a:")
        Console.WriteLine(result)
        Console.Write("gia tri cua a :")
        Console.WriteLine(a)
        Console.ReadKey()
    End Sub
    Public Function Chuongtrinh(ByRef a As Integer) As Integer
        a = a + 1
        Return a * a
    End Function
End Module

kết quả nhận đc khi nhập số 3 là -->gia tri binh phuong cua bien a:16
----------------------------------->gia tri của a :4
ta thấy biến a đã tăng lên một.Nếu ta thực hiện khai bái ByVal thì điều này không xảy ra.

Các kiểu biến trong vb.net: Byte,Boolean,Integer,Long,Single,Double,String,Object,Variant.....

trong đó nếu ta khai báo là Variant thì biến tạm thời chưa xác định là kiểu gì,kiểu của nó sẽ đc xác định khi ta khởi tạo.


Bài 2:Cấu trúc điều khiển:

2.1 Cấu trúc điều kiện If...End if

Cấu trúc điều kiện đc mô ta như sau:


If <điều kiện> then
[ khối lệnh ]
Else :[khối lệnh khác]
End if
xét ví dụ sau:


 Sub Main()
        Dim Account As String
        Dim Pass As String
        Console.Write("Enter your account:")
        Account = Console.ReadLine()
        Console.Write("Enter your password:")
        Pass = Console.ReadLine()
        If (Account = "Admin" And Pass = "systemvhbgroup") Then
            Console.WriteLine("Welcom Admin to system VHB")
        Else : Console.WriteLine("Welcom guest to VHB")
        End If
        Console.ReadKey()
    End Sub


kết quả ta nhận đc như sau --->

Enter your account:Admin
Enter your password:systemvhbgroup
Welcom Admin to system VHB


Để lồng nhiều câu If với nhau,ta đặt ở giữa là ElseIf rồi tiếp tục viết điều kiện,rồi Then như ví dụ sau

 Sub Main()
        Dim Account As String
        Dim Pass As String
        Console.Write("Enter your account:")
        Account = Console.ReadLine()
        Console.Write("Enter your password:")
        Pass = Console.ReadLine()
        If (Account = "Admin" And Pass = "systemvhbgroup") Then
            Console.WriteLine("Welcom Admin to system VHB")
        ElseIf (Account = "Mod" And Pass = "systemvhb") Then
            Console.WriteLine("Welcom Mod to system VHB")
        Else : Console.WriteLine("Welcom guest to VHB")
        End If
        Console.ReadKey()
    End Sub

ta nhận đc kết quả như sau:


Enter your account:Mod
Enter your password:systemvhb
Welcom Mod to system VHB
2.2 Câu lệnh rẽ nhánh
Select Case.
cấu trúc đc miêu tả như sau :
Select Case <biểu thức>
Case <giá trị 1>
 khối lệnh 1
Case <giá trị 2>
 khối lệnh 2
.........
End Select 

Để hiểu rõ hơn ta xem ví dụ sau:


 Sub Main()
        Dim bien As Integer
        Do
            Console.Write("Enter a number from 1  to 5:")
            bien = Console.ReadLine()
        Loop While (bien >= 5)
        Select Case bien
            Case 1
                Console.WriteLine("Your value is 1.")
            Case 2
                Console.WriteLine("Your value is 2.")

            Case 3

                Console.WriteLine("Your value is 3.")
            Case 4
                Console.WriteLine("Your value is 4.")
            Case Else
                Console.WriteLine("Your value is 0")
        End Select
        Console.ReadKey()
    End Sub
Case Else :Thêm vào nếu như ta muốn lấy các trường hợp không nằm trong các trường hợp Case 1,Case 2...,Case n.
kết quả -->

Enter a number from 1  to 5:3
         Your value is 3.



2.3 Vòng lặp

Ta xem xét về vòng lặp For...Next trước
Cấu trúc For...Next đc miêu ta như sau:

For<khởi tạo giá trị đầu> to <giá trị cuối> Step [bước nhảy]
[khối lệnh]
Next biến_khởi_tạo

Xét ví dụ sau để nắm rõ cách dùng:


Sub Main()
        Dim Str As String = "Welcome to System 'Vietnamese Hacking Black-Hat'"
        Console.Write("Enter your number of loop:")
        Dim count As Integer = Console.ReadLine()
        Dim i
        For i = 1 To count Step 1
            Console.WriteLine(Str)
        Next i
        Console.ReadKey()
    End Sub

kết quả cho ra là -->

Enter your number of loop:6
Welcome to System 'Vietnamese Hacking Black-Hat'
Welcome to System 'Vietnamese Hacking Black-Hat'
Welcome to System 'Vietnamese Hacking Black-Hat'
Welcome to System 'Vietnamese Hacking Black-Hat'
Welcome to System 'Vietnamese Hacking Black-Hat'
Welcome to System 'Vietnamese Hacking Black-Hat'
 Chú ý ,nếu ta muốn thoát khỏi vòng For trong một trường hợp nào đó,giả sử như khi biến count =4 chẳng hạn,thì ta dùng từ khóa Exit For.Còn trong trường hợp ta muốn bỏ thực hiện khối lệnh tại một điều kiện nào đó,giả sử như cũng tại count = 4 thì ta dùng từ khóa Continue For ,khi gặp lệnh này,nó bỏ qua lệnh và bước sang vòng lặp tiếp theo.
 Tất nhiên ta có thể lồng nhiều vòng for với nhau.Thường dùng đối với mảng đa chiều .
Vòng lặp For Each ...Next

Tương tự như trong các ngôn ngữ khác,trong vb.net khi ta cần lặp trên một tập hợp (mảng) ta có cấu trúc lặp For Each...Next

Cấu trúc điều khiển For Each...Next đc mô ta như sau

For Each Biến_Phần_tử In Tập_hợp
[Các câu lệnh]
[Exit For]                     'như đã nói ở trên.
[Continue For]
Next <Biến_Phần_tử>

Xem ví dụ sau đây :Tính tổng các phần tử của mảng [0,1,2,3,4]


 Sub Main()       
        Dim S As Integer = 0
        Dim Tong(5) As Integer
        Dim i
        For i = 0 To 4 Step 1
            Tong(i) = i
        Next
        For Each k As Integer In Tong
            S = S + k
        Next
        Console.Write(S)
        Console.ReadKey()
    End Sub
kết quả cho ra là --->10

Vòng Lặp Do...Loop

Ở đây ta có 2 cặp dùng ,kiểu Do While ...Loop và kiểu Do...Loop While
2 kiểu này đơn giản,nếu bạn đã học qua các ngôn ngữ lập trình khác như C ,C++ ,C# thì nó tương ứng với vòng lặp là While (Điều kiện ) {Khối lệnh thực hiện} và Do {Khối lệnh thực hiện } While (Điều kiện)

Ở kiểu Do While ...Loop nó kiểm tra điều kiện trước,nếu đúng thì làm và kiểm tra điều kiện lại,đúng thì làm tiếp.Ta xét ví dụ sau:Tính tổng từ 1 đến 100


Sub Main()
        Dim limit As Integer = 100
        Dim i As Integer = 1
        Dim S As Integer = 0
        Do While (i <= limit)
            S = S + i
            i = i + 1
        Loop
        Console.WriteLine(S)
        Console.ReadKey()
    End Sub

kết quả nhận đc là --->5050
Với Do While...Loop thì có thể có trường hợp không có câu lệnh nào đc thực hiện (ở đây là ko có vòng lặp nào) Nhưng đối với Do...Loop While thì luôn luôn có một vòng đc thực hiện.Xem ví dụ sau nhé


Sub Main()
        Dim limit As Integer = 100
        Dim i As Integer = 1
        Dim S As Integer = 0
        Do
            S = S + i
            i = i + 1
        Loop While (i = limit)
        Console.WriteLine(S)
        Console.ReadKey()
    End Sub

ở đây i = limit là sai nhưng nó vẫn thực hiện một lần trong khối Do và kết quả in ra là -->1

Ngoài ra còn có một kiểu vòng lặp khác

 Vòng Lặp While...End While
Hoạt động của While...Wend đc mô tả như sau:
While < điều kiện>
 Khối lệnh
End While

Vòng lặp này giống với vòng lặp Do While...Loop ở trên.
Khi điều kiện đúng thì nó thực hiện khối lệnh,nếu sai thì nó thoát và thực hiện lệnh sau End While



Sub Main()
        Dim limit As Integer = 100
        Dim i As Integer = 1
        Dim S As Integer = 0
        While (i <= limit)
            S = S + i
            i = i + 1
        End While
        Console.WriteLine(S)
        Console.ReadKey()
    End Sub

tất nhiên kết quả cũng cho ra là  -->5050

Bài 3:Hàm Function

Cú pháp đc mô tả như sau
[Public/Private] Function <tên hàm> (danh sách tham trị,tham biến) As <kiểu_dữ_liêu>
  Khối lệnh
End Function
Trở lại với ví dụ đầu tiên trong bài,trong ví dụ này ta có một function tên là Chuongtrinh() trả về giá trị bình phương của một số


 Sub Main()
        Dim a As Integer 'khai báo biến a là kiểu integer     
        Console.WriteLine("nhập giá trị a")
        a = Integer.Parse(Console.ReadLine())
        Dim result As Integer = Chuongtrinh(a)
        Console.Write("gia tri binh phuong cua bien a:")
        Console.WriteLine(result)
        Console.ReadKey()
    End Sub
    Public Function Chuongtrinh(ByVal a) As Integer
        Return a * a
    End Function

Hàm đc xem là một chương trình con,Ngoài hàm ra thì còn có thủ tục,tương tự như hàm,nhưng nó không trả về một giá trị nào cả.

Cú pháp của thủ tục
 [Public/Private] Sub <tên_thủ_tuc> (Danh sách tham trị hoặc tham biến)
 Thủ tục viết ở đây
End Sub
 Ta lấy ví dụ về function trên sửa lại thành một ví dụ về thủ tục nhé.


Sub Main()
        Dim a As Integer 'khai báo biến a là kiểu integer
        Console.WriteLine("nhập giá trị a")
        a = Integer.Parse(Console.ReadLine())
        Dim result As Integer
        Chuongtrinh(a, result)
        Console.Write("gia tri binh phuong cua bien a:")
        Console.WriteLine(result)
        Console.ReadKey()
    End Sub
    Public Sub Chuongtrinh(ByVal a, ByRef result)
        result = a * a
    End Sub

Vì ta muốn giá trị của result khi đưa vào thủ tục,đc thay đổi sau khi tính toán trong thủ tục nên ta khai báo nó kiểu tham chiếu ByRef

kết quả nhận đc là -->

nhập giá trị a
4
gia tri binh phuong cua bien a:16


Không có nhận xét nào:

Đăng nhận xét