عملگرها در برنامه نویسی سالیدیتی
عملگرها در سالیدیتی چیست؟
عملگرها در برنامه نویسی سالیدیتی یا solidity operators مانند هر برنامه دیگری نقشی اساسی دارند و پایهای برای برنامهنویسی شما ایجاد میکنند. در واقع زبانهای برنامهنویسی و در مورد بحث ما سالیدیتی بدون استفاده از عملگرها، عملکردی ناقص دارند.
برای درک بهتر عملگرها (Operator) و کاربرد آنها در سالیدیتی عبارت ساده 4 + 5 برابر با 9 را در نظر بگیرید. در اینجا به 4 و 5 عملوند (operands) و به ‘+’ عملگر گفته میشود. عملگرها انواع مختلفی دارند و Solidity هم از انواعی از آن پشتیبانی میکند که در این مقاله در توکن خان قصد داریم به معرفی آنها بپردازیم.
قبل از مطالعه کامل مقاله “عملگرها در برنامه نویسی سالیدیتی” پیشنهاد میکنیم مقالات دیگر حوزه آموزش سالیدیتی را هم مطالعه کنید.
آرایه ها (Array) در زبان برنامه نویسی Solidity
Struct در قراردادهای هوشمند سالیدیتی Solidity
Interface در قراردادهای هوشمند Solidity
وراثت در سالیدیتی Solidity Inheritance
مدیریت خطا در سالیدیتی Error Handling
کاربردهای برنامه نویسی سالیدیتی
انواع عملگرها در سالیدیتی
عملگرها در برنامه نویسی سالیدیتی به برنامهنویسان، این امکان را میدهد تا عملیات گسترده و مختلفی را بر روی عملوندها اجرا کنند. عملگرهایی که سالیدیتی از آنها پشتیبانی میکند شامل موارد زیر هستند:
- عملگرهای حسابی Arithmetic Operators
- عملگرهای رابطهای Relational Operators
- عملگرهای منطقی Logical Operators
- عملگرهای بیتی Bitwise Operators
- عملگرهای مقداردهی یا واگذاری Assignment operators
- عملگرهای شرطی یا مشروط Conditional Operator
عملگرهای حسابی در سالیدیتی
این نوع از عملگرها در سالیدیتی در انجام و اجرای عملیات ریاضی کاربرد دارند و مواردی که سالیدیتی از آنها پشتیبانی میکند، به ترتیب زیر است:
نام عملگر | نماد | توضیحات | |
جمع | Addition | + | این عملگر برای جمع کردن دو عملوند استفاده میشود. |
تفریق | Subtraction | – | این عمگر برای تفریق عملوند دوم از اول استفاده میشود. |
ضرب | Multiplication | * | این عملگر برای ضرب دو عملوند در هم استفاده میشود. |
تقسیم | Division | / | این عملگر برای تقسیم دو عملوند استفاده میشود. |
باقیمانده تقسیم | Modulus | % | این عملگر مقدار باقیمانده را بعد از تقسیم اعداد صحیح میدهد. |
افزایش | Increment | ++ | این عملگر مقدار عدد صحیح را یک عدد افزایش میدهد. |
کاهش | Decrement | — | این عملگر مقدار عدد صحیح را یک عدد کاهش میدهد. |
عملگر حسابی توان هم، در سالیدیتی موجود است که چگونگی استفاده از آن را میتوانید در کد زیر مشاهده کنید:
1 |
uint x = 10 ** 3; // equal to 10^3 = 1000 |
در مثال زیر، قراردادی با نام SolidityTest انواع مختلف عملگرهای حسابی که در بالا معرفی شد را نشان میدهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
// Solidity contract to demonstrate // Arithmetic Operator pragma solidity ^0.5.0; // Creating a contract contract SolidityTest { // Initializing variables uint16 public a = 20; uint16 public b = 10; // Initializing a variable // with sum uint public sum = a + b; // Initializing a variable // with the difference uint public diff = a - b; // Initializing a variable // with product uint public mul = a * b; // Initializing a variable // with quotient uint public div = a / b; // Initializing a variable // with modulus uint public mod = a % b; // Initializing a variable // decrement value uint public dec = --b; // Initializing a variable // with increment value uint public inc = ++a; } |
خروجی کدهای بالا مطابق با تصویر زیر است:
عملگرهای رابطهای در سالیدیتی
این نوع از عملگرها در سالیدیتی برای مقایسه دو مقدار کاربرد دارند و ایده اصلی آنها به دو مفهوم درست true و غلط false وابسته است. عبارتهایی که از عملگرهای رابطهای (و منطقی) استفاده میکنند برای حالت false، مقدار 0 و برای حالت true، مقدار 1 را برمیگرداند. مواردی که سالیدیتی از آنها پشتیبانی میکند، به ترتیب زیر است:
نام عملگر | نماد | توضیحات | |
مساوی | Equal | == | این عملگر بررسی میکند که آیا دو مقدار برابر هستند یا نه. اگر برابر باشد true را برمیگرداند و برعکس. |
نامساوی | Not Equal | != | این عملگر بررسی میکند که آیا دو مقدار برابر هستند یا نه. اگر نابرابر باشد true را برمیگرداند و برعکس. |
بزرگتر | Greater than | > | این عملگر بررسی میکند که آیا مقدار سمت چپ از سمت راست بزرگتر است یا نه. اگر بزرگتر باشد true را برمیگرداند و برعکس. |
کوچکتر | Less than | < | این عملگر بررسی میکند که آیا مقدار سمت چپ از سمت راست کمتر است یا نه. اگر کمتر باشد true را برمیگرداند و برعکس. |
بزرگتر مساوی | Greater than or Equal to | >= | این عملگر بررسی میکند که آیا مقدار سمت چپ بزرگتر و مساوی مقدار سمت راست است یا نه. اگر بزرگتر و مساوی باشد true را برمیگرداند و برعکس. |
کوچکتر مساوی | Less than or Equal to | <= | این عملگر بررسی میکند که آیا مقدار چپ کمتر از راست است یا نه، اگر کمتر و برابر باشد true را برمیگرداند و برعکس |
در مثال زیر، قراردادی با نام SolidityTest انواع مختلف عملگرهای رابطهای که در بالا معرفی شد را نشان میدهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
// Solidity program to demonstrate // Relational Operator pragma solidity ^0.5.0; // Creating a contract contract SolidityTest { // Declaring variables uint16 public a = 20; uint16 public b = 10; // Initializing a variable // with bool equal result bool public eq = a == b; // Initializing a variable // with bool not equal result bool public noteq = a != b; // Initializing a variable // with bool greater than result bool public gtr = a > b; // Initializing a variable // with bool less than result bool public les = a < b; // Initializing a variable // with bool greater than equal to result bool public gtreq = a >= b; // Initializing a variable // bool less than equal to result bool public leseq = a <= b; } |
خروجی کدهای بالا مطابق با تصویر زیر است:
عملگرهای منطقی در سالیدیتی
این نوع از عملگرها در سالیدیتی برای ترکیب دو یا چند شرط استفاده میشوند و به ترتیب زیر هستند:
نام عملگر | نماد | توضیحات | |
و | Logical AND | && | اگر هر دو شرط درست باشد true و اگر یک یا هر دو شرط نادرست باشند، false را برمیگرداند. |
یا | Logical OR | || | اگر یک یا هر دو شرط درست باشد true و وقتی هر دو نادرست باشند، false را برمیگرداند. |
نفی | Logical NOT | ! | اگر شرط برآورده نشده باشد true و در غیر این صورت false را برمیگرداند. |
در مثال زیر، قرارداد logicalOperator انواع مختلف عملگرهای منطقی که در بالا معرفی شد را نشان میدهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// Solidity program to demonstrate // Logical Operators pragma solidity ^0.5.0; // Creating a contract contract logicalOperator{ // Defining function to demonstrate // Logical operator function Logic( bool a, bool b) public view returns( bool, bool, bool){ // Logical AND operator bool and = a&&b; // Logical OR operator bool or = a||b; // Logical NOT operator bool not = !a; return (and, or, not); } } |
خروجی کدهای بالا مطابق با تصویر زیر است:
عملگرهای بیتی در سالیدیتی
این نوع از عملگرها در برنامه نویسی سالیدیتی در سطح بیت کار میکنند و برای اجرای عملیات bit-level به کار برده میشوند. سالیدیتی از عملگرهای بیتی زیر پشتیبانی میکند:
نام عملگر | نماد | توضیحات |
Bitwise AND | & | یک عملیات Boolean AND روی هر بیت از آرگومانهای عدد صحیح خود انجام میدهد. |
BitWise OR | | | یک عملیات Boolean OR روی هر بیت از آرگومانهای عدد صحیح خود انجام میدهد. |
Bitwise XOR | ^ | یک عملیات Boolean OR انحصاری روی هر بیت از آرگومانهای عدد صحیح خود انجام میدهد. (OR انحصاری یا exclusive OR به این معنی است که یا عملوند 1 درست است یا عملوند 2، نه هر دو) |
Bitwise Not | ~ | این یک عملگر واحد است و با معکوس کردن تمام بیتهای عملوند عمل میکند. |
Left Shift | << | تمام بیتهای عملوند اول را با تعداد مکانهای مشخص شده توسط عملوند دوم به چپ منتقل میکند. |
Right Shift | >> | تمام بیتهای عملوند اول را با تعداد مکانهای مشخص شده توسط عملوند دوم به سمت راست منتقل میکند. |
در مثال زیر، قرارداد SolidityTest انواع مختلف عملگرهای بیتی که در بالا معرفی شد را نشان میدهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
// Solidity program to demonstrate // Bitwise Operator pragma solidity ^0.5.0; // Creating a contract contract SolidityTest { // Declaring variables uint16 public a = 20; uint16 public b = 10; // Initializing a variable // to '&' value uint16 public and = a & b; // Initializing a variable // to '|' value uint16 public or = a | b; // Initializing a variable // to '^' value uint16 public xor = a ^ b; // Initializing a variable // to '<<' value uint16 public leftshift = a << b; // Initializing a variable // to '>>' value uint16 public rightshift = a >> b; // Initializing a variable // to '~' value uint16 public not = ~a ; } |
خروجی کدهای بالا مطابق با تصویر زیر است:
عملگرهای مقداردهی یا تخصیص در سالیدیتی
این نوع از عملگرها در سالیدیتی برای تخصیص یا واگذاری مقدار به یک متغیر کاربرد دارند. عملوند سمت چپ متغیر است و عملوند سمت راست مقدار است. مواردی که سالیدیتی از آنها پشتیبانی میکند، به ترتیب زیر است:
نام عملگر | نماد | توضیحات |
Simple Assignment | = | این عملگر به سادگی مقدار سمت راست را به عملوند سمت چپ اختصاص میدهد. |
Add Assignment | += | این عملگر عملوند سمت راست را به عملوند سمت چپ اضافه میکند و مقدار را به عملوند چپ اختصاص میدهد. |
Subtract Assignment | -= | این عملگر عملوند سمت راست را از عملوند سمت چپ کم میکند و مقدار را به عملوند چپ اختصاص میدهد. |
Multiply Assignment | *= | این عملگر هر دو عملوند را ضرب میکند و مقدار را به عملوند چپ اختصاص میدهد. |
Divide Assignment | /= | این عملگر عملوند سمت چپ را به عملوند سمت راست تقسیم میکند و مقدار را به عملوند چپ اختصاص میدهد. |
Modulus Assignment | %= | این عملگر عملوند سمت چپ را به عملوند سمت راست تقسیم میکند و باقیمانده را به عملوند چپ اختصاص میدهد. |
در مثال زیر، قرارداد SolidityTest انواع مختلف عملگرهای تخصیص که در بالا معرفی شد را نشان میدهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// Solidity program to demonstrate // Assignment Operator pragma solidity ^0.5.0; // Creating a contract contract SolidityTest { // Declaring variables uint16 public assignment = 20; uint public assignment_add = 50; uint public assign_sub = 50; uint public assign_mul = 10; uint public assign_div = 50; uint public assign_mod = 32; // Defining function to // demonstrate Assignment Operator function getResult() public{ assignment_add += 10; assign_sub -= 20; assign_mul *= 10; assign_div /= 10; assign_mod %= 20; return ; } } |
خروجی کدهای بالا مطابق با تصویر زیر است:
عملگرهای شرطی در سالیدیتی
این نوع از عملگرها در برنامه نویسی سالیدیتی یک عملگر سه تایی است که ابتدا عبارت را ارزیابی میکند، سپس شرایط را برای مقادیر بازگشتی مربوط به true یا false بررسی میکند.
سینتکس عملگر شرطی به شکل زیر است:
1 |
if condition true ? then A: else B |
در مثال زیر، قرارداد SolidityTest عملگر شرطی را نشان میدهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Solidity program to demonstrate // Conditional Operator pragma solidity ^0.5.0; // Creating a contract contract SolidityTest{ // Defining function to demonstrate // conditional operator function sub( uint a, uint b) public view returns( uint){ uint result = (a > b? a-b : b-a); return result; } } |
خروجی کدهای بالا مطابق با تصویر زیر است:
جمع بندی
عملگرها در برنامه نویسی سالیدیتی دارای نقشی اساسی هستند و بدون آنها سالیدیتی دارای عملکردی ناقص خواهد بود، این در مورد کاربرد عملگرها در دیگر زبانهای برنامهنویسی نیز وجود دارد. برنامهنویسان توسط عملگرها عملیات مختلفی را بر روی عملوندها اجرا میکنند. این عملگرها شامل عملگرهای حسابی، رابطهای، منطقی، بیتی، تخصیص و شرطی هستند که در این مقاله به معرفی هر یک از آنها با ذکر مثال پرداخته شد.
منابع معتبر مرتبط:
https://www.geeksforgeeks.org/solidity-operators
https://medium.com/coinmonks/solidity-fundamentals-1fb0e6b3b607
مطالب زیر را حتما مطالعه کنید
بررسی رفتار توابع View و Pure در سالیدیتی Solidity
توابع Payable در قراردادهای هوشمند Solidity
سالیدیتی Solidity چیست؟
سطح دسترسی Visibility در سالیدیتی Solidity
توابع Function در سالیدیتی Solidity
انواع حافظه در قرارداد هوشمند سالیدیتی
8 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
احسنت عالی بود
ایا مشاوره هم دارین برای خرید ارز؟ قیمت مشاورتون چقدره؟
من یکی از کاربران دائمی سایت شما هستم
چه مطلب خوبی
مثل همیشه عالی و کاربردی
خیلی محتوای خوبی بود مهندس
خیلی ممنون از توضیحات خوبتون
کجا می تونم اطلاعات کاملتری درباره این موضوع پیدا کنم؟