التحويل بين الأنواع في Dart

في لغة 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، وإلا سيحدث خطأ أثناء التشغيل.


🔹 الخلاصة

التحويلالدالة
Stringintint.parse(str) أو int.tryParse(str)
Stringdoubledouble.parse(str) أو double.tryParse(str)
intStringtoString()
doubleStringtoStringAsFixed(n)
intdoubletoDouble()
doubleinttoInt()
boolStringtoString()
Stringboolvalue.toLowerCase() == "true"
ListStringjoin(separator)
StringListsplit(separator)
MapStringtoString()
StringMapjsonDecode(str)

🚀 بهذا، أصبح لديك فهم شامل لطرق التحويل بين الأنواع المختلفة في Dart! 🎯