في لغة Dart، يمكن تحويل القيم بين الأنواع المختلفة عند الحاجة، سواء بشكل ضمني (تلقائي) أو صريح (باستخدام دوال التحويل). توفر Dart عدة طرق للتحويل بين الأنواع مثل تحويل النصوص إلى أرقام، أو الأرقام إلى نصوص، وغير ذلك.
🔹 التحويل من String
إلى int
أو double
إذا كان لديك نص يمثل رقمًا، يمكنك تحويله إلى عدد صحيح (int
) أو عدد عشري (double
) باستخدام int.parse()
و double.parse()
.
✅ مثال:
dartCopyEditvoid main() {
String numberStr = "42";
int numberInt = int.parse(numberStr); // تحويل إلى int
double numberDouble = double.parse(numberStr); // تحويل إلى double
print("كعدد صحيح: $numberInt"); // 42
print("كعدد عشري: $numberDouble"); // 42.0
}
🔸 التعامل مع الأخطاء أثناء التحويل
إذا كانت السلسلة لا تحتوي على رقم صحيح صالح، فسيؤدي التحويل إلى خطأ. لذلك يمكن استخدام tryParse()
لتجنب ذلك.
✅ مثال آمن باستخدام tryParse()
:
dartCopyEditvoid main() {
String invalidNumber = "42abc";
int? number = int.tryParse(invalidNumber); // إرجاع null إذا لم يكن التحويل ممكنًا
print("القيمة المحولة: $number"); // null
}
🔹 التحويل من int
أو double
إلى String
يمكن تحويل الأعداد إلى نصوص (String
) باستخدام toString()
.
✅ مثال:
dartCopyEditvoid main() {
int number = 100;
double pi = 3.14159;
String numberStr = number.toString();
String piStr = pi.toStringAsFixed(2); // تحديد عدد المنازل العشرية
print("عدد صحيح كنص: $numberStr"); // "100"
print("عدد عشري كنص: $piStr"); // "3.14"
}
📌 متى نستخدم toStringAsFixed(n)
؟ عندما نريد تقليل عدد المنازل العشرية إلى n
منازل.
🔹 التحويل بين int
و double
✅ التحويل من int
إلى double
:
dartCopyEditvoid main() {
int number = 10;
double converted = number.toDouble();
print("كعدد عشري: $converted"); // 10.0
}
✅ التحويل من double
إلى int
:
dartCopyEditvoid main() {
double number = 10.75;
int rounded = number.toInt();
print("كعدد صحيح: $rounded"); // 10
}
📌 ملاحظة: toInt()
يزيل الجزء العشري دون التقريب.
🔹 التحويل من bool
إلى String
والعكس
✅ من bool
إلى String
باستخدام toString()
:
dartCopyEditvoid main() {
bool isActive = true;
String boolStr = isActive.toString();
print(boolStr); // "true"
}
✅ من String
إلى bool
(لا يوجد تحويل مباشر، لذا نستخدم شرطًا):
dartCopyEditvoid main() {
String value = "true";
bool isActive = value.toLowerCase() == "true";
print(isActive); // true
}
📌 ملاحظة: لا يوجد bool.parse()
في Dart، لذا يجب التحويل يدويًا.
🔹 التحويل من List
إلى String
والعكس
✅ من قائمة (List
) إلى نص (String
):
dartCopyEditvoid main() {
List<String> words = ["مرحبًا", "بكم", "في", "Dart"];
String sentence = words.join(" "); // دمج العناصر بفاصل المسافة
print(sentence); // "مرحبًا بكم في Dart"
}
✅ من نص (String
) إلى قائمة (List
):
dartCopyEditvoid main() {
String sentence = "مرحبًا,بكم,في,Dart";
List<String> words = sentence.split(","); // تقسيم النص باستخدام الفاصلة
print(words); // ["مرحبًا", "بكم", "في", "Dart"]
}
🔹 التحويل بين Map
و String
✅ من Map
إلى String
باستخدام toString()
:
dartCopyEditvoid main() {
Map<String, int> studentAges = {"ياسين": 25, "علي": 22, "أحمد": 28};
String mapStr = studentAges.toString();
print(mapStr); // {ياسين: 25, علي: 22, أحمد: 28}
}
✅ من String
إلى Map
(يحتاج إلى تحويل يدوي عبر jsonDecode
)
dartCopyEditimport 'dart:convert';
void main() {
String jsonString = '{"ياسين": 25, "علي": 22, "أحمد": 28}';
Map<String, dynamic> studentAges = jsonDecode(jsonString);
print(studentAges); // {ياسين: 25, علي: 22, أحمد: 28}
}
🔹 استخدام as
و is
و !
في التحويل
في Dart، يمكن استخدام as
و is
و !
للتحويلات.
✅ استخدام is
للتحقق من النوع:
dartCopyEditvoid main() {
var value = "Dart";
if (value is String) {
print("المتغير نصي");
}
}
✅ استخدام as
للتحويل مع التأكيد:
dartCopyEditvoid main() {
dynamic value = "123";
String strValue = value as String;
print(strValue); // 123
}
✅ استخدام !
للتحويل مع التأكيد على عدم كونه null
:
dartCopyEditvoid main() {
int? number = int.tryParse("100");
print(number!); // 100
}
📌 تحذير: استخدم !
فقط إذا كنت متأكدًا من أن القيمة ليست null
، وإلا سيحدث خطأ أثناء التشغيل.
🔹 الخلاصة
التحويل | الدالة |
---|---|
String ➝ int | int.parse(str) أو int.tryParse(str) |
String ➝ double | double.parse(str) أو double.tryParse(str) |
int ➝ String | toString() |
double ➝ String | toStringAsFixed(n) |
int ➝ double | toDouble() |
double ➝ int | toInt() |
bool ➝ String | toString() |
String ➝ bool | value.toLowerCase() == "true" |
List ➝ String | join(separator) |
String ➝ List | split(separator) |
Map ➝ String | toString() |
String ➝ Map | jsonDecode(str) |
🚀 بهذا، أصبح لديك فهم شامل لطرق التحويل بين الأنواع المختلفة في Dart! 🎯