V8 Çalışma Zamanına Genel Bakış

Apps Komut Dosyası ve JavaScript'te çalışma zamanı veya çalışma zamanı ortamı, komut dosyası kodunu ayrıştıran ve yürüten JavaScript motorunu içerir. Çalışma zamanı, belleğe nasıl erişildiği, programın, bilgisayarın işletim sistemiyle nasıl etkileşim kurabileceği ve hangi program söz diziminin yasal olduğu ile ilgili kurallar sağlar. Her web tarayıcısının JavaScript için bir çalışma zamanı ortamı vardır.

Apps Komut Dosyası, geçmişte Mozilla'nın Rhino JavaScript yorumlayıcısı tarafından desteklenmektedir. Rhino, Apps Komut Dosyası'nın geliştirici komut dosyalarını yürütmesi için kullanışlı bir yöntem sunarken aynı zamanda Apps Komut Dosyası'nı belirli bir JavaScript sürümüne (ES5) de bağladı. Apps Komut Dosyası geliştiricileri, Rhino çalışma zamanını kullanarak komut dosyalarında daha modern JavaScript söz dizimi ve özellikler kullanamaz.

Bu endişeyi gidermek amacıyla Apps Komut Dosyası artık Chrome'u ve Node.js'yi destekleyen V8 çalışma zamanı tarafından desteklenmektedir. Modern JavaScript söz diziminden ve özelliklerinden yararlanmak için mevcut komut dosyalarını V8'e taşıyabilirsiniz.

Bu sayfada, V8 tarafından etkinleştirilen yeni özellikler ve komut dosyalarınızda kullanılmak üzere V8'i nasıl etkinleştirebileceğiniz açıklanmaktadır. Komut dosyalarını V8'e taşıma bölümünde, mevcut komut dosyalarını V8 çalışma zamanını kullanacak şekilde taşıma adımları açıklanmaktadır.

V8 çalışma zamanının özellikleri

V8 çalışma zamanını kullanan komut dosyaları aşağıdaki özelliklerden yararlanabilir:

Modern ECMAScript söz dizimi

V8 çalışma zamanı tarafından desteklenen komut dosyalarında modern ECMAScript söz dizimini kullanabilirsiniz. Bu söz dizimi, let, const ve diğer birçok popüler özelliği içerir.

V8 çalışma zamanını kullanarak yapabileceğiniz popüler söz dizimi iyileştirmelerinin kısa bir listesi için V8 söz dizimi örnekleri bölümüne bakın.

İyileştirilmiş işlev algılama

Apps Komut Dosyası işlevi, V8 kullanılan komut dosyaları için iyileştirilmiştir. Yeni çalışma zamanı aşağıdaki işlev tanımı biçimlerini tanır:

      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 () => {}

Tetikleyici ve geri çağırmalardan nesne yöntemlerini çağırma

V8 kullanan komut dosyaları, kitaplık yöntemlerini zaten çağırabileceğiniz yerlerden nesne yöntemlerini ve sınıf statik yöntemlerini çağırabilir. Bu yerler şunlardır:

Aşağıdaki V8 örneğinde, Google E-Tablolar'da menü öğeleri oluştururken nesne yöntemlerinin kullanımı gösterilmektedir:

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');
  }
}

Günlükleri göster

Apps Komut Dosyası iki günlük kaydı hizmeti sunar: Logger hizmeti ve console sınıfı. Bu hizmetlerin ikisi de günlükleri aynı Stackdriver Logging hizmetine yazar.

Logger ve console günlüklerini göstermek için komut dosyası düzenleyicisinin en üst kısmındaki Yürütme günlüğü'nü tıklayın.

Yürütme işlemlerini göster

Komut dosyanızın yürütme geçmişini görüntülemek için Apps Komut Dosyası projesini açın ve sol taraftaki Yürütme İşlemleri'ni tıklayın.

V8 söz dizimi örnekleri

Aşağıda, V8 çalışma zamanını kullanan komut dosyalarının kullanabileceği popüler söz dizimi özelliklerinin kısa bir listesi verilmiştir.

let ve const

let ve const anahtar kelimeleri, sırasıyla engelleme kapsamı yerel değişkenleri ve blok kapsamı sabitleri tanımlamanıza olanak tanır.

// 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
      

Ok işlevleri

Ok işlevleri, ifadeler içindeki işlevleri tanımlamak için kompakt bir yol sunar.

// 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));
      

Sınıflar

Sınıflar, devralmayla kodu kavramsal olarak düzenlemek için bir araç sağlar. V8'deki sınıflar, JavaScript prototipine dayalı kalıtıma kıyasla esasen sözdizimseldir.

// 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)
      

Atamaları yapılandırma

Atama oluşturma ifadeleri, dizilerdeki ve nesnelerdeki değerleri farklı değişkenler halinde paketlemenin hızlı bir yoludur.

// 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


      

Şablon değişmez değerleri

Şablon hazır değerleri, yerleştirilmiş ifadelere izin veren dize sabit değerleridir. Daha karmaşık dize birleştirme ifadelerinden kaçınmanızı sağlar.

// 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}`;


      

Varsayılan parametreler

Varsayılan parametreler, işlev beyanındaki işlev parametreleri için varsayılan değerleri belirtmenize olanak tanır. Bu, eksik parametrelere açıkça varsayılan değerler atama ihtiyacını ortadan kaldırdığı için işlev gövdesindeki kodu basitleştirebilir.

// 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!"

      

Çok satırlı dizeler

Şablon hazır değerleri ile aynı söz dizimini kullanarak çok satırlı dizeler tanımlayabilirsiniz. Şablon hazır değerlerinde olduğu gibi bu söz dizimi, dize birleştirmelerini önlemenizi ve dize tanımlarını basitleştirmenizi sağlar.

// 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 çalışma zamanını etkinleştirme

Bir komut dosyası Rhino çalışma zamanını kullanıyorsa aşağıdakileri yaparak V8'e geçirebilirsiniz:

  1. Apps Komut Dosyası projesini açın.
  2. Solda Proje Ayarları'nı tıklayın.
  3. Chrome V8 çalışma zamanını etkinleştir onay kutusunu seçin.

Alternatif olarak, komut dosyası manifest dosyasını düzenleyerek komut dosyası çalışma zamanını doğrudan belirtebilirsiniz:

  1. Apps Komut Dosyası projesini açın.
  2. Solda Proje Ayarları'nı tıklayın.
  3. "appsscript.json" manifest dosyasını düzenleyicide göster onay kutusunu işaretleyin.
  4. Sol tarafta, Düzenleyici > appsscript.json simgesini tıklayın.
  5. appsscript.json manifest dosyasında runtimeVersion alanını V8 değerine ayarlayın.
  6. En üstte Projeyi kaydet'i tıklayın.

Komut dosyalarını V8'e taşıma bölümünde, komut dosyanızın V8'i kullanarak iyi bir şekilde çalıştığından emin olmak için izlemeniz gereken diğer adımlar açıklanmaktadır.

Rhino çalışma zamanını etkinleştirme

Komut dosyanız V8 kullanıyorsa ve orijinal Rhino çalışma zamanını kullanmak için geçiş yapmanız gerekiyorsa aşağıdakileri yapın:

  1. Apps Komut Dosyası projesini açın.
  2. Solda Proje Ayarları'nı tıklayın.
  3. Chrome V8 çalışma zamanını etkinleştir onay kutusunun işaretini kaldırın.

Alternatif olarak, komut dosyası manifestinizi düzenleyin:

  1. Apps Komut Dosyası projesini açın.
  2. Solda Proje Ayarları'nı tıklayın.
  3. "appsscript.json" manifest dosyasını düzenleyicide göster onay kutusunu işaretleyin.
  4. Sol tarafta, Düzenleyici > appsscript.json simgesini tıklayın.
  5. appsscript.json manifest dosyasında runtimeVersion alanını DEPRECATED_ES5 değerine ayarlayın.
  6. En üstte Projeyi kaydet'i tıklayın.

Mevcut komut dosyalarını nasıl taşıyabilirim?

Komut dosyalarını V8'e taşıma kılavuzunda, mevcut bir komut dosyasını V8'i kullanacak şekilde taşımak için uygulamanız gereken adımlar açıklanmaktadır. Bu, V8 çalışma zamanını etkinleştirmeyi ve komut dosyasında bilinen uyumsuzlukların olup olmadığını kontrol etmeyi içerir.

Komut dosyalarının V8'e otomatik olarak taşınması

Google, 18 Şubat 2020'den itibaren otomatik uyumluluk testimizi geçen mevcut komut dosyalarını V8'e taşımaya başlayacak. Etkilenen komut dosyaları, taşıma işleminden sonra normal şekilde çalışmaya devam eder.

Bir komut dosyasını otomatik taşıma işleminin kapsamı dışında bırakmak istiyorsanız manifest dosyasındaki runtimeVersion alanını DEPRECATED_ES5 olarak ayarlayın. Daha sonra istediğiniz zaman komut dosyasını V8'e manuel olarak taşımayı seçebilirsiniz.

Hataları nasıl bildirebilirim?

Destek rehberinde, Stack Overflow hakkında nasıl programlama yardımı alacağınız, mevcut sorun raporlarında nasıl arama yapacağınız, yeni hataları nasıl dosyalayacağınız ve yeni özellik isteklerinde nasıl bulunacağınız açıklanmaktadır.