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

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

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

جرّب بنفسك

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