التحويل باستخدام 'map'
جزء من قسم Logic & Flow في رحلة Dart على Coddy — الدرس 10 من 65.
عندما تحتاج إلى تحويل كل عنصر في قائمة إلى شيء جديد، توفر لغة Dart طريقة map() القوية. تطبق هذه الطريقة وظيفة تحويل على كل عنصر في القائمة وتنتج Iterable كسولاً (lazy) جديداً للنتائج المحولة (استدعِ .toList() للحصول على قائمة).
تأخذ الطريقة map() دالة كمعامل لها تحدد كيفية تحويل كل عنصر. تستقبل هذه الدالة كل عنصر من القائمة الأصلية وتعيد النسخة المحولة. ثم تقوم الطريقة map() بجمع كل هذه القيم المحولة في قائمة جديدة.
List<int> numbers = [1, 2, 3, 4, 5];
// تحويل كل رقم عن طريق مضاعفته
var doubled = numbers.map((number) => number * 2);
print(doubled); // (2, 4, 6, 8, 10)هذا النهج أكثر أناقة بكثير من إنشاء قائمة جديدة يدويًا واستخدام حلقة لتغيير كل عنصر. تمثل الطريقة map() مفهومًا أساسيًا في البرمجة الوظيفية، مما يسمح لك بالتعبير عن تحويلات البيانات بطريقة واضحة وموجزة.
التحدي
سهلقم بإنشاء برنامج يدير نظام تسعير المنتجات من خلال تطبيق تعديلات الأسعار القائمة على النسبة المئوية لجميع العناصر في مخزون المتجر. يجب على برنامجك القيام بما يلي:
- قراءة مدخل نصي (string) يمثل اسم المتجر
- قراءة مدخلات عشرية متعددة تمثل أسعار المنتجات الأصلية (سينتهي الإدخال عندما تتلقى
-1) - قراءة مدخل عشري يمثل تعديل النسبة المئوية (موجب لزيادة السعر، وسالب للخصم)
- استخدام طريقة
map()لتحويل كل سعر عن طريق تطبيق تعديل النسبة المئوية - طباعة نتائج تعديل الأسعار بالتنسيق الدقيق الموضح أدناه
على سبيل المثال، إذا كان اسم المتجر هو "Tech Store"، والأسعار هي 99.99، 149.50، 79.99، 199.99، والتعديل هو 15.0 (زيادة بنسبة 15%)، يجب أن يخرج برنامجك ما يلي:
Store: Tech Store
Original prices: [99.99, 149.5, 79.99, 199.99]
Applying 15.0% adjustment
Adjusted prices: (114.9885, 171.925, 91.9885, 229.9885)
Total items processed: 4
Status: Price adjustment completedإذا كان اسم المتجر هو "Fashion Outlet"، والأسعار هي 29.99، 45.00، والتعديل هو -20.0 (خصم بنسبة 20%)، يجب أن يخرج برنامجك ما يلي:
Store: Fashion Outlet
Original prices: [29.99, 45.0]
Applying -20.0% adjustment
Adjusted prices: (23.992, 36.0)
Total items processed: 2
Status: Price adjustment completedإذا كان اسم المتجر هو "Book Corner" وتم تقديم سعر واحد فقط 12.50 مع تعديل 0.0، يجب أن يخرج برنامجك ما يلي:
Store: Book Corner
Original prices: [12.5]
Applying 0.0% adjustment
Adjusted prices: (12.5)
Total items processed: 1
Status: Price adjustment completedيجب أن يستخدم برنامجك طريقة map() مع وظيفة تحويل تحسب السعر الجديد باستخدام الصيغة: originalPrice * (1 + percentage / 100). يجب أن تعيد طريقة map() كائناً قابلاً للتكرار (iterable) يحتوي على جميع الأسعار المعدلة، والتي سيتم عرضها بتنسيق الأقواس.
جرّب بنفسك
import 'dart:io';
void main() {
// قراءة اسم المتجر
String? storeName = stdin.readLineSync();
// قراءة الأسعار حتى يتم إدخال -1
List<double> prices = [];
while (true) {
String? input = stdin.readLineSync();
double price = double.parse(input!);
if (price == -1) {
break;
}
prices.add(price);
}
// قراءة نسبة التعديل
String? adjustmentInput = stdin.readLineSync();
double adjustment = double.parse(adjustmentInput!);
// TODO: اكتب الكود الخاص بك أدناه
// استخدم طريقة map() لتطبيق تعديل النسبة المئوية على جميع الأسعار
// المعادلة: originalPrice * (1 + percentage / 100)
// إخراج النتائج
print('Store: $storeName');
print('Original prices: $prices');
print('Applying $adjustment% adjustment');
// طباعة الأسعار المعدلة بتنسيق الأقواس
// طباعة إجمالي العناصر التي تمت معالجتها
// طباعة رسالة الحالة
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1التعامل المتقدم مع القوائم
خصائص القائمة: first و lastحالة القائمة: isEmpty و isNotEmptyعكس القائمةالإضافة إلى القائمة: insertالحذف من القائمة: removeWhereالبحث في القائمة: indexOfفرز القائمةخلط القائمةملخص - منظم القوائم4معالجة الـ Map المتقدمة
التكرار عبر الـ Mapالتحقق من المفاتيح والقيمخصائص الـ Map: keys و valuesإضافة مشروطة: putIfAbsentإزالة العناصر من الـ Mapالـ Maps المتداخلةمراجعة - تحديث المخزون2عمليات القوائم الوظيفية
التحويل باستخدام 'map'التصفية باستخدام 'where'استخدام '.toList()'التحقق من الشروط باستخدام 'any'الشروط باستخدام 'every'البحث باستخدام 'firstWhere'مراجعة - تصفية البيانات5مشروع: حاسبة عربة التسوق
إعداد المشروعإضافة العناصر إلى العربة3المجموعات
ما هي المجموعة؟إنشاء مجموعةالإضافة والحذف من المجموعاتالتحقق من وجود عناصر في المجموعةتحويل قائمة إلى مجموعةاتحاد المجموعاتتقاطع المجموعاتالفرق بين المجموعاتمراجعة - قائمة ضيوف فريدة