با استفاده از struct میتوانید ساختار های مورد نظرتان را تعریف کنید. ساختار ها برای گروه بندی داده های مرتبط با هم کاربرد دارند.
ساختار ها میتوانند در خارج از قرارداد و در قراردادی دیگر تعریف شوند و در قرارداد مورد نظر import شوند.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract Todos {
struct Todo {
string text;
bool completed;
}
// Todoآرایه ای از ساختار
Todo[] public todos;
function create(string calldata _text) public {
// struct سه روش برای تعریف
// - صدا زدن آن مثل یک تابع
todos.push(Todo(_text, false));
// key value mapping (نگاشت کلید مقدار)
todos.push(Todo({text: _text, completed: false}));
// خالی struct تعریف یک
// و سپس بروزرسانی آن
Todo memory todo;
todo.text = _text;
// todo.completed initialized to false
todos.push(todo);
}
// می سازد struct برای getter سالیدیتی به طور خودکار
// بنابراین به این تابع نیازی ندارید.
function get(uint _index) public view returns (string memory text, bool completed) {
Todo storage todo = todos[_index];
return (todo.text, todo.completed);
}
// بروزرسانی متن
function updateText(uint _index, string calldata _text) public {
Todo storage todo = todos[_index];
todo.text = _text;
}
// بروزرسانی کامل شد
function toggleCompleted(uint _index) public {
Todo storage todo = todos[_index];
todo.completed = !todo.completed;
}
}
Solidityتعریف و import کردن Struct #
فایلی که struct در آن تعریف می شود:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
// ذخیره شده 'StructDeclaration.sol' فایل با نام
struct Todo {
string text;
bool completed;
}
Solidityفایلی که از struct تعریف شده در بالا استفاده می کند:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
import "./StructDeclaration.sol";
contract Todos {
// Todoآرایه ساختار
Todo[] public todos;
}
Solidity