Batch Script - Functions

Xin chào các bạn đang học lập trình! Hôm nay, chúng ta sẽ cùng nhau khám phá thế giới kỳ diệu của hàm trong lập trình Batch. Là giáo viên máy tính gần gũi của bạn, tôi rất vui mừng được hướng dẫn các bạn trong hành trình này. Vậy, hãy lấy một cốc nước uống yêu thích của bạn, và chúng ta cùng bắt đầu nhé!

Batch Script - Functions

Hàm là gì?

Trước khi chúng ta đi vào chi tiết, hãy hiểu hàm là gì. Hãy tưởng tượng hàm như những người giúp việc nhỏ trong script của bạn. Chúng giống như những mini chương trình trong chương trình chính của bạn để thực hiện các nhiệm vụ cụ thể. Giống như bạn có thể yêu cầu một người bạn giúp bạn làm một công việc cụ thể, bạn có thể gọi các hàm này để thực hiện các công việc cụ thể trong script của bạn.

Định nghĩa hàm

Bây giờ, hãy học cách tạo những người bạn nhỏ giúp đỡ này. Trong lập trình Batch, chúng ta định nghĩa hàm bằng cách sử dụng nhãn. Dưới đây là cấu trúc cơ bản:

:functionName
REM Mã của hàm bạn ở đây
REM ...
REM ...
goto :eof

Hãy phân tích nó:

  1. :functionName là nhãn đánh dấu bắt đầu của hàm của bạn.
  2. Các dòng tiếp theo sau nhãn chứa mã thực tế của hàm bạn.
  3. goto :eof chỉ định script nhảy đến cuối文件, hiệu quả là kết thúc hàm.

Dưới đây là một ví dụ đơn giản:

:sayHello
echo Hello, World!
goto :eof

Hàm này, khi được gọi, sẽ đơn giản in ra "Hello, World!" lên console.

Gọi hàm

Bây giờ chúng ta đã tạo một hàm, làm thế nào để chúng ta sử dụng nó? Chúng ta sử dụng lệnh call. Dưới đây là cách thực hiện:

@echo off
call :sayHello
pause

:sayHello
echo Hello, World!
goto :eof

Khi bạn chạy script này, nó sẽ đầu ra:

Hello, World!
Nhấn bất kỳ phím nào để tiếp tục . . .

Lệnh call chỉ định script thực thi hàm sayHello.

Hàm với tham số

Hàm trở nên mạnh mẽ hơn khi chúng ta có thể truyền thông tin cho chúng. Những mảnh thông tin này được gọi là tham số. Hãy thay đổi hàm sayHello của chúng ta để chào đón một người cụ thể:

@echo off
call :sayHello John
pause

:sayHello
echo Hello, %~1!
goto :eof

Đầu ra:

Hello, John!
Nhấn bất kỳ phím nào để tiếp tục . . .

Trong ví dụ này, %~1 đại diện cho tham số đầu tiên được truyền cho hàm. Khi chúng ta gọi sayHello John, "John" trở thành tham số đầu tiên.

Hàm với nhiều tham số

Chúng ta có thể truyền nhiều tham số cho một hàm. Hãy tạo một hàm để cộng hai số:

@echo off
call :addNumbers 5 3
pause

:addNumbers
set /a result=%~1 + %~2
echo The sum of %~1 and %~2 is %result%
goto :eof

Đầu ra:

The sum of 5 and 3 is 8
Nhấn bất kỳ phím nào để tiếp tục . . .

Ở đây, %~1 đại diện cho tham số đầu tiên (5), và %~2 đại diện cho tham số thứ hai (3).

Trả về giá trị từ hàm

Trong lập trình Batch, hàm không trả về giá trị theo cách truyền thống. Tuy nhiên, chúng ta có thể sử dụng các biến môi trường để mô phỏng hành vi này:

@echo off
call :multiply 6 7
echo The result is %result%
pause

:multiply
set /a result=%~1 * %~2
goto :eof

Đầu ra:

The result is 42
Nhấn bất kỳ phím nào để tiếp tục . . .

Trong ví dụ này, hàm multiply đặt một biến result, mà chúng ta có thể sử dụng trong script chính.

Biến cục bộ trong hàm

Khi làm việc với hàm, thường tốt hơn khi sử dụng các biến cục bộ để tránh can thiệp vào các biến trong script chính. Chúng ta có thể làm điều này bằng cách sử dụng các lệnh setlocalendlocal:

@echo off
set globalVar=I'm global
call :localVarDemo
echo After function call: %globalVar%
pause

:localVarDemo
setlocal
set globalVar=I'm local
echo Inside function: %globalVar%
endlocal
goto :eof

Đầu ra:

Inside function: I'm local
After function call: I'm global
Nhấn bất kỳ phím nào để tiếp tục . . .

Lệnh setlocal tạo một môi trường mới cho hàm, và endlocal hủy bỏ nó khi hàm kết thúc, giữ nguyên giá trị ban đầu của globalVar.

Thư viện hàm

Khi script của bạn trở nên phức tạp hơn, bạn có thể thấy mình sử dụng cùng một hàm trong nhiều script khác nhau. Thay vì sao chép và dán các hàm này vào mỗi script, bạn có thể tạo một thư viện hàm:

  1. Tạo một file mới, hãy gọi nó là myFunctions.bat
  2. Đặt các hàm thường sử dụng của bạn vào file này
  3. Trong script chính của bạn, sử dụng lệnh call để chạy file này trước khi sử dụng các hàm của nó

myFunctions.bat:

:sayHello
echo Hello, %~1!
goto :eof

:addNumbers
set /a result=%~1 + %~2
goto :eof

mainScript.bat:

@echo off
call myFunctions.bat

call :sayHello World
call :addNumbers 10 20
echo The sum is %result%
pause

Phương pháp này giúp bạn giữ mã của mình tổ chức và có thể tái sử dụng.

Các phương pháp hàm phổ biến

Dưới đây là bảng các phương pháp liên quan đến hàm phổ biến trong lập trình Batch:

Phương pháp Mô tả
call Gọi một hàm
goto :eof Kết thúc một hàm
%~1, %~2, v.v. Truy cập các tham số hàm
setlocal Tạo một môi trường biến cục bộ
endlocal Kết thúc môi trường biến cục bộ

Nhớ rằng, thực hành là cách tốt nhất để trở thành người thạo! Đừng ngại thử nghiệm với các khái niệm này. Tạo ra các hàm của riêng bạn, chơi với các tham số, và xem bạn có thể xây dựng được gì. Trước khi bạn biết, bạn sẽ viết các script Batch phức tạp một cách dễ dàng!

Chúc các bạn may mắn trong việc lập trình, các nhà lập trình tương lai!

Credits: Image by storyset