Sử dụng Thủ tục và Hàm

Theo đây có mô tả về cách sử dụng cơ bản các trình con và hàm trong mã Basic của LibreOffice.

Biểu tượng Ghi chú

Khi bạn tạo một mô-đun mới, LibreOffice Basic tự động chèn một trình con tên « Main ». Tên mặc định này không có tác động thứ tự hoặc điểm bắt đầu của dự án LibreOffice Basic. Bạn cũng có thể thay đổi tên này thành « SUB » một cách an toàn.


Biểu tượng Ghi chú

Some restrictions apply for the names of your public variables, subs, and functions. You must not use the same name as one of the modules of the same library.


Các trình con (SUB) và hàm (FUNCTION) giúp bạn bảo tồn một toàn cảnh có cấu trúc, bằng cách chia một chương trình ra các phần hợp lý.

Một lợi ích của trình con và hàm là, một khi bạn phát triển mã chương trình chứa các thành phần công việc, bạn có thể dùng lại mã đó trong dự án khác.

Gửi biến cho thủ tục (SUB) và hàm (FUNCTION)

Có thể gửi biến cho cả hai trình con và hàm. Tuy nhiên, phải khai báo hàm hoặc trình con sẽ chấp nhận tham số.


Sub SubName(Parameter1 As Type, Parameter2 As Type,...)
Mã chương trình
End Sub

SUB (trình con) được gọi dùng cú pháp này:


SubName(Value1, Value2,...)

Các tham số được gửi cho một trình con (SUB) phải tương ứng với các tham số được ghi rõ trong lời khai báo trình con (SUB).

Cũng vậy với hàm (FUNCTION). Hơn nữa, hàm lúc nào cũng trả về kết quả kiểu hàm. Kết quả của hàm được xác định bằng cách gán giá trị trả về cho tên hàm:


Function FunctionName(Parameter1 As Type, Parameter2 As Type,...) As Type
Mã chương trình
FunctionName=Result
End Function

Hàm (FUNCTION) được gọi bằng cú pháp này:


Biến=Tên_hàm(Tham_số1, Tham_số2,...)
Biểu tượng Gợi ý

Bạn cũng có thể sử dụng tên có khả năng đầy đủ để gọi một hàm hoặc trình con:
Thư_viện.Mô-đun.Vĩ_lệnh()
Chẳng hạn, để gọi vĩ lệnh Autotext từ thư viện Gimmicks, dùng lệnh này:
Gimmicks.AutoText.Main()


Gửi biến theo giá trị hoặc tham chiếu

Có thể gửi tham số cho một trình con hoặc một hàm, hoặc theo tham chiếu hoặc theo giá trị. Nếu không phải được ghi rõ khác, một tham số lúc nào cũng được gửi theo tham chiếu. Có nghĩa là một hàm hoặc trình con sẽ nhận được tham số và có khả năng đọc và sửa đổi giá trị của nó.

Muốn gửi một tham số theo giá trị thì chèn từ khoá « ByVal » vào phía trước tham số khi bạn gọi một trình con (SUB) hoặc hàm (FUNCTION), v.d.:


Result = Function(ByVal Parameter)

Trong trường hợp này, nội dung gốc của tham số sẽ không bị hàm sửa đổi, vì nó chỉ nhận được giá trị, không phải tham số chính nó.

Phạm vi của Biến

Một biến được xác định bên trong một trình con hoặc hàm thì chỉ còn lại hợp lệ đến khi thủ tục thoát. Biến kiểu này được gọi là một biến « cục bộ ». Trong rất nhiều trường hợp đều, bạn cần một biến là hợp lệ trong mọi thủ tục, trong mọi mô-đun của mọi thư viện, hoặc sau khi một trình con hoặc hàm đã thoát.

Khai báo biến bên ngoài một trình con (SUB) hoặc hàm (FUNCTION)


GLOBAL VarName As TYPENAME

Biến là hợp lệ trong suốt phiên chạy LibreOffice đó.


PUBLIC VarName As TYPENAME

Biến là hợp lệ trong tất cả các mô-đun.


PUBLIC VarName As TYPENAME

Biến chỉ là hợp lệ trong mô-đun này.


PUBLIC VarName As TYPENAME

Biến chỉ là hợp lệ trong mô-đun này.

Mẫu thí dụ về biến riêng

Ép buộc các biến riêng là riêng qua các mô-đun, bằng cách đặt « CompatibilityMode(true) ».


' ***** Module1 *****
Private myText As String
Sub initMyText
    myText = "Hello"
    print "in module1 : ", myText
End Sub
 
' ***** Module2 *****
'Option Explicit
Sub demoBug
    CompatibilityMode( true )
    initMyText
    ' Giờ thì trả về chuỗi rỗng
    ' (or raises error for Option Explicit)
    print "Now in module2 : ", myText
End Sub

Lưu nội dung biến đổi sau khi thoát khỏi một trình con (SUB) hoặc hàm (FUNCTION)


STATIC VarName As TYPENAME

Biến giữ lại giá trị đến khi hàm hoặc trình con được nhập lần kế tiếp. Lời khai báo phải nằm bên trong một hàm hoặc trình con.

Ghi rõ kiểu giá trị trả về của một hàm (FUNCTION)

Giống như đối với biến, hãy kèm thêm một ký tự khai báo kiểu phía sau tên hàm, hoặc kiểu được ngụ ý bởi « As » và từ khoá tương ứng ở kết thúc của danh sách tham số, để xác định kiểu của giá trị trả về của hàm, v.d.


Function WordCount(WordText As String) As Integer

Please support us!