ما الميزات الإضافية للبرمجة الوظيفية التي يقدمها TypeScript مقارنةً بـ JavaScript؟
أنا مهتم بتعلم TypeScript، لكن فقط إذا كان بإمكاني البرمجة بطريقة وظيفية به، وتجنب البرمجة الإمبراطورية/الشيئية قدر الإمكان.
هل يضيف TypeScript ميزات فوق جافا سكريبت الأساسية التي تدعم البرمجة الوظيفية بشكل أفضل؟ ما هي هذه الميزات؟
الإجابة رقم 1
جافا سكريبت هي لغة برمجة متعددة النماذج.
من MDN:
لغة البرمجة متعددة النماذج هي لغة برمجة تدعم أكثر من نموذج برمجي واحد. الفكرة الرئيسية للغة متعددة النماذج هي توفير إطار عمل يمكن للبرمجيين من خلاله العمل بأنماط متنوعة، مع دمج البنيات المختلفة من نماذج متعددة بحرية. الهدف من تصميم هذه اللغات هو السماح للمبرمجين باستخدام أفضل أداة لمهمة معينة، مع الاعتراف بأن نموذجًا واحدًا لا يمكنه حل كل المشاكل بأسهل أو أكثر الطرق كفاءة.
دعمًا لهذا الرأي، يدعم جافا سكريبت، أو في الواقع يستخدم، أنماطًا مختلفة. على سبيل المثال، تتبع بناء جملها هيكلًا يشبه لغة C، وهي لغة إجرائية، وفي نفس الوقت تقوم جافا سكريبت بنسخ العديد من الأسماء والتسميات من لغة البرمجة الكائنية التوجه، جافا، لكن اللغتين غير مرتبطتين بخلاف ذلك ولديهما دلالات مختلفة جدًا. المبادئ الرئيسية للتصميم في جافا سكريبت مأخوذة من لغات البرمجة Self وScheme.
تايب سكريبت هو امتداد لجافا سكريبت، مما يعني أن كل برنامج جافا سكريبت هو أيضًا برنامج تايب سكريبت صالح. لذلك، فإن تايب سكريبت هو أيضًا لغة برمجة متعددة النماذج ويمكن استخدامها كلغة برمجة دالية.
يمكنك أن تتعلم كيفية استخدام جافاسكريبت وتايب سكريبت كلغة برمجة وظيفية من خلال كتاب جافاسكريبت الوظيفية لمايكل فوغوس.
تحقق أيضًا من بعض المكتبات مفتوحة المصدر:
- underscore.js
- lodash.js
- functional.js
تحديث
لا أعتقد أن TypeScript يحتوي على أي ميزات برمجة وظيفية إضافية مقارنة بجافاسكريبت الأساسية. ومع ذلك، يتضمن TypeScript صياغة دالة بديلة تعرف باسم صياغة لامبدا ()=>{}.
أعتقد أن هذه البنية لم تُضف إلى TypeScript لـ "جعل اللغة أكثر دالية" ولكن لحل مشكلة شائعة في JavaScript: التعامل مع قيمة this.
يمكننا الجدال بأن صياغة lambda تسهّل إنشاء كود يبدو أكثر دالية مقارنة بكود JavaScript التقليدي. على سبيل المثال، بدلاً من الكتابة:
function isBigEnough(value) {
return value >= 10;
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
يمكننا أن نكتب:
var isBigEnough = (value) => value >= 10;
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
أو فقط:
var filtered = [12, 5, 8, 130, 44].filter((value) => value >= 10);
التحديث 2
أيضًا، تحتوي TypeScript على أنواع، والأنواع مهمة جدًا في البرمجة الوظيفية. اقرأ "هل دالتك في JavaScript نقية فعلاً؟" بواسطة أندريه ستالتز لتفهم السبب.
TypeScript 2.0 يقدم الاتحاد الموسوم.
الاتحادات الموسومة هي ميزة جديدة مثيرة تجلب الوظائف من لغات مثل F# و Swift و Rust وغيرها إلى جافا سكريبت، مع تبني الطريقة التي يكتب بها الناس جافا سكريبت اليوم. تُعرف هذه الميزة أيضًا باسم الاتحادات المميزة، الاتحادات المتباينة، أو أنواع البيانات الجبرية.
الأنواع البيانية الجبرية هي ميزة مهمة أخرى في لغات البرمجة الوظيفية. لذلك يمكننا أن نرى أن TypeScript بدأت في إضافة ميزات لمطوري البرمجة الوظيفية.
التحديث 3
الإصدارات الأخيرة من TypeScript قد قدمت ميزات مثل: نظام النوع البنيوي، الأنواع الحرفية، الاتحاد المميز، الأنواع الخرائطية، وغيرها. لذلك أصبح نظام النوع الآن يدعم بشكل أفضل حالات استخدام البرمجة الوظيفية.
