في "برمجة تطبيقات Google" وJavaScript، يتضمّن وقت التشغيل أو بيئة وقت التشغيل محرّك JavaScript الذي يحلّل رمز النص البرمجي وينفّذه. يوفر وقت التشغيل قواعد حول كيفية الوصول إلى الذاكرة، وكيفية تفاعل البرنامج مع نظام تشغيل الكمبيوتر، وبنية البرنامج القانونية. يشتمل كل متصفح ويب على بيئة تشغيل لـ JavaScript.
في السابق، كانت "برمجة التطبيقات" مدعومة من مترجم Rhino لJavaScript من Mozilla. على الرغم من أنّ Rhino وفّر طريقة ملائمة لبرمجة التطبيقات لتنفيذ نصوص برمجية للمطوّرين، فإنّها ربطت أيضًا "برمجة التطبيقات" بإصدار JavaScript محدّد (ES5). لا يمكن لمطوّري "برمجة تطبيقات Google" استخدام بنية JavaScript وميزات أكثر حداثة في النصوص البرمجية التي تستخدم وقت تشغيل Rhino.
لحلّ هذه المشكلة، أصبحت "برمجة التطبيقات" متوافقة الآن مع بيئة تشغيل V8 التي تشغّل Chrome وNode.js. يمكنك نقل النصوص البرمجية الحالية إلى V8 للاستفادة من بنية JavaScript الحديثة وميزاتها.
تصف هذه الصفحة الميزات الجديدة التي يفعّلها المحرِّك V8 وكيفية تفعيل V8 للاستخدام في النصوص البرمجية. نقل النصوص البرمجية إلى V8 يصف خطوات نقل بيانات النصوص البرمجية الحالية لاستخدام بيئة التشغيل V8.
ميزات بيئة تشغيل V8
يمكن للبرامج النصية التي تستخدم وقت تشغيل V8 الاستفادة من الميزات التالية:
بنية ECMAScript الحديثة
يمكنك استخدام البنية الحديثة لـ ECMAScript
في النصوص البرمجية التي يدعمها وقت التشغيل V8. تتضمن هذه البنية كلاً من let
وconst
والعديد من الميزات الرائجة الأخرى.
يمكنك الاطّلاع على أمثلة على بنية V8 للحصول على قائمة مختصرة بالتحسينات الشائعة للبنية التي يمكنك إجراؤها باستخدام بيئة تشغيل V8.
رصد محسّن للوظائف
تم تحسين اكتشاف وظيفة "برمجة تطبيقات Google" للنصوص البرمجية التي تستخدم V8. تتعرّف بيئة التشغيل الجديدة على تنسيقات تعريف الدوال التالية:
function normalFunction() {} async function asyncFunction() {} function* generatorFunction() {} var varFunction = function() {} let letFunction = function() {} const constFunction = function() {} var namedVarFunction = function alternateNameVarFunction() {} let namedLetFunction = function alternateNameLetFunction() {} const namedConstFunction = function alternateNameConstFunction() {} var varAsyncFunction = async function() {} let letAsyncFunction = async function() {} const constAsyncFunction = async function() {} var namedVarAsyncFunction = async function alternateNameVarAsyncFunction() {} let namedLetAsyncFunction = async function alternateNameLetAsyncFunction() {} const namedConstAsyncFunction = async function alternateNameConstAsyncFunction() {} var varGeneratorFunction = function*() {} let letGeneratorFunction = function*() {} const constGeneratorFunction = function*() {} var namedVarGeneratorFunction = function* alternateNameVarGeneratorFunction() {} let namedLetGeneratorFunction = function* alternateNameLetGeneratorFunction() {} const namedConstGeneratorFunction = function* alternateNameConstGeneratorFunction() {} var varLambda = () => {} let letLambda = () => {} const constLambda = () => {} var varAsyncLambda = async () => {} let letAsyncLambda = async () => {} const constAsyncLambda = async () => {}
طرق عناصر طلب البيانات من العوامل المُشغِّلة ومعاودة الاتصال
يمكن للبرامج النصية التي تستخدم V8 استدعاء طرق الكائنات وفئة الطرق الثابتة من الأماكن التي يمكنك فيها استدعاء طرق المكتبة. وتشمل هذه الأماكن ما يلي:
- عوامل تشغيل بيان إضافات Google Workspace
- العوامل المشغِّلة القابلة للتثبيت
- عناصر القائمة في Google Workspace المحررين
- دوال معاودة الاتصال الخاصة بالمستخدم، مثل تلك الموضّحة في
نموذج رمز
ScriptApp.newStateToken()
.
يوضح مثال V8 التالي استخدام طرق الكائنات عند إنشاء عناصر قائمة في جداول بيانات Google:
function onOpen() {
var ui = SpreadsheetApp.getUi(); // Or DocumentApp, SlidesApp, or FormApp.
ui.createMenu('Custom Menu')
.addItem('First item', 'menu.item1')
.addSeparator()
.addSubMenu(ui.createMenu('Sub-menu')
.addItem('Second item', 'menu.item2'))
.addToUi();
}
var menu = {
item1: function() {
SpreadsheetApp.getUi().alert('You clicked: First item');
},
item2: function() {
SpreadsheetApp.getUi().alert('You clicked: Second item');
}
}
عرض السجلات
توفّر "برمجة تطبيقات Google" خدمتَين للتسجيل: خدمة Logger
والفئة console
. وتكتب كلتا الخدمتين السجلات على خدمة تسجيل Stackdriver نفسها.
لعرض سجلّات Logger
وconsole
، انقر على سجلّ التنفيذ في أعلى أداة تعديل النصوص البرمجية.
عرض عمليات التنفيذ
للاطّلاع على سجلّ تنفيذ النص البرمجي، افتح مشروع "برمجة التطبيقات"، وانقر على رمز عمليات التنفيذ
على يمين الصفحة.أمثلة على بنية V8
في ما يلي قائمة مختصرة بالميزات التركيبية الشائعة والمتاحة للنصوص البرمجية التي تستخدم وقت التشغيل V8.
let
وconst
تسمح لك الكلمتان الرئيسيتان let
وconst
بتحديد المتغيّرات المحلية لنطاق الحظر وثوابت نطاق الحظر، على التوالي.
// V8 runtime let s = "hello"; if (s === "hello") { let s = "world"; console.log(s); // Prints "world" } console.log(s); // Prints "hello" const N = 100; N = 5; // Results in TypeError |
الدوال السهمية
توفر الدوال السهمية طريقة مكثفة لتحديد الدوال ضمن التعبيرات.
// Rhino runtime function square(x) { return x * x; } console.log(square(5)); // Outputs 25 |
// V8 runtime const square = x => x * x; console.log(square(5)); // Outputs 25 // Outputs [1, 4, 9] console.log([1, 2, 3].map(x => x * x)); |
صفوف
توفر الفئات وسيلة لتنظيم الرمز من الناحية النظرية مع التوريث. الفئات في V8 هي في الأساس عبارة عن حل تركيبي فوق الوراثة المستندة إلى نموذج JavaScript الأولي.
// V8 runtime class Rectangle { constructor(width, height) { // class constructor this.width = width; this.height = height; } logToConsole() { // class method console.log(`Rectangle(width=${this.width}, height=${this.height})`); } } const r = new Rectangle(10, 20); r.logToConsole(); // Outputs Rectangle(width=10, height=20) |
إتلاف المهام الدراسية
تدمير تعبيرات المهام الدراسية هي طريقة سريعة لفك ضغط القيم من الصفائف والكائنات إلى متغيرات مميزة.
// Rhino runtime var data = {a: 12, b: false, c: 'blue'}; var a = data.a; var c = data.c; console.log(a, c); // Outputs 12 "blue" var array = [1, 2, 3]; var x = a[0]; var y = a[1]; var z = a[2]; console.log(x, y, z); // Outputs 1 2 3 |
// V8 runtime var data = {a: 12, b: false, c: 'blue'}; var {a, c} = data; console.log(a, c); // Outputs 12 "blue" var array = [1, 2, 3]; var [x, y, z] = array; console.log(x, y, z); // Outputs 1 2 3 |
القيم الحرفية للنموذج
القيم الحرفية للنموذج هي سلاسل حرفية تسمح بالتعبيرات المضمّنة. تتيح لك تجنب عبارات تسلسل السلاسل الأكثر تعقيدًا.
// Rhino runtime var name = 'Hi ' + first + ' ' + last + '.'; var url = 'http://localhost:3000/api/messages/' + id; |
// V8 runtime var name = `Hi ${first} ${last}.`; var url = `http://localhost:3000/api/messages/${id}`; |
المَعلمات التلقائية
تتيح لك المَعلمات التلقائية تحديد القيم التلقائية لمَعلمات الدوال في بيان الدوال. ويمكن أن يؤدي هذا إلى تبسيط التعليمة البرمجية في نص الدالة لأنه يزيل الحاجة إلى تعيين القيم الافتراضية بشكل صريح للمعلمات المفقودة.
// Rhino runtime function hello(greeting, name) { greeting = greeting || "hello"; name = name || "world"; console.log( greeting + " " + name + "!"); } hello(); // Outputs "hello world!" |
// V8 runtime var hello = function(greeting="hello", name="world") { console.log( greeting + " " + name + "!"); } hello(); // Outputs "hello world!" |
سلاسل متعددة الأسطر
يمكنك تحديد سلاسل متعددة الأسطر باستخدام البنية نفسها المستخدَمة في القيم الحرفية للنماذج. وكما هو الحال مع القيم الحرفية للنموذج، يتيح لك بناء الجملة هذا تجنب تسلسلات السلاسل وتبسيط تعريفات السلاسل.
// Rhino runtime var multiline = "This string is sort of\n" + "like a multi-line string,\n" + "but it's not really one."; |
// V8 runtime var multiline = `This on the other hand, actually is a multi-line string, thanks to JavaScript ES6`; |
تفعيل بيئة تشغيل V8
إذا كان هناك نص برمجي يستخدم وقت تشغيل Rhino، يمكنك تبديله إلى V8 من خلال تنفيذ ما يلي:
- افتح مشروع "برمجة تطبيقات Google".
- على يمين الصفحة، انقر على رمز إعدادات المشروع .
- ضع علامة في مربّع الاختيار تفعيل بيئة تشغيل Chrome V8.
بدلاً من ذلك، يمكنك تحديد وقت تشغيل النص البرمجي مباشرةً من خلال تعديل ملف بيان النص البرمجي:
- افتح مشروع "برمجة تطبيقات Google".
- على يمين الصفحة، انقر على رمز إعدادات المشروع .
- ضَع علامة في مربّع الاختيار إظهار ملف البيان "appsscript.json" في المحرِّر.
- على يمين الصفحة، انقر على رمز المحرِّر
appsscript.json
.
>
- في ملف البيان
appsscript.json
، اضبط الحقلruntimeVersion
على القيمةV8
. - في أعلى الشاشة، انقر على رمز حفظ المشروع .
توضّح عملية نقل النصوص البرمجية إلى V8 الخطوات الأخرى التي يجب اتخاذها لضمان عمل النص البرمجي بشكل جيد باستخدام V8.
تفعيل بيئة تشغيل Rhino
إذا كان النص البرمجي يستخدم V8 وتريد تبديله لاستخدام وقت تشغيل Rhino الأصلي، يمكنك إجراء ما يلي:
- افتح مشروع "برمجة تطبيقات Google".
- على يمين الصفحة، انقر على رمز إعدادات المشروع .
- أزِل العلامة من مربّع الاختيار تفعيل بيئة تشغيل Chrome V8.
يمكنك بدلاً من ذلك تعديل بيان النص البرمجي:
- افتح مشروع "برمجة تطبيقات Google".
- على يمين الصفحة، انقر على رمز إعدادات المشروع .
- ضَع علامة في مربّع الاختيار إظهار ملف البيان "appsscript.json" في المحرِّر.
- على يمين الصفحة، انقر على رمز المحرِّر
appsscript.json
.
>
- في ملف البيان
appsscript.json
، اضبط الحقلruntimeVersion
على القيمةDEPRECATED_ES5
. - في أعلى الشاشة، انقر على رمز حفظ المشروع .
كيف يمكنني نقل النصوص البرمجية الحالية؟
يصف دليل نقل النصوص البرمجية إلى الإصدار V8 الخطوات اللازمة لنقل بيانات نص برمجي حالي لاستخدام V8. يتضمّن ذلك تفعيل بيئة تشغيل V8 والتحقّق من النص البرمجي بحثًا عن أي حالات عدم توافق معروفة.
النقل التلقائي للنصوص البرمجية إلى V8
اعتبارًا من 18 شباط (فبراير) 2020، ستبدأ Google تدريجيًا في نقل النصوص البرمجية الحالية التي تجتاز اختبار التوافق التلقائي إلى V8. وتستمر النصوص البرمجية المتأثرة في العمل بشكل طبيعي بعد نقل البيانات.
إذا أردت إيقاف عملية نقل البيانات التلقائية لنص برمجي، اضبط الحقل
runtimeVersion
في ملف البيان على DEPRECATED_ES5
. يمكنك اختيار نقل النص البرمجي إلى V8 يدويًا في أي وقت بعد ذلك.
كيف يمكنني الإبلاغ عن الأخطاء؟
يشرح دليل الدعم كيفية الحصول على مساعدة بشأن البرمجة على موقع Stack Overflow والبحث في تقارير المشاكل الحالية والإبلاغ عن أخطاء جديدة وتقديم طلبات ميزات جديدة.