سالیدیفا

ساختار ها (Structs)

با استفاده از 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

در Remix امتحان کنید: