متغیر ها در Dart
یک متغیر فضای نامداری در حافظه برای ذخیره مقادیر است. به عبارت دیگر متغیر ها ظرفی برای مقادیر در برنامه هستند. به نام مقادیر شناسه می گویند. قواعد نام گذاری برای متغیر ها مانند زبان ها ی دیگر است:
- شناسه ها نمی توانند کلمات کلیدی باشند
- شناسه ها می توانند شامل حروف الفبا و اعداد باشند
- شناسه ها نمی توانند شامل فضای خالی و کاراکتر ها ی خاص باشند الیته
$
و_
استثنا هستند و در نامگذاری متغیر ها می توان از آن ها استفاده کرد. - نام متغیر ها نباید با اعداد شروع شوند
متغیر ها باید قبل از استفاده اعلان شوند(اعلان نه تعیین نوع! گفتیم که دارت زبانی optionally typed است). برای اعلان متغیر ها از کلمه کلیدی var استفاده می شود.
var name = 'Reganto';
دارت زبانی کاملا شی گراست(یا من این طور برداشت کردم) بنابراین متغیر ها در دارت تنها ارجاع به مقدار را ذخیره می کنند و نه خود مقادیر را!
String name = 'Reganto';
در متغیر name آدرس مقدار ذخیره شده ی Reganto در حافظه قرار می گیرد. همان طور که قبلا گفته شد دارت زبانی optionally typed است بنابراین می توان گفت تعیین نوع متغیر ها از قبل، انتخابی است. اگر نوع متغیر ها از قبل مشخص شود(نگرش استاتیک) برنامه قبل از اجرا نوع متغیر ها را چک می کند و این باعث ثبات در برنامه می شود اما اگر نوع متغیر ها از قبل مشخص نشود(نگرش دینامیک) برنامه در زمان اجرا (runtime) نوع متغیر ها را تعیین می کند و این باعث انعطاف پذیری در برنامه خواهد شد. در نگرش ایستا مانند زبان های کامپایلری همچون ++C رفتار می شود و در نگرش پویا مانند زبان های اسکریپتی همچون python رفتار می شود.
String name = 'Reganto';
int number = 10;
مثال :
void main() {
String name = 1;
}
اگر این برنامه اجرا شود، خطایی به صورت زیر نمایش داده می شود:
sample.dart:2:17: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
Try changing the type of the left hand side, or casting the right hand side to 'String'.
String name = 1;
این خطا بیانگر آنست که مقدار نسبت داده شده به متغیر name با نوع تعیین شده برای آن مطابقت ندارد. متغیر هایی که اعلان می شوند اما مقدار اولیه نمی گیرند دارای مقدار null هستند. مثال :
void main() {
int num;
print(num);
}
خروجی این کد به صورت زیر است:
null
متغیر های که نوع آن ها از قبل تعیین نشده است، به صورت ضمنی به صورت dynamic اعلان می شوند. متغیر ها می توانند به صورت صریح با کلمه ی کلیدی dynamic نیز تعیین شوند. مثال:
void main() {
dynamic name = 'Reganto';
print(name);
}
خروجی این قطعه کد به صورت زیر است:
Reganto
کلمات کلیدی final و const
کلمات کلیدی final و const برای اعلان ثوابت استفاده می شوند.دارت از تغییر مقدار متغیر هایی که با کلمات کلیدی final یا const اعلان شده اند، ممانعت به عمل می آورد.
const برای تعیین ثوابت زمان کامپایل استفاده می شود. متغیر هایی که با کلمه ی کلیدی const اعلان می شوند، به صورت ضمنی final هستند!
این دو کلمه ی کلیدی به صورت های زیر می توانند استفاده شوند:
- Final
final variable_name
OR
final data_type variable_name
- Const
const variable_name
OR
const data_type variable_name
مثال ها:
void main() {
final number = 10;
print(number);
}
خروجی :
10
void main() {
const pi = 3.14;
const area = pi * 10 * 10;
print('Erea is ${area}');
}
خروجی:
Erea is 314
تنها const برای اعلان ثوابت زمان کامپایل استفاده می شود. مقدار این ثوابت در زمان اجرا تعیین می شود
هر گونه تلاش برای تغییر متغیر هایی که با کلمات final یا const تعیین شده اند منجر به ایجاد خطا خواهد شد. مثال:
void main() {
final int number = 10;
final int value = 20;
value = 30;
}
خطا به صورت زیر خواهد بود:
'value', a final variable, can only be set once. Try making 'value' non-final