أكشن سكريبت

لغة ActionScript هي لغة برمجة كائنية التوجه، طُوّرت في الأصل بواسطة شركة Macromedia (التي استحوذت عليها Adobe لاحقًا ). وهي متأثرة بلغة HyperTalk ، لغة البرمجة النصية لبرنامج HyperCard . [ 2 ] وهي الآن تطبيق للغة ECMAScript (أي أنها مجموعة شاملة من قواعد اللغة ودلالاتها المعروفة باسم JavaScript )، على الرغم من أنها نشأت في الأصل كلغة شقيقة، حيث تأثرت كلتاهما بلغة HyperTalk. عادةً ما يُحوّل مُصرّف برمجي كود ActionScript إلى صيغة بايت كود .

تُستخدم لغة ActionScript بشكل أساسي لتطوير مواقع الويب والبرامج التي تستهدف منصة Adobe Flash ، وقد وجدت في الأصل استخدامها على صفحات الويب في شكل ملفات SWF مضمنة .

تُستخدم لغة ActionScript 3 أيضًا مع نظام Adobe AIR لتطوير تطبيقات سطح المكتب والهواتف المحمولة. اللغة نفسها مفتوحة المصدر ، إذ تُقدم مواصفاتها مجانًا [ 3 ] ، ويتوفر لها مُترجم مفتوح المصدر (كجزء من Apache Flex ) وآلة افتراضية مفتوحة المصدر ( Tamarin ).

تم استخدام ActionScript أيضًا مع Scaleform GFx لتطوير واجهات المستخدم ثلاثية الأبعاد لألعاب الفيديو وشاشات العرض الرأسية .

ملخص

صُممت لغة ActionScript في البداية للتحكم في الرسوم المتحركة ثنائية الأبعاد البسيطة المُصممة باستخدام Adobe Flash (المعروف سابقًا باسم Macromedia Flash). ونظرًا لتركيزها الأولي على الرسوم المتحركة، لم تُوفر الإصدارات الأولى من محتوى Flash سوى عدد قليل من ميزات التفاعل، مما حدّ من قدرتها على البرمجة النصية. أضافت الإصدارات اللاحقة وظائف سمحت بإنشاء ألعاب وتطبيقات ويب غنية بالوسائط المتدفقة (مثل الفيديو والصوت). واليوم، تُعد ActionScript مناسبة لتطوير تطبيقات سطح المكتب والهواتف المحمولة من خلال Adobe AIR؛ كما تُستخدم في بعض تطبيقات قواعد البيانات وفي الروبوتات الأساسية كما في Make Controller Kit .

قدّم برنامج Flash MX 2004 لغة البرمجة ActionScript 2.0، وهي لغة برمجة نصية أكثر ملاءمة لتطوير تطبيقات Flash. ويمكن توفير الوقت غالبًا عن طريق كتابة البرنامج النصي بدلًا من تحريكه، مما يتيح عادةً مستوى أعلى من المرونة أثناء التحرير.

منذ إطلاق الإصدار التجريبي الأول من مشغل فلاش بلاير 9 (عام 2006)، تم إصدار نسخة أحدث من لغة أكشن سكريبت، وهي أكشن سكريبت 3.0. صُممت هذه النسخة من اللغة ليتم تجميعها وتشغيلها على نسخة من آلة تامارين الافتراضية، والتي كانت تُعرف سابقًا باسم آلة أكشن سكريبت الافتراضية 2، والتي أُعيدت كتابتها بالكامل (وتُسمى AVM2). [ 4 ] ولهذا السبب، فإن الشيفرة المكتوبة بلغة أكشن سكريبت 3.0 مُصممة للعمل مع مشغل فلاش بلاير 9 والإصدارات الأحدث، ولن تعمل على الإصدارات السابقة. في الوقت نفسه، تُنفذ أكشن سكريبت 3.0 بسرعة تصل إلى 10 أضعاف سرعة شيفرة أكشن سكريبت القديمة بفضل تحسينات المُجمِّع الفوري . [ 5 ]

يمكن استخدام مكتبات فلاش مع إمكانيات XML في المتصفح لعرض محتوى غني داخله. تُعرف هذه التقنية باسم فلاش غير المتزامن وXML، وهي مشابهة لتقنية AJAX. تُقدم أدوبي سلسلة منتجات Flex لتلبية الطلب المتزايد على تطبيقات الويب الغنية المبنية على بيئة تشغيل فلاش، مع برمجة وسلوكيات مكتوبة بلغة ActionScript. تُشكل ActionScript 3.0 أساس واجهة برمجة تطبيقات Flex 2 ( API ).

تاريخ

بدأت لغة ActionScript كلغة برمجة كائنية التوجه لأداة تأليف Flash من Macromedia ، والتي طورتها لاحقًا شركة Adobe Systems تحت اسم Adobe Flash. وفرت الإصدارات الثلاثة الأولى من أداة تأليف Flash ميزات تفاعلية محدودة. كان بإمكان مطوري Flash الأوائل ربط أمر بسيط، يُسمى "إجراء"، بزر أو إطار. تضمنت مجموعة الإجراءات عناصر تحكم أساسية للتنقل، مع أوامر مثل "تشغيل" و"إيقاف" و"الحصول على عنوان URL" و"الانتقال إلى وتشغيل".

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

الجدول الزمني حسب إصدار اللاعب

  • Flash Player 2 : الإصدار الأول الذي يدعم البرمجة النصية، وتضمنت إجراءاته gotoAndPlay و gotoAndStop و nextFrame و nextScene للتحكم في الخط الزمني.
  • مشغل فلاش 3 : دعم موسع للبرمجة النصية الأساسية، ولديه القدرة على تحميل ملفات SWF الخارجية (تحميل فيلم).
  • Flash Player 4 : أول مشغل مزود بتنفيذ كامل للبرمجة النصية (يسمى Actions )، وكانت البرمجة النصية عبارة عن بناء جملة قائم على Flash وتحتوي على دعم للحلقات والشروط والمتغيرات وغيرها من بنيات اللغة الأساسية.
  • مشغل فلاش 5 : كان مُضمّنًا في الإصدار الأول من لغة أكشن سكريبت، وقد استخدم البرمجة القائمة على النماذج الأولية والمبنية على لغة إي سي إم إيه سكريبت، [ 6 ] وأتاح البرمجة الإجرائية الكاملة والبرمجة كائنية التوجه. تطوير قائم على التصميم.
  • أضاف مشغل فلاش 6 نموذجًا لمعالجة الأحداث، وعناصر تحكم في إمكانية الوصول، ودعمًا لخاصية التبديل . وقد سمح الإصدار الأول الذي يدعم تنسيق رسائل الإجراءات (AMF) وبروتوكول المراسلة في الوقت الحقيقي (RTMP) ببث الصوت والفيديو عند الطلب.
  • مشغل فلاش 7 : تتضمن الإضافات الجديدة دعم تنسيق النصوص باستخدام أوراق الأنماط المتتالية ( CSS ) ودعم لغة البرمجة ActionScript 2.0، وهي لغة مبنية على اقتراح ECMAScript 4 من نتسكيب [ 7 ] مع وراثة قائمة على الأصناف . مع ذلك، يمكن ترجمة ActionScript 2.0 إلى بايت كود ActionScript 1.0 ، مما يسمح بتشغيلها في مشغل فلاش 6.
  • قام برنامج Flash Player 8 بتوسيع ActionScript 1/ActionScript 2 بشكل أكبر من خلال إضافة مكتبات فئات جديدة مع واجهات برمجة تطبيقات للتحكم في بيانات الصور النقطية في وقت التشغيل، وتحميل الملفات، وفلاتر مباشرة للضبابية والظلال .
  • أضاف مشغل فلاش 9 (الذي كان يُسمى في البداية 8.5) لغة ActionScript 3.0 مع ظهور آلة افتراضية جديدة تُسمى ActionScript Virtual Machine 2 (AVM2)، والتي تعمل جنبًا إلى جنب مع AVM1 السابقة اللازمة لدعم المحتوى القديم. وكان تحسين الأداء هدفًا رئيسيًا لهذا الإصدار من المشغل، بما في ذلك مُترجم فوري جديد (JIT). كما أُضيفت أيضًا دعم للمآخذ الثنائية، وتحليل ECMAScript لـ XML (E4X)، ووضع ملء الشاشة، والتعبيرات النمطية. وهذا هو أول إصدار من المشغل يحمل اسم Adobe Flash Player. [ 8 ]
  • مشغل فلاش 10 (المعروف سابقًا باسم Astro) : أُضيفت إليه ميزات أساسية لمعالجة الصور ثلاثية الأبعاد ، مثل التدوير على المحاور X وY وZ، وواجهة برمجة تطبيقات للرسم ثلاثي الأبعاد، ورسم الخرائط النسيجية . كما أُضيفت إمكانية إنشاء مرشحات مخصصة باستخدام Adobe Pixel Bender . تم نقل العديد من مهام المعالجة المرئية إلى وحدة معالجة الرسومات (GPU) ، مما أدى إلى انخفاض ملحوظ في وقت عرض كل إطار، وبالتالي زيادة معدلات الإطارات ، خاصةً مع فيديو H.264 . كما أُضيفت واجهة برمجة تطبيقات صوتية جديدة تتيح إنشاء ملفات صوتية مخصصة في فلاش، وهو أمر لم يكن ممكنًا من قبل. [ 9 ] علاوة على ذلك، يدعم مشغل فلاش 10 الاتصال من نظير إلى نظير ( P2P ) باستخدام بروتوكول تدفق الوسائط في الوقت الحقيقي (RTMFP).
  • مشغل فلاش 11 : الإضافة الرئيسية في هذا الإصدار هي إمكانيات ثلاثية الأبعاد متقدمة (مُسرّعة بواسطة بطاقة الرسومات) تعتمد على Stage3D لأنظمة ويندوز وماك، و iOS ، وأندرويد ، وغيرها من المنصات الرئيسية. أُضيفت تحسينات كبيرة على التوافق مع نظام iOS، ومنصات أخرى غير سطح المكتب. تشمل الميزات الأخرى ترميز H.264 للكاميرات، ودعم JSON الأصلي، ومنحنيات بيزير المكعبة ، ومولد أرقام عشوائية آمن ، وضغط LZMA لملفات SWF، ووحدات معالجة فرعية لنقل بعض تنفيذ التعليمات البرمجية إلى خيوط معالجة أخرى، وعرض مُسرّع بواسطة بطاقة الرسومات لتغذية الكاميرا، ووظائف الذاكرة الداخلية وتحليل الأداء، ومُجمّع ActionScript 2.0، بالإضافة إلى بعض الإضافات الثانوية الأخرى. [ 10 ]
  • فلاش بلاير 11.2 : صدر في مارس 2012، ويركز على إضافة ميزات أساسية لسوقي الألعاب والفيديو. تتضمن بعض ميزات هذا الإصدار ما يلي: دعم قفل الماوس، دعم النقر بزر الماوس الأيمن والأوسط، تعطيل قائمة السياق، دعم الرسومات المُسرّعة بواسطة الأجهزة/Stage 3D لأنظمة Apple iOS وAndroid عبر Adobe AIR، دعم المزيد من بطاقات الفيديو المُسرّعة بواسطة الأجهزة (من يناير 2008) لتوسيع نطاق توفر المحتوى المُسرّع بواسطة الأجهزة، واجهة برمجة تطبيقات جديدة لأحداث التقييد (تُرسل حدثًا عند قيام فلاش بلاير بتقييد المحتوى أو إيقافه مؤقتًا أو استئنافه)، مسار فك تشفير فيديو متعدد الخيوط على أجهزة الكمبيوتر، مما يُحسّن الأداء العام للفيديو على جميع منصات سطح المكتب، إشعار باستخدام الميزات المميزة في مشغلات التصحيح؛ بينما يعمل المحتوى دون قيود في مشغلات الإصدار.
  • فلاش بلاير 11.3 : صدر في يونيو 2012، ويركز على تمكين الميزات والوظائف الأساسية لسوق الألعاب، بالإضافة إلى تلبية طلبات المطورين الشائعة. تتضمن بعض ميزات هذا الإصدار ما يلي: دعم إدخال لوحة المفاتيح في وضع ملء الشاشة. تحسين دعم الصوت للعمل مع الصوت منخفض التأخير. إمكانية بث الصور تدريجيًا لمحتوى Stage 3D. وضع الحماية لفلاش بلاير في فايرفوكس . أحداث تسمية الإطارات. دعم ضغط بيانات BitmapData إلى تنسيقات JPEG و PNG . دعم متطلبات الحماية لتطبيقات متجر تطبيقات Mac OS X. دعم بث النصوص لـ Stage 3D. معلومات موسعة حول تفاصيل برنامج تشغيل وحدة معالجة الرسومات . رسم الصور النقطية بجودة واجهة برمجة التطبيقات (جديدة). إصدار واجهة برمجة تطبيقات أحداث الماوس الخارجية. دعم التحديث الصامت لفلاش بلاير لنظام التشغيل Mac OS. دعم القلم الضوئي لأجهزة Android 4.0 (Adobe AIR). تصحيح أخطاء USB لنظام iOS (Adobe AIR). دعم محاكي iOS (Adobe AIR).
  • فلاش بلاير 11.4 : صدر في أغسطس 2012، وركز على تمكين الميزات والوظائف الأساسية لسوق الألعاب، بالإضافة إلى تلبية طلبات المطورين الشائعة. تتضمن بعض ميزات هذا الإصدار: تشغيل ActionScript على سلاسل عمليات منفصلة (لتمكين تنفيذ ActionScript بشكل متزامن)، ودعم التحليل المتقدم للأداء، ودعم ضغط LZMA لـ ByteArray، ودعم بطاقات الفيديو المُسرّعة بالأجهزة لـ Stage 3D (مُوسّع حتى 2006)، وتحسين أداء ActionScript عند استهداف نظام Apple iOS، وواجهة برمجة تطبيقات مؤشر الأداء لإعلام المستخدمين بإمكانيات الأداء في البيئة الحالية، ودعم الصور المضغوطة مع دعم قناة ألفا، ودعم واجهة برمجة تطبيقات StageVideo.attachCamera، ودعم الإشعارات الفورية لنظام iOS (Adobe AIR).
  • فلاش بلاير 11.5 : صدر في نوفمبر 2012، وركز على تحسين الأداء والاستقرار. تتضمن بعض ميزات هذا الإصدار دعم ByteArray المشترك لعمال ActionScript، وتتبع مكدس التصحيح في إصدارات فلاش بلاير، بالإضافة إلى إصلاحات متنوعة للأخطاء.
  • فلاش بلاير 11.6 : صدر في مارس 2013، ويركز على تحسين الأداء، وتعزيز الأمان، وزيادة الاستقرار. تتضمن بعض ميزات هذا الإصدار إمكانية الاستعلام عن بيانات الرسومات المتجهة أثناء التشغيل، وتحسينات في واجهة المستخدم الخاصة بنافذة أذونات ملء الشاشة، وإمكانية تحميل ملفات SWF أثناء التشغيل عند النشر كتطبيق AIR في وضع AOT على نظام iOS، وتحكم أدق في دقة العرض المدعومة على أجهزة iOS عند النشر كتطبيق AIR، ودعم HiDPI لـ Flash Professional، وإمكانية الوصول إلى عمليات/وظائف الذاكرة السريعة باستخدام ActionScript 3.
  • فلاش بلاير 11.7 : صدر في يونيو 2013، ويحمل الاسم الرمزي "Geary"، ويركز هذا الإصدار على جودة الفيديو والألعاب والأمان والاستقرار. تتضمن بعض الميزات المخطط لها في هذا الإصدار تصحيح أخطاء وقت التشغيل المقيد لنظام أندرويد، ودعم وحدة تحكم OUYA ، واستضافة ملفات SWF عن بُعد على نظام iOS، ومنع نسخ الكائنات المشتركة احتياطيًا على نظام iOS لتحسين دعم iCloud.
  • فلاش بلاير 11.8 : كانت أدوبي تخطط لإصدار هذه النسخة في أوائل النصف الثاني من عام 2013، تحت الاسم الرمزي "هاريسون". ركز هذا الإصدار على جودة الفيديو، والألعاب، والأمان، والاستقرار. تضمنت بعض ميزات هذا الإصدار واجهة برمجة تطبيقات الإيقاف المتكرر في مقاطع الفيديو، ودعم أجهزة التحكم بالألعاب على متصفحات سطح المكتب ونظام أندرويد.

الجدول الزمني حسب إصدار ActionScript

2000-2004: أكشن سكريبت "1.0"

مع إصدار Flash 5 في سبتمبر 2000، جرى تحسين "الإجراءات" من Flash 4 مرة أخرى، وأُطلق عليها اسم "ActionScript" لأول مرة. [ 11 ] كانت هذه أول نسخة من ActionScript تتأثر بلغة JavaScript ومعيار ECMA-262 (الإصدار الثالث)، حيث تدعم نموذج الكائنات الخاص بهذا المعيار والعديد من أنواع البيانات الأساسية . يمكن تعريف المتغيرات المحلية باستخدام عبارة var ، كما يمكن إنشاء دوال معرفة من قِبل المستخدم مع تمرير المعاملات وقيم الإرجاع . والجدير بالذكر أنه أصبح بالإمكان الآن كتابة ActionScript باستخدام محرر نصوص بدلاً من تجميعها عن طريق اختيار الإجراءات من القوائم المنسدلة وعناصر التحكم في مربعات الحوار. مع الإصدار التالي من أداة التأليف الخاصة بها، Flash MX، ومشغلها المقابل، Flash Player 6 ، ظلت اللغة دون تغيير جوهري؛ لم تكن هناك سوى تغييرات طفيفة، مثل إضافة عبارة switch ومعامل "المساواة الصارمة" ( === )، مما جعلها أقرب إلى التوافق مع معيار ECMA-262 . من أهم ميزات لغة ActionScript التي تميزها عن الإصدارات اللاحقة نظام أنواعها المرن واعتمادها على الوراثة القائمة على النماذج الأولية . يشير نظام الأنواع المرن إلى قدرة المتغير على استيعاب أي نوع من البيانات، مما يتيح تطوير البرامج النصية بسرعة، وهو مناسب بشكل خاص لمشاريع البرمجة النصية الصغيرة. أما الوراثة القائمة على النماذج الأولية فهي آلية ActionScript 1.0 لإعادة استخدام التعليمات البرمجية والبرمجة كائنية التوجه. فبدلاً من استخدام الكلمة المفتاحية `class` التي تحدد الخصائص المشتركة للفئة ، تستخدم ActionScript 1.0 كائنًا خاصًا يعمل كنموذج أولي لفئة من الكائنات. تُعرَّف جميع الخصائص المشتركة للفئة في كائن النموذج الأولي الخاص بها، ويحتوي كل مثيل من تلك الفئة على رابط إلى هذا الكائن.

2003–2006: أكشن سكريبت 2.0

تم تقديم النسخة الرئيسية التالية من لغة البرمجة ActionScript، وهي ActionScript 2.0، في سبتمبر 2003 مع إصدار Flash MX 2004 ومشغله Flash Player 7. استجابةً لطلب المستخدمين لغةً أكثر ملاءمةً للتطبيقات الأكبر والأكثر تعقيدًا، تميزت ActionScript 2.0 بفحص أنواع البيانات أثناء الترجمة، بالإضافة إلى استخدام بنية قائمة على الأصناف ، مثل الكلمتين المفتاحيتين class و extends . مع أن هذا سمح باتباع نهج برمجة كائنية التوجه أكثر تنظيمًا، إلا أن الكود كان يُترجم إلى بايت كود ActionScript 1.0 ، مما أتاح استخدامه أيضًا على Flash Player 6 السابق. بعبارة أخرى، كانت بنية التوريث القائمة على الأصناف طبقةً فوق النظام القائم على النماذج الأولية. مع ActionScript 2.0، أصبح بإمكان المطورين تقييد المتغيرات بنوع محدد عن طريق إضافة تعليق توضيحي للنوع، بحيث يمكن اكتشاف أخطاء عدم تطابق الأنواع أثناء الترجمة . قدّمت لغة ActionScript 2.0 أيضًا صيغة وراثة قائمة على الأصناف، مما مكّن المطورين من إنشاء الأصناف والواجهات، كما هو الحال في لغات البرمجة القائمة على الأصناف مثل Java و C++ . وقد توافقت هذه النسخة جزئيًا مع مسودة مواصفات ECMAScript الإصدار الرابع.

2006–2020: ActionScript 3.0

في يونيو 2006، ظهرت لغة ActionScript 3.0 لأول مرة مع Adobe Flex 2.0 ومشغلها Flash Player 9. مثّلت ActionScript 3.0 إعادة هيكلة جذرية للغة، لدرجة أنها تستخدم آلة افتراضية مختلفة تمامًا . يحتوي Flash Player 9 على آلتين افتراضيتين: AVM1 للبرامج المكتوبة بلغة ActionScript 1.0 و2.0، وAVM2 للمحتوى المكتوب بلغة ActionScript 3.0. أضافت ActionScript 3.0 دعمًا محدودًا لتسريع الأجهزة ( DirectX و OpenGL ).

أضاف التحديث الذي طرأ على اللغة العديد من الميزات الجديدة:

فلاش لايت

  • فلاش لايت 1.0 : فلاش لايت هي تقنية فلاش مصممة خصيصًا للهواتف المحمولة والأجهزة الإلكترونية الاستهلاكية. تدعم فلاش 4 أكشن سكريبت.
  • Flash Lite 1.1 : تمت إضافة دعم Flash 4 ActionScript وواجهات برمجة تطبيقات إضافية للأجهزة.
  • Flash Lite 2.0 و 2.1 : تمت إضافة دعم لـ Flash 7 ActionScript 2.0 وبعض واجهات برمجة التطبيقات الإضافية fscommand2.
  • Flash Lite 3 : تمت إضافة دعم لـ Flash 8 ActionScript 2.0 وأيضًا تشغيل فيديو FLV .
  • Flash Lite 4 : تمت إضافة دعم لـ Flash 10 ActionScript 3.0 كملحق للمتصفح وأيضًا تسريع الرسومات للأجهزة.

هواء

يدعم Adobe AIR لغة ActionScript، بالإضافة إلى بعض المحتويات الإضافية، مثل محرك Stage3D الذي طورته Adobe. كما ازداد عدد واجهات برمجة التطبيقات ( APIs ) المتاحة لـ ActionScript 3.0 بشكل ملحوظ.

بناء الجملة

يتميز كود ActionScript بأنه حر الشكل ، وبالتالي يمكن إنشاؤه بأي كمية أو نمط من المسافات البيضاء التي يرغب بها المؤلف. ويستمد بناء الجملة الأساسي من ECMAScript .

ActionScript 2.0

يقوم الكود التالي، الذي يعمل على أي مشغل متوافق، بإنشاء حقل نصي عند العمق 0، في الموضع (0، 0) على الشاشة (مقاسًا بالبكسل )، بعرض وارتفاع 100 بكسل. ثم textيتم تعيين قيمة المعامل إلى السلسلة النصية " Hello, world " ، ويتم عرضها تلقائيًا في المشغل.

إنشاء حقل نصي ( "greet") ، 0 ، 0 ، 0 ، 100 ، 100 ؛ نص حقل النص في حقل " greet " = "Hello, world" ؛

عند كتابة ملفات فئة ActionScript 2.0 الخارجية، يمكن كتابة المثال أعلاه في ملف باسم Greeter.as كما يلي.

package org.wikipedia.example { import flash.display.MovieClip ;class Greeter extends MovieClip { public function Greeter () { var txtHello : TextField = this . createTextField ( "txtHello" , 0 , 0 , 0 , 100 , 100 ); txtHello . text = "Hello, world" ; } } }

ActionScript 3.0

تتشابه بنية لغة ActionScript 3.0 مع بنية ActionScript 2.0، ولكنها تختلف في مجموعة واجهات برمجة التطبيقات (APIs) لإنشاء الكائنات. قارن النص البرمجي أدناه بالإصدار السابق ActionScript 2.0:

var txtHello : TextField = new TextField (); txtHello.text = " Hello World " ; this.addChild ( txtHello ) ;

قد تكون برامج ActionScript 3.0 المصغرة أكبر حجمًا وأكثر تعقيدًا إلى حد ما بسبب زيادة الفصل بين لغة البرمجة وبيئة التطوير المتكاملة Flash (IDE).

افترض أن الملف التالي هو Greeter.as :

package org.wikipedia.example { import flash.display.Sprite ; import flash.text.TextField ;public class Greeter extends Sprite { public function Greeter () { var txtHello : TextField = new TextField (); txtHello . text = "Hello World" ; this . addChild ( txtHello ); } } }

يمكن أيضًا استخدام ActionScript 3 في ملفات MXML عند استخدام إطار عمل Flex الخاص بـ Apache :

<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx= "http://ns.adobe.com/mxml/2009" xmlns:s= "library://ns.adobe.com/flex/mx/polysylabi" xmlns:mx= "library://ns.adobe.com/flex/mx" layout= "vertical" creationComplete= "initApp()" ><fx:Script> <![CDATA[ public function initApp (): void { // يطبع رسالة "Hello, world!" في العنوان title . text = "Hello, World!" ; } ]]> </fx:Script><s:Label id= "title" fontSize= "54" fontStyle= "bold" /> </s:Application>

هياكل البيانات

أنواع البيانات

تتألف لغة ActionScript بشكل أساسي من أنواع بيانات "أساسية" أو "بسيطة" تُستخدم لإنشاء أنواع بيانات أخرى. تشبه هذه الأنواع إلى حد كبير أنواع بيانات Java . ونظرًا لأن ActionScript 3 كانت إعادة كتابة كاملة لـ ActionScript 2، فقد تغيرت أنواع البيانات وآليات توريثها.

أنواع البيانات الرئيسية في ActionScript 2

  • سلسلة نصية : قائمة من الأحرف مثل "Hello World"
  • الرقم : أي قيمة عددية
  • Boolean : تخزين ثنائي بسيط لا يمكن أن يكون إلا "صحيحًا" أو "خطأً".
  • الكائن : الكائن هو نوع البيانات الذي ترث منه جميع أنواع البيانات المعقدة. وهو يسمح بتجميع الطرق والوظائف والمعلمات والكائنات الأخرى.

أنواع البيانات المعقدة في ActionScript 2

توجد أنواع بيانات "معقدة" إضافية. تتطلب هذه الأنواع موارد معالجة وذاكرة أكبر، وتتألف من العديد من أنواع البيانات "البسيطة". بالنسبة لـ AS2، بعض هذه الأنواع هي:

  • MovieClip : إنشاء باستخدام ActionScript يسمح بالاستخدام السهل للعناصر المرئية.
  • حقل نصي : حقل نصي بسيط ديناميكي أو حقل إدخال نصي. يرث نوع MovieClip.
  • زر : زر بسيط بأربعة إطارات (حالات): أعلى، فوق، أسفل، وضربة. يرث نوع MovieClip.
  • التاريخ : يسمح بالوصول إلى معلومات حول نقطة زمنية محددة.
  • المصفوفة : تسمح بالتخزين الخطي للبيانات.
  • XML : كائن XML
  • عقدة XML : عقدة XML
  • LoadVars : يسمح كائن Load Variables بتخزين وإرسال متغيرات HTTP POST و HTTP GET
  • صوت
  • نت ستريم
  • اتصال الشبكة
  • برنامج تحميل مقاطع الفيديو
  • مستمع الأحداث

أنواع البيانات الأولية (prime) في ActionScript 3 [ 12 ]

  • Boolean : يحتوي نوع البيانات Boolean على قيمتين محتملتين فقط: صحيح وخطأ أو 1 و0. لا توجد قيم أخرى صالحة.
  • int : نوع البيانات int هو عدد صحيح 32 بت يقع بين -2,147,483,648 و 2,147,483,647.
  • القيمة الفارغة (Null) : يحتوي نوع البيانات Null على قيمة واحدة فقط، وهي القيمة الفارغة (null). هذه هي القيمة الافتراضية لنوع البيانات String وجميع الفئات التي تُعرّف أنواع البيانات المعقدة، بما في ذلك فئة Object.
  • نوع البيانات Number : يمكن لنوع البيانات Number تمثيل الأعداد الصحيحة، والأعداد الصحيحة غير الموقعة ، والأعداد العشرية . يستخدم نوع البيانات Number تنسيق 64 بت مزدوج الدقة كما هو محدد في معيار IEEE للحسابات العشرية الثنائية ( IEEE-754 ). يمكن لنوع البيانات Number تخزين الأعداد الصحيحة بين -9,007,199,254,740,992 (-2^ 53 ) و9,007,199,254,740,992 (2^ 53 )، والقيم العشرية بين Number.MAX_VALUE (1.79769313486231e+308) وNumber.MIN_VALUE (4.940656458412467e-324).
  • نوع البيانات String : يُمثل نوع البيانات String سلسلة من الأحرف ذات 16 بت. تُخزن السلاسل داخليًا كأحرف Unicode، باستخدام تنسيق UTF-16 . كانت الإصدارات السابقة من Flash تستخدم تنسيق UTF-8.
  • uint : نوع بيانات uint (عدد صحيح غير موقع) هو عدد صحيح غير موقع 32 بت بين 0 و 4,294,967,295.
  • void : يحتوي نوع البيانات void على قيمة واحدة فقط، وهي undefined. في الإصدارات السابقة من ActionScript، كانت القيمة undefined هي القيمة الافتراضية لمثيلات فئة Object. أما في ActionScript 3.0، فالقيمة الافتراضية لمثيلات Object هي null.

ActionScript 3 بعض أنواع البيانات المعقدة [ 12 ]

  • المصفوفة : تحتوي على قائمة من البيانات. على الرغم من أن ActionScript 3 لغة ذات كتابة قوية، إلا أن محتويات المصفوفة يمكن أن تكون من أي نوع ويجب تحويل القيم مرة أخرى إلى نوعها الأصلي بعد استرجاعها (تمت إضافة دعم المصفوفات المكتوبة مؤخرًا مع فئة Vector).
  • التاريخ : كائن تاريخ يحتوي على التمثيل الرقمي للتاريخ/الوقت.
  • خطأ : كائن خطأ عام يسمح بالإبلاغ عن أخطاء وقت التشغيل عند طرحه كاستثناء.
  • flash.display:Bitmap : كائن عرض صورة نقطية غير متحركة.
  • flash.display:MovieClip : كائن عرض مقطع فيلم متحرك؛ خط زمني Flash هو، بشكل افتراضي، MovieClip.
  • flash.display:Shape : كائن شكل متجه غير متحرك.
  • flash.display:SimpleButton : نوع زر تفاعلي بسيط يدعم حالات "أعلى" و"فوق" و"أسفل" مع منطقة ضرب عشوائية.
  • flash.display:Sprite : حاوية كائن عرض بدون خط زمني.
  • flash.media:Video : عنصر تشغيل فيديو يدعم النقل المباشر (التنزيل التدريجي) أو البث (RTMP). بدءًا من إصدار Flash Player 9.0.115.0، يدعم البرنامج أيضًا تنسيق الفيديو عالي الدقة H.264/MP4 إلى جانب محتوى فيديو Flash القياسي (FLV).
  • flash.text:TextField : كائن حقل نصي ديناميكي، تفاعلي اختياريًا.
  • flash.utils:ByteArray : يحتوي على مصفوفة من بيانات البايت الثنائية.
  • flash.utils:Dictionary : القواميس هي نوع من أنواع الكائنات التي قد تحتوي على مفاتيح من أي نوع بيانات (بينما تستخدم الكائنات دائمًا السلاسل لمفاتيحها).
  • الوظيفة : الفئة الأساسية لجميع تعريفات أساليب الفلاش.
  • الكائن : يُعرَّف نوع بيانات الكائن بواسطة فئة الكائن. وتُعدّ فئة الكائن الفئة الأساسية لجميع تعريفات الفئات في لغة ActionScript. يمكن استخدام الكائنات في شكلها الأساسي كمصفوفات ترابطية تحتوي على أزواج مفتاح-قيمة، حيث تكون المفاتيح سلاسل نصية والقيم قد تكون من أي نوع.
  • RegExp : كائن تعبير نمطي للسلاسل النصية.
  • المتجه : نوع من المصفوفات مدعوم عند النشر لـ Flash Player 10 أو أحدث. المتجهات عبارة عن مصفوفات كثيفة ذات أنواع محددة (يجب أن تكون القيم مُعرّفة أو فارغة) وقد تكون ذات طول ثابت، ويتم التحقق من حدودها أثناء الاسترجاع. لا تتميز المتجهات فقط بأنها أكثر أمانًا من حيث أنواع البيانات مقارنةً بالمصفوفات، بل إنها أيضًا أسرع أداءً.
  • XML : كائن XML منقح يعتمد على E4X (المعيار ECMA-357)؛ يتم الوصول إلى العقد والسمات بشكل مختلف عن كائن ActionScript 2.0 (يتم توفير فئة قديمة تسمى XMLDocument للتوافق مع الإصدارات السابقة).
  • XMLList : كائن قائم على المصفوفة لعمليات البحث المختلفة عن المحتوى في فئة XML.

استخدام أنواع البيانات

الصيغة الأساسية هي:

var variableName : VariableType = new VariableType ( param1 , param2 , ... , paramN );

لذا، لإنشاء كائن فارغ:

var myObject : Object = new Object ();

أو، بطريقة غير رسمية:

var myObject = {};

يتم وضع بعض الأنواع تلقائيًا:

var myString : String = "Hello Wikipedia!" ; // هذا سيُعيّن المتغير تلقائيًا كسلسلة نصية. var myNumber : Number = 5 ; // هذا سيفعل الشيء نفسه مع الأرقام. var myObject : Object = { param1 : "Hi!" , param2 : 76 }; // هذا يُنشئ كائنًا بمتغيرين. // param1 سلسلة نصية تحتوي على القيمة "Hi!"، // و param2 رقم يحتوي على القيمة 76.// هذه هي صيغة إنشاء مصفوفة تلقائيًا. var myArray : Array = [ 5 , "Hello!" , { a : 5 , b : 7 }]; // تُنشئ هذه الصيغة مصفوفة بثلاثة متغيرات. // الأول (0) هو عدد قيمته 5، // والثاني (1) هو سلسلة نصية قيمتها "Hello!"، // والثالث (2) هو كائن يحتوي على { a: 5, b: 7 }.

على عكس بعض لغات البرمجة كائنية التوجه، لا يُميّز ActionScript بين الأنواع الأولية والأنواع المرجعية . في ActionScript، جميع المتغيرات هي أنواع مرجعية. مع ذلك، فإن الكائنات التي تنتمي إلى أنواع البيانات الأولية، والتي تشمل Boolean وNumber وint وuint وString، غير قابلة للتغيير. [ 13 ]

لذا، إذا تم تمرير متغير من نوع بيانات بدائي، مثل عدد صحيح، إلى دالة، فإن تغيير هذا المتغير داخل الدالة لن يُغير المتغير الأصلي، حيث يتم إنشاء كائن جديد من نوع عدد صحيح داخل الدالة. أما إذا تم تمرير متغير من نوع بيانات آخر (غير بدائي)، مثل XML، إلى دالة، فإن تغيير هذا المتغير داخل الدالة سيُغير المتغير الأصلي أيضًا، حيث لا يتم إنشاء كائن XML جديد.

يمكن إسناد قيم لبعض أنواع البيانات باستخدام القيم الحرفية :

var item1 : String = "ABC" ; var item2 : Boolean = true ; var item3 : Number = 12 ; var item4 : Array = [ "a" , "b" , "c" ]; var item5 : Object = { name : "Actionscript" , version : "3.0" }; var item6 : XML = < node >< child /></ node >; // لاحظ أن XML الأساسي غير مُقتبس

المرجع في لغة ActionScript هو مؤشر إلى نسخة من فئة معينة. يخزن المرجع عنوان الذاكرة الخاص بالكائن، وبالتالي فإن العمليات التي تُجرى على المراجع تتبع قيمة المرجع إلى عنوان الذاكرة الخاص بالكائن وتُنفذ العملية على ذلك الكائن. يتم الوصول إلى جميع الكائنات في ActionScript من خلال المراجع بدلاً من الوصول إليها مباشرةً.

var item1 : XML = new XML ( "<node><child /></node>" ); var item2 : XML = item1 ; item2 . firstChild . attributes . value = 13 ; // أصبح item1 الآن مساويًا لـ item2 لأن item2 يشير ببساطة إلى ما يشير إليه item1. // كلاهما الآن: // <node><child value="13" /></node>

لا يمكن إزالة سوى الإشارات إلى كائن ما باستخدام الكلمة المفتاحية "delete". أما إزالة الكائنات والبيانات الفعلية فتتم بواسطة جامع البيانات المهملة في مشغل فلاش، والذي يتحقق من وجود أي إشارات في مساحة ذاكرة فلاش. إذا لم يتم العثور على أي إشارات (أي لم يتم إنشاء أي إشارة أخرى إلى الكائن اليتيم)، فإنه يُزال من الذاكرة. لهذا السبب، تتطلب إدارة الذاكرة في لغة ActionScript تخطيطًا دقيقًا لتطوير التطبيقات.

var item1 : XML = new XML ( "<node><child /></node>" ); delete item1 ; // إذا لم يكن هناك أي مرجع آخر لـ item1 في أي مكان آخر في التطبيق، // فسيتم حذفه في الدورة التالية لجامع البيانات المهملة

حماية الكود

مثل معظم تنسيقات ملفات البايت كود ، يمكن فك تجميع ملفات Flash SWF إلى شفرة المصدر ومكوناتها (على غرار كيفية فك تجميع ملفات Microsoft .NET ). بعض برامج فك التجميع قادرة على إعادة بناء ملف المصدر الأصلي بشكل شبه كامل، بما يقارب الشفرة الفعلية المستخدمة أثناء الإنشاء (مع العلم أن النتائج تختلف باختلاف الحالة). [ 14 ] [ 15 ] [ 16 ]

في مقابل برامج فك التشفير، تم استحداث أدوات تشويش لغة ActionScript ، التي تحوّل الشفرة إلى شكل يُعطّل مخرجات برنامج فك التشفير مع الحفاظ على وظائف البرنامج وبنيته. تُطبّق أدوات التشويش عالية الجودة تحويلات معجمية، مثل إعادة تسمية المعرّفات، وتحويل تدفق التحكم، وتحويل تجريد البيانات، مما يُصعّب على برامج فك التشفير توليد مخرجات قابلة للفهم البشري. أما أدوات التشويش الأقل كفاءة، فتُدخل ثغرات في برامج فك التشفير، مما قد يتسبب في تعطل البرنامج بشكل غير متوقع أو في توليد شفرة مصدرية غير مفهومة.

مراجع

  1. RFC 4329 (الحد المتوافق مع ECMAScript) 
  2. "عقد أبل الضائع، وهايبر كارد، وما كان ليحدث لو كانت أبل آنذاك كما هي اليوم" . زد نت . ١٧ أبريل ٢٠١١. مؤرشف من الأصل في ٢١ أبريل ٢٠١١. تم الاطلاع عليه في ٤ ديسمبر ٢٠١٤ .
  3. "مواصفات لغة ActionScript 3" . مؤرشفة من الأصل في 27 مارس 2017. تم الاطلاع عليها في 12 نوفمبر 2016 .
  4. بريميلو، لي (18 أغسطس 2008). "ستة أسباب لاستخدام ActionScript 3.0" . شركة أدوبي سيستمز . تم الاطلاع عليه في 18 يونيو 2010 .
  5. غروسمان، غاري؛ هوانغ، إيمي (27 يونيو 2006). "نظرة عامة على ActionScript 3.0" . شركة أدوبي سيستمز . تم الاطلاع عليه في 18 يونيو 2010 .
  6. "المعيار ECMA-262" . Ecma-international.org . تم الاطلاع عليه بتاريخ 22 أبريل 2013 .
  7. فالديمار هوروات، محرر. (30 يونيو 2003). "مقترح نتسكيب لـ ECMAScript 4" . نتسكيب . مؤرشف من الأصل في 11 يوليو 2007. تم الاطلاع عليه في 11 أبريل 2019 .
  8. "مشغل فلاش | أدوبي فلاش بلاير 11 | نظرة عامة" . Adobe.com. 9 أبريل 2013. تم الاطلاع عليه بتاريخ 22 أبريل 2013 .
  9. "مختبرات أدوبي - مشغل أدوبي فلاش 10.1" . Labs.adobe.com. مؤرشف من الأصل في 5 يناير 2010. تم الاطلاع عليه في 17 ديسمبر 2009 .
  10. "ملاحظات إصدار Flash Player 11 وAIR 3 لمختبرات Adobe" (ملف PDF) . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 14 يوليو 2011.
  11. "ملاحظات إصدار Flash Player 11، AIR 3" . helpx.adobe.com . تم الاطلاع عليه في 7 أكتوبر 2016 .
  12. 1 2 "أوصاف أنواع البيانات + وثائق Flash CS3" . مؤرشف من الأصل في 2 نوفمبر 2007. تم الاطلاع عليه في 13 يوليو 2007 .
  13. "Flex 3 – معلمات الدالة" . Livedocs.adobe.com. مؤرشف من الأصل بتاريخ 12 فبراير 2009. تم الاطلاع عليه بتاريخ 17 ديسمبر 2009 .
  14. "مراجعة طرف ثالث لبرنامج فك تشفير آخر" . Flashmagazine.com. 21 أكتوبر 2007. مؤرشف من الأصل في 20 يونيو 2017. تم الاطلاع عليه في 22 أبريل 2013 .
  15. «تعليقات العملاء على أحد برامج فك تشفير فلاش» . Topshareware.com. مؤرشف من الأصل بتاريخ 8 نوفمبر 2016. تم الاطلاع عليه بتاريخ 22 أبريل 2013 .
  16. تعليقات العملاء على منتج فلاش آخر، مؤرشفة في 18 أغسطس 2006، في أرشيف الإنترنت (Wayback Machine).