في "برمجة التطبيقات" و"جافا سكريبت"، تحتوي وقت التشغيل أو بيئة وقت التشغيل على محرك جافا سكريبت الذي يحلل رمز النص البرمجي وينفّذه. يوفر وقت التشغيل قواعد لكيفية الوصول إلى الذاكرة، وكيفية تفاعل البرنامج مع نظام تشغيل الكمبيوتر، وبنية البرنامج القانونية. يحتوي كل متصفح ويب على بيئة وقت تشغيل لجافا سكريبت.
في السابق، كانت ميزة النص البرمجي لـ Apps مدعومة بتفسير جافا سكريبت Rhino في موزيلا. على الرغم من أن Rhino قدّمت طريقة سهلة للنص البرمجي لتنفيذ برمجة التطبيقات، إلا أنها ربطت أيضًا "برمجة التطبيقات" بإصدار JavaScript معيّن (ES5). يتعذّر على مطوّري "برمجة تطبيقات Google" استخدام بنية JavaScript وميزاتها الأكثر حداثة في النصوص البرمجية التي تستخدم "وقت تشغيل Rhino".
لمعالجة هذه المشكلة، يتم دعم برمجة التطبيقات من خلال V8 وقت التشغيل الذي يدعم Chrome وNode.js. يمكنك ترحيل النصوص البرمجية الحالية إلى V8 للاستفادة من بنية وميزات جافا سكريبت الحديثة.
تصف هذه الصفحة الميزات الجديدة التي تم تمكينها بواسطة V8 وكيفية تمكين V8 لاستخدامها في النصوص البرمجية. ترحيل النصوص البرمجية إلى V8 يوضِّح خطوات ترحيل النصوص البرمجية الحالية لاستخدام وقت تشغيل V8.
ميزات وقت تشغيل V8
يمكن للنصوص البرمجية التي تستخدم وقت تشغيل V8 الاستفادة من الميزات التالية:
بنية ECMAScript الحديثة
يمكنك استخدام بنية ECMAScript الحديثة في النصوص البرمجية التي يتم تشغيلها بواسطة وقت تشغيل V8. تتضمن هذه البنية
let
وconst
والعديد من الميزات الرائجة الأخرى.
راجع أمثلة على بنية V8 للحصول على قائمة قصيرة بتحسينات البنية العامة التي يمكنك إجراؤها باستخدام وقت تشغيل V8.
اكتشاف محسّن للوظائف
تم تحسين اكتشاف وظيفة برمجة التطبيقات للنصوص البرمجية التي تستخدم 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');
}
}
عرض السجلات
توفّر "برمجة التطبيقات" خدمتين لتسجيل الدخول: خدمة Logger
وفئة console
. تعمل كلتا الخدمتين على كتابة السجلات إلى خدمة Stackdriver Logging نفسها.
لعرض سجلّيّ 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 هي في الأساس سكرتات بناء على الوراثة المستمدة من نماذج جافا سكريبت.
// 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 من خلال إجراء ما يلي:
- افتح مشروع برمجة التطبيقات.
- على يمين الصفحة، انقر على إعدادات المشروع .
- حدد مربع الاختيار تمكين وقت تشغيل Chrome V8.
وبدلاً من ذلك، يمكنك تحديد وقت تشغيل النص البرمجي مباشرة من خلال تعديل ملف بيان النص البرمجي:
- افتح مشروع برمجة التطبيقات.
- على يمين الصفحة، انقر على إعدادات المشروع .
- حدد مربع الاختيار عرض ملف البيان "appsscript.json" في المحرر.
- في يمين الصفحة، انقر على رمز أداة التحرير
appsscript.json
.
>
- في ملف البيان
appsscript.json
، اضبط الحقلruntimeVersion
على القيمةV8
. - في أعلى الصفحة، انقر على حفظ المشروع .
يوضح ترحيل النصوص البرمجية إلى V8 الخطوات الأخرى التي يجب اتخاذها لضمان عمل النص البرمجي بشكلٍ جيد باستخدام V8.
تفعيل وقت تشغيل Rhino
إذا كان النص البرمجي يستخدم V8 وتحتاج إلى استخدامه لاستخدام وقت تشغيل وحيد القرن الأصلي، فنفذ ما يلي:
- افتح مشروع برمجة التطبيقات.
- على يمين الصفحة، انقر على إعدادات المشروع .
- ألغِ تحديد مربع الاختيار تمكين وقت تشغيل Chrome V8.
ويمكنك بدلاً من ذلك تعديل بيان النص البرمجي:
- افتح مشروع برمجة التطبيقات.
- على يمين الصفحة، انقر على إعدادات المشروع .
- حدد مربع الاختيار عرض ملف البيان "appsscript.json" في المحرر.
- في يمين الصفحة، انقر على رمز أداة التحرير
appsscript.json
.
>
- في ملف البيان
appsscript.json
، اضبط الحقلruntimeVersion
على القيمةDEPRECATED_ES5
. - في أعلى الصفحة، انقر على حفظ المشروع .
كيف يمكنني ترحيل النصوص البرمجية الحالية؟
يوضح دليل ترحيل النصوص البرمجية إلى V8 الخطوات التي يجب اتخاذها لترحيل نص برمجي حالي لاستخدام V8. ويتضمن هذا تمكين وقت تشغيل V8 والتحقق من النص البرمجي بحثًا عن أي حالات عدم توافق معروفة.
النقل التلقائي للنصوص البرمجية إلى V8
اعتبارًا من 18 شباط (فبراير) 2020، ستبدأ Google تدريجيًا في نقل النصوص البرمجية الحالية التي تجتاز اختبار التوافق التلقائي إلى الإصدار V8. تستمر النصوص البرمجية المتأثرة في العمل بشكل طبيعي بعد الترحيل.
إذا كنت تريد إيقاف نص برمجي من النقل التلقائي، اضبط الحقل runtimeVersion
في ملف البيان على DEPRECATED_ES5
. يمكنك اختيار نقل النص البرمجي إلى V8 يدويًا في أي وقت بعد ذلك.
كيف يمكنني الإبلاغ عن الأخطاء؟
يوضح دليل الدعم كيفية الحصول على مساعدة بشأن البرمجة على Stack Overflow، والبحث في تقارير المشكلات الحالية، وإرسال أخطاء جديدة، وإرسال طلبات ميزات جديدة.