در دارت، عملگرها نمادهای خاصی هستند که محاسباتی مانند محاسبات، مقایسه های منطقی و بررسی نوع را نشان می دهند. در این راهنما، اپراتورهای مختلف پشتیبانی شده در دارت، استفاده از آنها و نحوه استفاده از آنها برای دستکاری داده ها و کنترل جریان کد شما را بررسی خواهیم کرد. ما با عملگرهای محاسباتی پایه شروع می کنیم، به عملگرهای منطقی و بیتی پیشرفته تر می رویم و در نهایت برخی از عملگرهای ویژه منحصر به فرد دارت را بررسی می کنیم.
آشنایی با عملگرهای پایه در دارت
در برنامه نویسی دارت، اپراتورها نقش مهمی در دستکاری داده ها دارند. بیایید به عملگرهای اصلی پشتیبانی شده توسط دارت بپردازیم.
عملگرهای حسابی
از عملگرهای حسابی برای انجام عملیات ریاضی استفاده می شود. جدول زیر عملگرهای حسابی پشتیبانی شده در دارت را فهرست می کند.
+ جمع
– تفریق
* ضرب
/ تقسیم
این عملگرها برای عملیات ریاضی پایه استفاده می شوند. مثال:
void main() {
int a = 10, b = 20;
print('Addition: ${a + b}');
print('Subtraction: ${a - b}');
print('Multiplication: ${a * b}');
print('Division: ${a / b}');
}
اپراتورهای افزایش و کاهش
مقدار یک متغیر را می توان به ترتیب با استفاده از عملگرهای افزایش و کاهش یک عدد افزایش یا کاهش داد. مثال:
void main() {
int a = 10;
a++;
print('Increment: $a');
a--;
print('Decrement: $a');
}
اپراتورهای واگذاری
عملگرهای انتساب برای تخصیص مقادیر به متغیرها استفاده می شوند. دارت از عملگرهای انتساب اولیه و ترکیبی پشتیبانی می کند.
void main() {
int a = 10;
print('Assigned Value: $a');
}
واگذاری مرکب
عملگرهای انتساب مرکب یک عملیات را با یک انتساب ترکیب می کنند. مثال:
void main() {
int a = 10;
a += 20; // a = a + 20
print('Compound Assignment: $a');
}
اپراتورهای برابری و رابطه ای
برای مقایسه دو مقدار از عملگرهای تساوی و رابطه ای استفاده می شود. جدول زیر این عملگرها را فهرست می کند.
== برابر با
!= برابر نیست
> بزرگتر از
< کمتر از
>= بزرگتر یا مساوی
<= کمتر یا مساوی
void main() {
int a = 10, b = 20;
print('Equal to: ${a == b}');
print('Not Equal to: ${a != b}');
print('Greater than: ${a > b}');
print('Less than: ${a < b}');
print('Greater than or equal to: ${a >= b}');
print('Less than or equal to: ${a <= b}');
}
اپراتورهای پیشرفته در دارت
پس از آشنایی با عملگرهای پایه دارت، به سراغ برخی از عملگرهای پیشرفته ای می رویم که دارت از آنها پشتیبانی می کند. عملگرهای منطقی عملگرهای منطقی زمانی استفاده می شوند که بخواهیم دو یا چند شرط را با هم ترکیب کنیم. دارت از سه عملگر منطقی پشتیبانی می کند: AND، OR، و NOT. در اینجا توضیحات اپراتور برای هر یک آمده است:
&& منطقی و
|| منطقی
OR ! منطقی نه
void main() {
bool isTrue = true, isFalse = false;
print('AND Operator: ${isTrue && isFalse}');
print('OR Operator: ${isTrue || isFalse}');
print('NOT Operator: ${!isTrue}');
}
عملگرهای Bitwise و Shift
عملگرهای بیتی برای دستکاری نمایش دودویی مقادیر استفاده می شوند. آنها در سطح بیت عمل می کنند. در اینجا توضیحات اپراتور برای هر یک آمده است:
& بیتی
| بیتی OR
^ XOR بیتی
~ به صورت بیتی نه
<< شیفت چپ
>> Shift به راست
void main() {
int a = 2, b = 3;
print('Bitwise AND: ${a & b}');
print('Bitwise OR: ${a | b}');
print('Bitwise XOR: ${a ^ b}');
print('Bitwise NOT: ${~a}');
print('Left Shift: ${a << 1}');
print('Right Shift: ${a >> 1}');
}
عملگرهای تست نوع
عملگرهای تست نوع برای بررسی انواع در زمان اجرا استفاده می شوند. دارت از سه نوع عملگر تست پشتیبانی می کند: as, is, and is!.
as به عنوان Typecast
is اگر شی دارای نوع مشخص شده باشد True است است
is! اگر شیء نوع مشخص شده را نداشته باشد درست است
void main() {
var number = 10;
if (number is int) {
print('Number is an integer');
}
}
عبارات شرطی
عبارات شرطی در دارت راهی برای ساده کردن عبارات if-else هستند.
condition ? expr1 : expr2
اگر شرط درست باشد، expr1 را برمیگرداند. در غیر این صورت، expr2 را برمی گرداند
expr1 ?? expr2
اگر expr1 غیر تهی باشد، مقدار آن را برمیگرداند. در غیر این صورت، مقدار expr2 را برمی گرداند
void main() {
var a = 10;
var b = a > 5 ? 'a is greater than 5' : 'a is not greater than 5';
print(b);
var c = a ?? 'a is null';
print(c);
}
اپراتورهای ویژه دارت
علاوه بر عملگرهای اولیه و پیشرفته، دارت از عملگرهای خاصی نیز پشتیبانی می کند که می توانند کد شما را مختصرتر و خواناتر کنند.
void main() {
var buffer = StringBuffer()
..write('Hello, ')
..write('World!');
print(buffer.toString());
}
در مثال بالا، ما قادریم چندین متد را روی یک شی (بافر) در یک دستور واحد فراخوانی کنیم.
اپراتور Null Assertion
عملگر ادعای تهی (!) برای فرستادن یک عبارت به نوع غیر قابل تهی زیرین آن استفاده میشود و در صورت شکست Cast، یک استثنا در زمان اجرا ایجاد میکند. مثال :
void main() {
int? a = null;
try {
int b = a!;
} catch (e) {
print('Exception: $e');
}
}
در مثال بالا، ما سعی می کنیم یک عدد صحیح nullable را به یک عدد صحیح غیر تهی تبدیل کنیم که منجر به یک استثنا در زمان اجرا می شود.
تابع برنامه و دسترسی مشترک
تابع تابع (()) و دسترسی زیرنویس ([]) به ترتیب برای فراخوانی یک تابع و دسترسی به یک عنصر در یک شاخص خاص در یک لیست استفاده می شود. در اینجا یک مثال است
void main() {
var list = [1, 2, 3, 4, 5];
print('Element at index 2: ${list[2]}');
void printHello() {
print('Hello, World!');
}
printHello();
}
Description | Operator | Associativity |
---|---|---|
unary postfix | expr ++ expr -- () [] ?[] . ?. ! | None |
unary prefix | - expr ! expr ~ expr ++ expr -- expr await expr | None |
multiplicative | * / % ~/ | Left |
additive | + - | Left |
shift | << >> >>> | Left |
bitwise AND | & | Left |
bitwise XOR | ^ | Left |
bitwise OR | | | Left |
relational and type test | >= > <= < as is is! | None |
equality | == != | None |
logical AND | && | Left |
logical OR | || | Left |
if-null | ?? | Left |
conditional | expr1 ? expr2 : expr3 | Right |
cascade | .. ?.. | Left |
assignment | = *= /= += -= &= ^= etc. | Right |
spread (See note) | ... ...? | None |