توابع در سالیدیتی

ایجاد شده توسط دکتر مصطفی جلیلی در آموزش برنامه نویسی سالیدیتی 5 مه 2025
اشتراک گذاری

توابع در سالیدیتی – راهنمای کامل و حرفه‌ای


توابع در سالیدیتی یکی از ارکان اصلی ساختار قرارداد هوشمند هستند. با استفاده از آن‌ها می‌توان عملیات مختلفی را اجرا کرد، داده‌ها را تغییر داد یا فقط اطلاعات را خواند. در این بخش با تعریف توابع، سطوح دسترسی، modifiers، توابع view و pure، و استفاده از events آشنا می‌شوید.




تعریف و استفاده از توابع (Functions)


در سالیدیتی، توابع بخش اجرایی قرارداد هستند و با کلیدواژه function تعریف می‌شوند.


ساختار کلی:


function functionName(type param1, type param2) public returns (type) {
// Logic
}

مثال ساده:


function sum(uint a, uint b) public pure returns (uint) {
return a + b;
}

در مثال بالا:

sum نام تابع است.
public سطح دسترسی است.
pure نشان می‌دهد تابع فقط محاسبه انجام می‌دهد و داده‌ای را تغییر نمی‌دهد.
returns (uint) یعنی مقدار خروجی از نوع uint است.




سطوح دسترسی توابع (Visibility)


توابع در سالیدیتی می‌توانند سطوح مختلفی از دسترسی داشته باشند:
public : قابل دسترسی برای همه (داخلی و بیرونی)
private : فقط از داخل همین قرارداد قابل فراخوانی است
internal : از داخل همین قرارداد یا قراردادهای ارث‌بر قابل استفاده است
external : فقط از خارج از قرارداد قابل فراخوانی است
مثال:


function updateData() public { ... }
function _calculate() private { ... }
function internalHelper() internal { ... }
function callFromOutside() external { ... }



Modifiers در سالیدیتی


Modifiers بلاک‌هایی از کد هستند که قبل از اجرای توابع اجرا می‌شوند. برای مثال، بررسی اینکه آیا کاربر مجاز به انجام یک عملیات هست یا نه.


تعریف و استفاده:


modifier onlyOwner() {
require(msg.sender == owner, "Not authorized");
_;
}
function withdraw() public onlyOwner {
// logic
}

در این مثال:
modifier onlyOwner بررسی می‌کند که فقط صاحب قرارداد تابع را اجرا کند.
_ محل اجرای تابع اصلی پس از بررسی modifier است.


Modifiers در کنترل دسترسی، جلوگیری از حمله‌های امنیتی (مثل reentrancy) و مدیریت منطق قبل یا بعد از تابع بسیار مفیدند.




توابع view و pure


برای مشخص کردن اینکه تابع با داده‌های بلاکچین کار می‌کند یا نه، از این دو نوع استفاده می‌کنیم:


viewتوابعی که فقط داده را می‌خوانند و آن را تغییر نمی‌دهند.


function getBalance() public view returns (uint) {
return balance;
}

pureتوابعی که نه داده‌ای می‌خوانند و نه تغییر می‌دهند. فقط محاسبه انجام می‌دهند.


function multiply(uint x, uint y) public pure returns (uint) {
return x * y;
}

نکته: این دو نوع تابع هیچ هزینه گسی (gas) برای کاربر ندارند، مگر اینکه تراکنش ارسال شود.




رویدادها (Events) در سالیدیتی


رویدادها مکانیزمی برای ثبت اتفاقات مهم در بلاکچین هستند که توسط کیف‌پول‌ها یا برنامه‌های وب (dApp) مانیتور می‌شوند.


تعریف رویداد:


event Transfer(address indexed from, address indexed to, uint amount);

فراخوانی رویداد:


function send(address to, uint amount) public {
// logic...
emit Transfer(msg.sender, to, amount);
}

مزایا:
لاگ‌های ثبت‌شده در بلاکچین را فراهم می‌کنند.
امکان مانیتورینگ تراکنش‌ها توسط اپلیکیشن‌ها و ناظران.
کمک به شفاف‌سازی رفتار قرارداد.


indexed در تعریف رویداد به جستجوی آسان‌تر رویدادها در بلاکچین کمک می‌کند.




جمع‌بندی


در این بخش با مفاهیم حیاتی زیر آشنا شدیم:
- نحوه تعریف و استفاده از توابع در سالیدیتی
- سطوح دسترسی توابع (public، private، internal، external)
- استفاده از modifiers برای کنترل دسترسی و منطق اضافی
- توابع view و pure برای خواندن یا محاسبه بدون تغییر وضعیت
- کاربرد events برای ثبت و دنبال‌کردن فعالیت‌های قرارداد


درک عمیق این مفاهیم پایه، شرط لازم برای توسعه قراردادهای حرفه‌ای، ایمن و مقیاس‌پذیر در بلاکچین است.


نظرات (0)

اشتراک گذاری

این پست را با دیگران به اشتراک بگذارید

تنظیمات GDPR

When you visit any of our websites, it may store or retrieve information on your browser, mostly in the form of cookies. This information might be about you, your preferences or your device and is mostly used to make the site work as you expect it to. The information does not usually directly identify you, but it can give you a more personalized web experience. Because we respect your right to privacy, you can choose not to allow some types of cookies. Click on the different category headings to find out more and manage your preferences. Please note, that blocking some types of cookies may impact your experience of the site and the services we are able to offer.