Di Apps Script dan JavaScript, runtime atau lingkungan runtime berisi mesin JavaScript yang mengurai dan mengeksekusi kode skrip. Runtime menyediakan aturan terkait cara memori diakses, cara program berinteraksi dengan sistem operasi komputer, dan sintaksis program yang legal. Setiap browser web memiliki lingkungan runtime untuk JavaScript.
Secara historis, Apps Script telah didukung oleh penafsir JavaScript Rhino Mozilla. Meskipun Rhino menyediakan cara yang mudah bagi Apps Script untuk mengeksekusi skrip developer, Rhino juga mengikat Apps Script ke versi JavaScript tertentu (ES5). Developer Apps Script tidak dapat menggunakan sintaksis dan fitur JavaScript yang lebih modern dalam skrip menggunakan runtime Rhino.
Untuk mengatasi masalah ini, Apps Script kini didukung oleh runtime V8 yang mendukung Chrome dan Node.js. Anda dapat memigrasikan skrip yang ada ke V8 untuk memanfaatkan sintaksis dan fitur JavaScript modern.
Halaman ini menjelaskan fitur baru yang diaktifkan oleh V8 dan cara mengaktifkan V8 untuk digunakan dalam skrip Anda. Memigrasikan skrip ke V8 menjelaskan langkah-langkah untuk memigrasikan skrip yang ada untuk menggunakan runtime V8.
Fitur runtime V8
Skrip yang menggunakan runtime V8 dapat memanfaatkan fitur berikut:
Sintaksis ECMAScript modern
Anda dapat menggunakan sintaksis ECMAScript
modern dalam skrip yang didukung oleh runtime V8. Sintaksis ini mencakup
let
, const
, dan banyak fitur populer lainnya.
Lihat contoh sintaksis V8 untuk daftar singkat peningkatan sintaksis populer yang dapat Anda buat menggunakan runtime V8.
Peningkatan deteksi fungsi
Deteksi fungsi Apps Script ditingkatkan untuk skrip yang menggunakan V8. Runtime baru akan mengenali format definisi fungsi ini:
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 () => {}
Memanggil metode objek dari pemicu dan callback
Skrip yang menggunakan V8 dapat memanggil metode objek dan metode statis class dari tempat yang sudah dapat Anda panggil metode library-nya. Tempat tersebut mencakup hal berikut:
- Pemicu manifes Google Workspace Add-on
- Pemicu yang dapat diinstal
- Item menu di Google Workspace editor
- Fungsi callback pengguna, seperti yang dijelaskan dalam
contoh kode
ScriptApp.newStateToken()
.
Contoh V8 berikut menunjukkan penggunaan metode objek saat membuat item menu di Google Spreadsheet:
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');
}
}
Melihat log
Apps Script menyediakan dua layanan logging: layanan Logger
dan class console
. Kedua layanan ini menulis log ke layanan Stackdriver Logging yang sama.
Untuk menampilkan log Logger
dan console
, di bagian atas editor skrip, klik Execution log.
Lihat eksekusi
Untuk melihat histori eksekusi skrip Anda, buka project Apps Script dan di sebelah kiri, klik Executions
.Contoh sintaksis V8
Berikut adalah daftar singkat fitur sintaksis populer yang tersedia untuk skrip yang menggunakan runtime V8.
let
dan const
Kata kunci let
dan const
memungkinkan Anda menentukan variabel lokal cakupan blok dan konstanta
cakupan blok.
// 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 |
Fungsi panah
Fungsi panah menyediakan cara ringkas untuk menentukan fungsi dalam ekspresi.
// 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)); |
Class
Class menyediakan cara untuk mengatur kode secara konseptual dengan pewarisan. Class pada V8 pada dasarnya adalah sugar sintaksis di atas pewarisan berbasis prototipe 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) |
Mendestrukturisasi tugas
Ekspresi destrukturisasi tugas adalah cara cepat untuk mengekstrak nilai dari array dan objek ke variabel yang berbeda.
// 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 |
Literal template
Literal template adalah literal string yang memungkinkan ekspresi tersemat. Hal ini memungkinkan Anda menghindari pernyataan penyambungan string yang lebih kompleks.
// 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}`; |
Parameter default
Parameter default memungkinkan Anda menentukan nilai default untuk parameter fungsi dalam deklarasi fungsi. Hal ini dapat menyederhanakan kode dalam isi fungsi karena menghilangkan kebutuhan untuk menetapkan nilai default secara eksplisit ke parameter yang tidak ada.
// 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!" |
String multi-baris
Anda dapat menentukan string multibaris menggunakan sintaksis yang sama dengan literal template. Seperti literal template, sintaksis ini memungkinkan Anda menghindari penyambungan string dan menyederhanakan definisi string.
// 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`; |
Mengaktifkan runtime V8
Jika skrip menggunakan runtime Rhino, Anda dapat mengalihkannya ke V8 dengan melakukan hal berikut:
- Buka project Apps Script.
- Di sebelah kiri, klik Project Settings .
- Centang kotak Aktifkan runtime Chrome V8.
Atau, Anda dapat menentukan runtime skrip secara langsung dengan mengedit file manifes skrip:
- Buka project Apps Script.
- Di sebelah kiri, klik Project Settings .
- Centang kotak Tampilkan file manifes "appsscript.json" di editor.
- Di sebelah kiri, klik Editor
appsscript.json
.
>
- Dalam file manifes
appsscript.json
, tetapkan kolomruntimeVersion
ke nilaiV8
. - Di bagian atas, klik Simpan project .
Memigrasikan skrip ke V8 menjelaskan langkah-langkah lain yang harus Anda lakukan untuk memastikan skrip Anda berfungsi dengan baik menggunakan V8.
Mengaktifkan runtime Rhino
Jika skrip Anda menggunakan V8 dan perlu beralih untuk menggunakan runtime Rhino asli, lakukan hal berikut:
- Buka project Apps Script.
- Di sebelah kiri, klik Project Settings .
- Hapus centang pada kotak Aktifkan Chrome V8 runtime.
Atau, edit manifes skrip Anda:
- Buka project Apps Script.
- Di sebelah kiri, klik Project Settings .
- Centang kotak Tampilkan file manifes "appsscript.json" di editor.
- Di sebelah kiri, klik Editor
appsscript.json
.
>
- Dalam file manifes
appsscript.json
, tetapkan kolomruntimeVersion
ke nilaiDEPRECATED_ES5
. - Di bagian atas, klik Simpan project .
Bagaimana cara memigrasikan skrip yang ada?
Panduan Memigrasikan skrip ke V8 menjelaskan langkah-langkah yang perlu Anda lakukan untuk memigrasikan skrip yang ada untuk menggunakan V8. Hal ini mencakup pengaktifan runtime V8 dan memeriksa skrip untuk kompatibilitas yang diketahui.
Migrasi skrip otomatis ke V8
Mulai 18 Februari 2020, Google akan secara bertahap memigrasikan skrip yang ada yang lulus pengujian kompatibilitas otomatis kami ke V8. Skrip yang terpengaruh akan terus berfungsi normal setelah migrasi.
Jika Anda ingin memilih untuk tidak mengizinkan skrip otomatis dari migrasi, tetapkan kolom
runtimeVersion
dalam manifesnya ke DEPRECATED_ES5
. Anda dapat memilih untuk memigrasikan skrip ke V8 secara manual kapan saja setelahnya.
Bagaimana cara melaporkan bug?
Panduan dukungan menjelaskan cara mendapatkan bantuan pemrograman di Stack Overflow, menelusuri laporan masalah yang ada, mengajukan bug baru, dan membuat permintaan fitur baru.