Solidity - Chức năng
Hàm là một nhóm mã có thể sử dụng lại có thể được gọi ở bất kỳ đâu trong chương trình của bạn. Điều này giúp loại bỏ nhu cầu viết đi viết lại cùng một đoạn mã. Nó giúp các lập trình viên viết mã mô-đun. Các hàm cho phép người lập trình chia một chương trình lớn thành một số hàm nhỏ và có thể quản lý được.
Giống như bất kỳ ngôn ngữ lập trình nâng cao nào khác, Solidity cũng hỗ trợ tất cả các tính năng cần thiết để viết mã mô-đun bằng các hàm. Phần này giải thích cách viết các hàm của riêng bạn trong Solidity.
Định nghĩa hàm
Trước khi sử dụng một hàm, chúng ta cần xác định nó. Cách phổ biến nhất để xác định một hàm trong Solidity là sử dụngfunction từ khóa, theo sau là tên hàm duy nhất, danh sách các tham số (có thể trống) và khối câu lệnh được bao quanh bởi dấu ngoặc nhọn.
Cú pháp
Cú pháp cơ bản được hiển thị ở đây.
function function-name(parameter-list) scope returns() {
//statements
}
Thí dụ
Hãy thử ví dụ sau. Nó định nghĩa một hàm được gọi là getResult không có tham số -
pragma solidity ^0.5.0;
contract Test {
function getResult() public view returns(uint){
uint a = 1; // local variable
uint b = 2;
uint result = a + b;
return result;
}
}
Gọi một hàm
Để gọi một hàm ở đâu đó sau này trong Hợp đồng, bạn chỉ cần viết tên của hàm đó như được hiển thị trong đoạn mã sau.
Hãy thử đoạn mã sau để hiểu cách chuỗi hoạt động trong Solidity.
pragma solidity ^0.5.0;
contract SolidityTest {
constructor() public{
}
function getResult() public view returns(string memory){
uint a = 1;
uint b = 2;
uint result = a + b;
return integerToString(result);
}
function integerToString(uint _i) internal pure
returns (string memory) {
if (_i == 0) {
return "0";
}
uint j = _i;
uint len;
while (j != 0) {
len++;
j /= 10;
}
bytes memory bstr = new bytes(len);
uint k = len - 1;
while (_i != 0) {
bstr[k--] = byte(uint8(48 + _i % 10));
_i /= 10;
}
return string(bstr);//access local variable
}
}
Chạy chương trình trên bằng các bước được cung cấp trong chương Ứng dụng đầu tiên của Solidity .
Đầu ra
0: string: 3
Tham số chức năng
Cho đến bây giờ, chúng ta đã thấy các hàm không có tham số. Nhưng có một cơ sở để truyền các tham số khác nhau trong khi gọi một hàm. Các tham số được truyền này có thể được nắm bắt bên trong hàm và bất kỳ thao tác nào có thể được thực hiện trên các tham số đó. Một hàm có thể nhận nhiều tham số được phân tách bằng dấu phẩy.
Thí dụ
Hãy thử ví dụ sau. Chúng tôi đã sử dụng mộtuint2strchức năng ở đây. Nó có một tham số.
pragma solidity ^0.5.0;
contract SolidityTest {
constructor() public{
}
function getResult() public view returns(string memory){
uint a = 1;
uint b = 2;
uint result = a + b;
return integerToString(result);
}
function integerToString(uint _i) internal pure
returns (string memory) {
if (_i == 0) {
return "0";
}
uint j = _i;
uint len;
while (j != 0) {
len++;
j /= 10;
}
bytes memory bstr = new bytes(len);
uint k = len - 1;
while (_i != 0) {
bstr[k--] = byte(uint8(48 + _i % 10));
_i /= 10;
}
return string(bstr);//access local variable
}
}
Chạy chương trình trên bằng các bước được cung cấp trong chương Ứng dụng đầu tiên của Solidity .
Đầu ra
0: string: 3
Tuyên bố trở lại
Một hàm Solidity có thể có một tùy chọn returntuyên bố. Điều này là bắt buộc nếu bạn muốn trả về giá trị từ một hàm. Câu lệnh này phải là câu lệnh cuối cùng trong một hàm.
Như trong ví dụ trên, chúng ta đang sử dụng hàm uint2str để trả về một chuỗi.
Trong Solidity, một hàm cũng có thể trả về nhiều giá trị. Xem ví dụ bên dưới -
pragma solidity ^0.5.0;
contract Test {
function getResult() public view returns(uint product, uint sum){
uint a = 1; // local variable
uint b = 2;
product = a * b;
sum = a + b;
//alternative return statement to return
//multiple values
//return(a*b, a+b);
}
}
Chạy chương trình trên bằng các bước được cung cấp trong chương Ứng dụng đầu tiên của Solidity .
Đầu ra
0: uint256: product 2
1: uint256: sum 3