الانتقال إلى المحتوى الرئيسي
الوحدة 8 · الدرس 1 من 429/32 في الدورة~12 min
دروس الوحدة (1/4)

وحدات ESM: الاستيراد / التصدير

عندما ينمو البرنامج، يصبح الاحتفاظ بكل شيء في ملف واحد أمراً محرجاً. جافا سكريبت الحديثة يحل مشكلة وحدات ES (ESM): كل ملف عبارة عن وحدة يمكنها تصدير يمكن للوظائف والثوابت والفئات والملفات الأخرى استيرادها.

محمي_INLINE_7

يمكنك تصدير ما تريد نشره للعامة. شكلين:

JS
// somma.js
export function somma(a, b) {
  return a + b;
}

export const PI = 3.14159;

أو في نهاية الملف:

JS
function somma(a, b) {
  return a + b;
}
const PI = 3.14159;
export { somma, PI };

محمي_INLINE_8

من ملف آخر:

JS
// app.js
import { somma, PI } from './somma.js';

console.log(somma(1, 2)); // 3
console.log(PI); // 3.14159

الكائن { somma, PI } هو قائمة الأسماء التي تريد استيرادها. يجب أن تتطابق مع الأسماء المصدرة

التصدير الافتراضي

يمكن أن تحتوي كل وحدة على تصدير واحد "رئيسي"، بدون اسم:

JS
// log.js
export default function log(msg) {
  console.log('[app]', msg);
}

يمكنك استيراده عن طريق اختيار الاسم محليًا:

JS
import log from './log.js';
log('ciao');

إعادة تسمية

JS
import { somma as plus } from './somma.js';
export { somma as add } from './somma.js'; // re-export

"مساحة اسم" واحدة لكل ملف

الوحدات ** معزولة **: لا ينتهي المتغير المعلن في ملف في النطاق العام. أنت يجب عليك تصديرها بشكل صريح لجعلها مرئية في مكان آخر. وهذا تحسن كبير JS للمدرسة القديمة حيث تمت مشاركة كل <script> window.

جربه

في التمارين أدناه لن تكتب بناء جملة حقيقي import/export — صندوق الحماية عبارة عن وحدة واحدة ملف. وبدلاً من ذلك، سنطلب منك تنظيم التعليمات البرمجية في وظائف منفصلة صغيرة التعاون، كما تفعل لو كان كل منهما في ملف مختلف.

تمرين#js.m8.l1.e1
المحاولات: 0جارٍ التحميل…

حدد دالتين منفصلتين: `square(n)` (إرجاع n*n) و`sumOfSquares(a, b)` التي تستخدم المربع. فكر في المربع على أنه "تم تصديره" من ملف وإعادة استخدامه بواسطة sumOfSquares.

جارٍ تحميل المحرر…
إظهار التلميح

مجموع المربعات (أ، ب) = المربع (أ) + المربع (ب)

الحل متاح بعد 3 من المحاولات

تمرين المراجعة

تمرين#js.m8.l1.e2
المحاولات: 0جارٍ التحميل…

حدد `isEven(n)` (صحيح إذا كان n زوجيًا) و`countEven(arr)` الذي يستخدم isEven لحساب العناصر الزوجية في المصفوفة. احتفظ بهما كوظيفتين منفصلتين.

جارٍ تحميل المحرر…
إظهار التلميح

arr.filter(isEven).الطول

الحل متاح بعد 3 من المحاولات