Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

التحويل باستخدام 'map'

جزء من قسم Logic & Flow في رحلة Dart على Coddy — الدرس 10 من 65.

عندما تحتاج إلى تحويل كل عنصر في قائمة إلى شيء جديد، توفر Dart طريقة map() القوية. تطبق هذه الطريقة دالة تحويل على كل عنصر في القائمة وتنشئ قائمة جديدة تحتوي على جميع النتائج المحولة.

تأخذ الطريقة 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() مفهومًا أساسيًا في البرمجة الوظيفية، مما يسمح لك بالتعبير عن تحويلات البيانات بطريقة واضحة وموجزة.

challenge icon

التحدي

سهل

قم بإنشاء برنامج يدير نظام تسعير المنتجات من خلال تطبيق تعديلات الأسعار القائمة على النسبة المئوية لجميع العناصر في مخزون المتجر. يجب على برنامجك القيام بما يلي:

  1. قراءة مدخل نصي (string) يمثل اسم المتجر
  2. قراءة مدخلات عشرية متعددة تمثل أسعار المنتجات الأصلية (سينتهي الإدخال عندما تتلقى -1)
  3. قراءة مدخل عشري يمثل نسبة التعديل (موجبة لزيادة السعر، وسالبة للخصم)
  4. استخدام طريقة map() لتحويل كل سعر عن طريق تطبيق تعديل النسبة المئوية
  5. طباعة نتائج تعديل الأسعار بالتنسيق الدقيق الموضح أدناه

على سبيل المثال، إذا كان اسم المتجر هو "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) يحتوي على جميع الأسعار المعدلة، والتي سيتم عرضها بتنسيق الأقواس.

ورقة مرجعية

تقوم طريقة map() بتحويل كل عنصر في القائمة من خلال تطبيق دالة على كل عنصر وإنشاء قائمة جديدة بالنتائج.

تأخذ طريقة map() دالة كمعامل (parameter) يحدد التحويل. تستقبل هذه الدالة كل عنصر وتعيد النسخة المحولة:

List<int> numbers = [1, 2, 3, 4, 5];

// تحويل كل رقم بمضاعفته
var doubled = numbers.map((number) => number * 2);
print(doubled);  // (2, 4, 6, 8, 10)

هذا أكثر أناقة من إنشاء قائمة جديدة يدوياً واستخدام الحلقات (loops) للتحويل.

جرّب بنفسك

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');
  // طباعة الأسعار المعدلة بتنسيق الأقواس
  // طباعة إجمالي العناصر التي تمت معالجتها
  // طباعة رسالة الحالة
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow