كوفي سكريبت

CoffeeScript هي لغة برمجة تُترجم إلى JavaScript . تُضيف هذه اللغة تحسينات نحوية مستوحاة من Ruby و Python و Haskell بهدف تعزيز اختصار JavaScript وسهولة قراءتها. [ 4 ] [ 5 ] تتضمن بعض الميزات المُضافة فهم القوائم وتفكيك التعيين .

يدعم كل من Ruby on Rails الإصدار 3.1 [ 6 ] و Play Framework [ 7 ] لغة CoffeeScript . وفي عام 2011، أشار بريندان إيتش إلى CoffeeScript كمصدر إلهام لأفكاره حول مستقبل JavaScript [ 8 ] [ 9 ] .

تاريخ

في 13 ديسمبر 2009، قام جيريمي أشكيناس بأول عملية دمج لـ CoffeeScript على GitHub مع التعليق "الدمج الأولي للغة الغامضة". [ 10 ] كُتب المُترجم بلغة Ruby. في 24 ديسمبر، أصدر أول إصدار مُوثق ومُعلّم، وهو الإصدار 0.1.0. في 21 فبراير 2010، قام بدمج الإصدار 0.5، الذي استبدل مُترجم Ruby بإصدار مُستضاف ذاتيًا مكتوب بلغة CoffeeScript. بحلول ذلك الوقت، اجتذب المشروع العديد من المساهمين الآخرين على GitHub ، وكان يستقبل أكثر من 300 زيارة للصفحة يوميًا.

في 24 ديسمبر 2010، أعلن أشكيناس عن إصدار النسخة المستقرة 1.0.0 على موقع هاكر نيوز ، وهو الموقع الذي تم فيه الإعلان عن المشروع لأول مرة. [ 11 ] [ 12 ]

في 18 سبتمبر 2017، تم تقديم الإصدار 2.0.0، [ 13 ] والذي "يهدف إلى إدخال CoffeeScript إلى عصر JavaScript الحديث، وسد الثغرات في التوافق مع JavaScript مع الحفاظ على بناء الجملة النظيف الذي يميز CoffeeScript".

بناء الجملة

في لغة CoffeeScript، كل شيء تقريبًا عبارة عن تعبير ، على سبيل المثال، ifوالتعبيرات switch( forالتي لا تُرجع قيمة في JavaScript) تُرجع قيمة. وكما هو الحال في Perl وRuby، فإن عبارات التحكم هذه لها أيضًا صيغ لاحقة؛ على سبيل المثال، ifيمكن كتابتها أيضًا consequent if conditionبالصيغة التالية.

يمكن حذف العديد من الأقواس غير الضرورية؛ على سبيل المثال، يمكن الإشارة إلى كتل التعليمات البرمجية عن طريق المسافة البادئة بدلاً من الأقواس، وتكون استدعاءات الدوال ضمنية، وغالبًا ما يتم اكتشاف القيم الحرفية للكائنات تلقائيًا.

لحساب مؤشر كتلة الجسم في جافا سكريبت ، يمكن كتابة ما يلي:

let mass = 72 ; let height = 1.78 ; let BMI = mass / height ** 2 ; if ( 18.5 <= BMI && BMI < 25 ) alert ( 'أنت بصحة جيدة!' );

باستخدام CoffeeScript، يتم وصف الفاصل الزمني بشكل مباشر:

الكتلة = 72، الطول = 1.78، مؤشر كتلة الجسم = الكتلة / الطول ** 2 تنبيه "أنت بصحة جيدة!" إذا كان 18.5 مؤشر كتلة الجسم < 25

لحساب القاسم المشترك الأكبر لعددين صحيحين باستخدام خوارزمية إقليدس ، في جافا سكريبت، يحتاج المرء عادةً إلى حلقة while :

let gcd = ( x , y ) => { do { [ x , y ] = [ y , x % y ]; } while ( y !== 0 ) return x ; }

بينما في لغة CoffeeScript يمكن استخدام until[ 14 ] بدلاً من ذلك:

القاسم المشترك الأكبر = (x, y) -> [ x , y ] = [ y , x % y ] حتى تصبح قيمة y تساوي صفرًا .

تتحقق الكلمة ?المفتاحية بسرعة مما إذا كان المتغير يساوي nullأو يساوي undefined :

personCheck = -> إذا لم يكن هناك شخص ، فسيتم عرض تنبيه " لا يوجد شخص" وإلا فسيتم عرض تنبيه " يوجد شخص " person = null personCheck () person = "Ivan" personCheck ()

سيؤدي هذا إلى تنبيه "لا يوجد شخص" إذا كان المتغير هو nullأو undefinedو "يوجد شخص" إذا كان هناك شيء ما.

مثال شائع على مقتطفات جافا سكريبت قبل إصدار ES6 باستخدام مكتبة jQuery هو:

$ ( document ) .ready ( function () { // يتم وضع كود التهيئة هنا });

أو حتى مجرد:

$ ( function () { // يتم وضع كود التهيئة هنا });

في لغة CoffeeScript، functionتُستبدل الكلمة المفتاحية بالرمز ->، ويُستخدم التباعد بدلًا من الأقواس المعقوفة، كما هو الحال في لغات أخرى تعتمد على قواعد التباعد مثل بايثون وهاسكل. كذلك، يمكن عادةً حذف الأقواس، واستخدام مستوى التباعد بدلًا منها للدلالة على دالة أو كتلة برمجية. وبالتالي، فإن المكافئ في CoffeeScript للمقتطف أعلاه هو:

$ ( document ) .ready- > # يتم وضع كود التهيئة هنا

أو ببساطة:

$ -> # يوضع هنا رمز التهيئة

تتضمن لغة CoffeeScript خاصية استيفاء السلاسل النصية على غرار لغة Ruby. تسمح السلاسل النصية ذات علامات الاقتباس المزدوجة بإدخال قيم مستوفاة باستخدام #{ ... }، بينما تُعامل السلاسل النصية ذات علامات الاقتباس المفردة كما هي. [ 15 ]

المؤلف = "فيتغنشتاين" الاقتباس = "الصورة حقيقة. -- #{ المؤلف } "الجملة = " #{ 22 / 7 } هو تقريب جيد لـ π"

يمكن استبدال أي حلقة تكرارية (for loop) بفهم قائمة (list comprehension )؛ بحيث يمكن حساب مربعات الأعداد الفردية الموجبة الأصغر من عشرة (أي الأعداد التي يكون باقي قسمتها على 2 يساوي 1)، وذلك عن طريق:

تنبيه n * n لـ n في [ 1 .. 10 ] عندما يكون n % 2 يساوي 1

أو بدلاً من ذلك، هناك:

تنبيه n * n لـ n في [ 1 .. 10 ] بمقدار 2

يمكن تنفيذ البحث الخطي باستخدام سطر واحد باستخدام الكلمة المفتاحية when:

الأسماء = [ "إيفان" ، "جوانا" ، "نيكولاي" ، "ميهايلا" ] البحث الخطي = (اسم البحث) -> تنبيه ( الاسم ) لكل اسم في الأسماء عندما يكون الاسم هو اسم البحث

يسمح التركيب for ... inالنحوي بالتكرار على المصفوفات بينما for ... ofيسمح التركيب النحوي بالتكرار على الكائنات.

تعرضت لغة CoffeeScript لانتقادات بسبب قواعد نطاقها غير المألوفة . [ 16 ] [ 17 ] وعلى وجه الخصوص، فهي تمنع تمامًا تظليل المتغيرات ، مما يجعل تحليل الكود أكثر صعوبة وعرضة للأخطاء في بعض أنماط البرمجة الأساسية التي تم وضعها واعتبارها من المسلمات منذ تعريف مبادئ البرمجة الإجرائية .

على سبيل المثال، باستخدام مقتطف الشفرة التالي في جافا سكريبت، لا يحتاج المرء إلى النظر خارج الكتلة {}للتأكد من عدم fooإمكانية تجاوز أي متغير محتمل في النطاق الخارجي عن طريق الخطأ:

// ... دالة baz () { var foo = "bar" ; console . log ( `foo = ${ foo } ` ); } // ... }

في لغة CoffeeScript، لا توجد طريقة لمعرفة ما إذا كان نطاق المتغير محدودًا بكتلة أم لا دون النظر خارج الكتلة.

التطوير والتوزيع

يُستضاف مُصرّف CoffeeScript ذاتيًا منذ الإصدار 0.5، وهو مُتاح كأداة مساعدة لـ Node.js ؛ مع ذلك، لا يعتمد المُصرّف الأساسي على Node.js، ويمكن تشغيله في أي بيئة JavaScript . [ 18 ] يُعدّ Coffee Maven Plugin بديلًا لأداة Node.js المساعدة، وهو إضافة لنظام بناء Apache Maven . تستخدم هذه الإضافة مُحرك Rhino JavaScript المكتوب بلغة Java .

يحتوي الموقع الرسمي CoffeeScript.org على زر "جرب CoffeeScript" في شريط القوائم؛ يؤدي النقر عليه إلى فتح نافذة منبثقة يمكن للمستخدمين من خلالها إدخال CoffeeScript، ومشاهدة مخرجات JavaScript، وتشغيلها مباشرةً في المتصفح. يوفر موقع js2coffee [ 19 ] ترجمة ثنائية الاتجاه.

أحدث الإضافات

  • تتيح خرائط المصدر للمستخدمين تصحيح أخطاء كود CoffeeScript الخاص بهم مباشرةً، وتدعم تتبع أخطاء CoffeeScript في وقت التشغيل.
  • يدعم CoffeeScript نمطًا من البرمجة الأدبية ، باستخدام امتداد الملف . .coffee.mdأو . .litcoffeeيسمح هذا بكتابة الشيفرة المصدرية بلغة Markdown . سيتعامل المترجم مع أي كتل مُزاحة (طريقة Markdown للإشارة إلى الشيفرة المصدرية) على أنها شيفرة، ويتجاهل الباقي باعتباره تعليقات.

الإضافات

لغة Iced CoffeeScript هي مجموعة فرعية من CoffeeScript، وتضيف كلمتين مفتاحيتين جديدتين: awaitو defer. تُبسط هاتان الكلمتان تدفق التحكم غير المتزامن، مما يجعل الكود أقرب إلى لغة برمجة إجرائية ، ويُلغي سلسلة الاستدعاءات. يمكن استخدامها على جانب الخادم وفي المتصفح. [ 20 ]

التبني

في 13 سبتمبر 2012، أعلنت Dropbox أن قاعدة التعليمات البرمجية الخاصة بها على جانب المتصفح قد أعيد كتابتها من JavaScript إلى CoffeeScript، [ 21 ] ومع ذلك تم نقلها إلى TypeScript في عام 2017. [ 22 ]

كان دليل أسلوب الكتابة الداخلي لـ GitHub ينص سابقًا على "كتابة جافا سكريبت الجديدة بلغة CoffeeScript"، على الرغم من أنه لم يعد كذلك، [ 23 ] كما أن محرر النصوص Atom الخاص به كُتب أيضًا بهذه اللغة، مع كتابة الإعدادات بلغة CSON ("تدوين كائنات CoffeeScript")، وهي صيغة معدلة من JSON . [ 24 ] [ 25 ]

يستخدم برنامج Pixel Game Maker MV لغة CoffeeScript كجزء من بيئة تطوير الألعاب الخاصة به. [ 26 ]

انظر أيضاً

مراجع

  1. "2.7.0" . 24 أبريل 2022. تم الاطلاع عليه في 9 أغسطس 2022 .
  2. https://coffeescript.org/ "تستعير CoffeeScript المقارنات المتسلسلة من لغة بايثون"
  3. هيلر، مارتن (18 أكتوبر 2011). "تجاهل لغة دارت واستمتع بلغة كوفي سكريبت" . إنفوورلد . تم الاطلاع عليه بتاريخ 15 يوليو 2020 .
  4. ماكاو، أليكس (28 فبراير 2012). الكتاب الصغير عن كوفي سكريبت: دليل مطور جافا سكريبت لبناء تطبيقات ويب أفضل ( الطبعة الأولى). أورايلي ميديا . ISBN  978-1-4493-2105-5.
  5. توماس، لوكاس (2017). الكتاب الصغير عن لغة كوفي سكريبت ( الطبعة الأولى). منصة كريت سبيس للنشر المستقل. رقم ISBN  978-1-5472-1072-5.
  6. بيك، جوش (13 أبريل 2011). "تغريدة من أحد أعضاء فريق Rails الأساسي" .
  7. "AssetsCoffeeScript - 2.5.x" . www.playframework.com . تم الاطلاع عليه بتاريخ 31-10-2016 .
  8. إيتش، بريندان. " انسجام أحلامي "
  9. إيتش، بريندان. " عرضي التقديمي في مؤتمر JSConf.US "
  10. جيت هاب. 'النسخة الأولية للغة الغامضة'
  11. هاكر نيوز. إعلان عن إصدار CoffeeScript 1.0.0، نُشر بواسطة جيريمي أشكيناس في 24 ديسمبر 2010
  12. هاكر نيوز. الإعلان الأصلي عن كوفي سكريبت نُشر بواسطة جيريمي أشكيناس في 24 ديسمبر 2009
  13. coffeescript.org الإعلان عن CoffeeScript 2
  14. يُطلق CoffeeScript على هذا اسم " مطابقة الأنماط "، وهو استخدام غير قياسي لهذا المصطلح.
  15. "الصفحة الرسمية لـ CoffeeScript" . تم الاطلاع عليها بتاريخ 20 نوفمبر 2013 .
  16. "مشكلة النطاق الضمني في CoffeeScript" . تم الاطلاع عليه بتاريخ 13-10-2018 .
  17. "نطاق CoffeeScript جنون" . 25 يوليو 2013. تم الاطلاع عليه بتاريخ 13 أكتوبر 2018 .
  18. تم أرشفة CoffeeScript بتاريخ 27 أبريل 2012 على موقع Wayback Machine . Jashkenas.github.com. تم الاطلاع عليه بتاريخ 21 يوليو 2013.
  19. سانتا كروز، ريكو. "js2coffee" . تم الاطلاع عليه بتاريخ 11 مايو 2014 .
  20. "الموقع الرسمي لـ IcedCoffeeScript" .
  21. ويلر، دان؛ ماهكوفيتش، زيغا؛ فارينهورست، كريس (13 سبتمبر 2012). "دروب بوكس ​​يتعمق في كوفي سكريبت" . تم الاطلاع عليه بتاريخ 11 مايو 2013 .
  22. غولدشتاين، ديفيد (13 مايو 2020). "الانتقال الكبير من CoffeeScript إلى TypeScript في عام 2017" . Dropbox.Tech . تم الاطلاع عليه في 30 يونيو 2020 .
  23. "JavaScript · Styleguide · GitHub" . Github.com. مؤرشف من الأصل بتاريخ 15 أغسطس 2013. تم الاطلاع عليه بتاريخ 30 نوفمبر 2015 .
  24. "شفرة مصدر Atom" . GitHub . تم الاسترجاع في 26-06-2021 .
  25. "التخصيص الأساسي" . دليل Atom Flight . GitHub . مؤرشف من الأصل بتاريخ 29 أبريل 2024. تم الاطلاع عليه بتاريخ 29 أبريل 2024 .
  26. كولين، دانيال. "Pixel Game Maker MV (PC)" . ألعاب تركز على المسيح . تم الاسترجاع في 15 يناير 2021 .

للمزيد من القراءة