جافا سكريبت في 2025: ما الجديد؟ نظرة عامة للمبتدئين
\n\nعالم جافا سكريبت لا يتوقف عن التطور. في عام 2025، تحولت اللغة التي كانت ذات يوم مجرد "نص برمجي للمتصفحات" إلى نظام بيئي قوي لبناء تطبيقات الخادم (Node.js)، وتطبيقات الهواتف المحمولة، وحتى برامج سطح المكتب. قد يبدو للمبتدئ أنه من المستحيل متابعة كل هذه التغييرات. لكن لا تقلق: لقد جمعنا أهم المستجدات التي ستجعل كودك أنظف وأسرع وأكثر وضوحًا.
\n\nفي هذه المقالة، سنستعرض التغييرات الرئيسية في جافا سكريبت في عام 2025. ستتعلم كيفية كتابة كود حديث على Node.js باستخدام أحدث إمكانيات اللغة. هيا بنا!
\n\n1. Temporal API: عصر جديد للتعامل مع التواريخ والوقت
\n\nكان التعامل مع التواريخ في جافا سكريبت دائمًا مصدر صداع. الكائن القديم Date هو وحش فرانكشتاين الحقيقي، مليء بالأخطاء والسلوك غير البديهي. في عام 2025، ظهر أخيرًا Temporal API الكامل. إنها طريقة حديثة، غير قابلة للتغيير، وآمنة من حيث النوع للتعامل مع التواريخ.
إليك كيف يبدو ذلك عمليًا (Node.js):
\n\n// الطريقة القديمة (Date)\nconst oldDate = new Date();\nconsole.log(oldDate.toISOString()); // 2025-03-15T10:30:00.000Z\n\n// الطريقة الجديدة (Temporal)\nconst { Temporal } = require('@js-temporal/polyfill'); // أو الوحدة المدمجة\n\n// التاريخ والوقت الحاليين\nconst now = Temporal.Now.plainDateTimeISO();\nconsole.log(now.toString()); // 2025-03-15T10:30:00\n\n// العمل مع المناطق الزمنية\nconst meeting = Temporal.ZonedDateTime.from({\n timeZone: 'Europe/Moscow',\n year: 2025,\n month: 12,\n day: 25,\n hour: 10,\n minute: 0\n});\nconsole.log(meeting.toString()); // 2025-12-25T10:00:00+03:00[Europe/Moscow]\n\n// مقارنة التواريخ (لا مزيد من getTime()!)\nconst date1 = Temporal.PlainDate.from('2025-01-01');\nconst date2 = Temporal.PlainDate.from('2025-06-15');\nconsole.log(Temporal.PlainDate.compare(date1, date2)); // -1 (date1 < date2)\n\n\nلماذا هذا رائع للمبتدئ؟
\n- \n
- عدم القابلية للتغيير: الطرق لا تغير الكائن الأصلي، بل تعيد كائنًا جديدًا. أخطاء أقل. \n
- سهولة القراءة: الكود مع
Temporalيبدو كنص عادي. \n - أمان النوع: لن تخلط بين التاريخ والوقت. \n
2. الديكورات: توحيد المعايير وتبسيط الكود
\n\nالديكورات (Decorators) هي دوال خاصة تسمح بـ "تغليف" دوال أخرى، أو كلاسات، أو طرقها، لإضافة منطق جديد. في عام 2025، أصبحت الديكورات أخيرًا جزءًا من المعيار الرسمي لـ ECMAScript، وأصبح تركيبها أبسط.
\n\nسابقًا، كانت الديكورات متاحة فقط من خلال أعلام تجريبية أو TypeScript. الآن تعمل "مباشرة" في Node.js.
\n\nمثال: تسجيل استدعاءات الطرق
\n\n// تعريف الديكور\nfunction log(target, context) {\n const methodName = context.name;\n\n return function (...args) {\n console.log(`[LOG] استدعاء الطريقة: ${methodName}`);\n console.log(`[LOG] الوسائط: ${JSON.stringify(args)}`);\n const result = target.call(this, ...args);\n console.log(`[LOG] النتيجة: ${JSON.stringify(result)}`);\n return result;\n };\n}\n\nclass UserService {\n @log\n getUser(id) {\n return { id, name: 'Alice', role: 'admin' };\n }\n\n @log\n saveUser(user) {\n console.log('تم حفظ المستخدم:', user.name);\n return { success: true };\n }\n}\n\nconst service = new UserService();\nservice.getUser(42);\n// [LOG] استدعاء الطريقة: getUser\n// [LOG] الوسائط: [42]\n// [LOG] النتيجة: {"id":42,"name":"Alice","role":"admin"}\n\nservice.saveUser({ name: 'Bob' });\n// [LOG] استدعاء الطريقة: saveUser\n// [LOG] الوسائط: [{"name":"Bob"}]\n// تم حفظ المستخدم: Bob\n// [LOG] النتيجة: {"success":true}\n\n\nأين سيفيد هذا المبتدئ؟ الديكورات مناسبة تمامًا لـ:
\n- \n
- التسجيل (كما في المثال أعلاه). \n
- التحقق من الصحة