Apps Komut Dosyası ve JavaScript'te, çalışma zamanı veya çalışma zamanı ortamı, komut dosyası kodunu ayrıştırıp 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 konusunda 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 yorumcusu tarafından destekleniyordu. Rhino, Apps Komut Dosyası'nın geliştirici komut dosyalarını çalıştırması için kullanışlı bir yöntem sunarken aynı zamanda Apps Komut Dosyası'nı belirli bir JavaScript sürümüne (ES5) bağladı. Apps Komut Dosyası geliştiricileri, Rhino çalışma zamanını kullanarak komut dosyalarında daha modern JavaScript söz dizimi ve özellikleri kullanamaz.
Bu sorunu çözmek için Apps Komut Dosyası, artık Chrome ve Node.js'yi destekleyen V8 çalışma zamanı tarafından desteklenmektedir. Modern JavaScript söz dizimi 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 kullanmak ü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 örneklerine bakın.
İyileştirilmiş işlev algılama
V8 kullanan komut dosyaları için Apps Komut Dosyası işlevi algılama iyileştirildi. Yeni çalışma zamanı şu 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 () => {}
Tetikleyicilerden 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:
- Google Workspace Eklentileri manifest tetikleyicileri
- Yüklenebilir tetikleyiciler
- Düzenleyicilerdeki Google Workspace menü öğeleri
ScriptApp.newStateToken()
kod örneğinde açıklanan kullanıcı geri çağırma işlevleri.
Aşağıdaki V8 örneği, Google E-Tablolar'da menü öğeleri oluştururken nesne yöntemlerinin kullanımını göstermektedir:
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ı, Logger
hizmeti ve console
sınıfı olmak üzere iki günlük kaydı hizmeti sunar. Bu hizmetlerin her ikisi de günlükleri aynı Stackdriver Logging hizmetine yazar.
Logger
ve console
günlüklerini göstermek için komut dosyası düzenleyicisinin üst kısmındaki Yürütme günlüğü'nü tıklayın.
Yürütmeleri 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 solda Yürütmeler
simgesini tıklayın.V8 söz dizimi örnekleri
Aşağıda, V8 çalışma zamanını kullanan komut dosyaları tarafından kullanılabilen popüler söz dizimsel özelliklerin kısa bir listesi bulunmaktadır.
let
ve const
let
ve const
anahtar kelimeleri, sırasıyla blok kapsamı yerel değişkenleri ve engelleme 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çinde 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, devralma yoluyla kodu kavramsal olarak düzenlemek için bir araç sunar. V8'deki sınıflar, JavaScript prototipine dayalı devralma yerine esasen söz dizimseldir.
// 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ı kaldırma
Atamayı kaldırma ifadelerinin yapılandırılması, dizi ve nesnelerdeki değerleri farklı değişkenlere açmanın 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 değişmez değerleri, yerleştirilmiş ifadelere izin veren dize değişmez değerleridir. Daha karmaşık dize birleştirme ifadelerinin önüne geçmenizi 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 bildirimindeki işlev parametreleri için varsayılan değerleri belirtmenizi sağlar. Bu, eksik parametrelere açıkça varsayılan değerlerin atanması gerekliliğini 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. Değişmez şablon değerlerinde olduğu gibi, bu söz dizimi sayesinde dize birleştirmeleri yapmaktan kaçınabilir ve dize tanımlarını basitleştirebilirsiniz.
// 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ğıdaki adımları uygulayarak komut dosyasını V8'e geçirebilirsiniz:
- Apps Komut Dosyası projesini açın.
- Solda Proje Ayarları'nı tıklayın.
- 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:
- Apps Komut Dosyası projesini açın.
- Solda Proje Ayarları'nı tıklayın.
- "appsscript.json" manifest dosyasını düzenleyicide göster onay kutusunu işaretleyin.
- Solda, Düzenleyici'yi
appsscript.json
tıklayın.
>
appsscript.json
manifest dosyasındaruntimeVersion
alanınıV8
değerine ayarlayın.- En üstte, Projeyi kaydet'i tıklayın.
Komut dosyalarını V8'e taşıma bölümünde, komut dosyanızın V8 kullanırken iyi bir şekilde çalıştığından emin olmak için atmanız 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ı kullanacak şekilde değiştirmeniz gerekiyorsa aşağıdakileri yapın:
- Apps Komut Dosyası projesini açın.
- Solda Proje Ayarları'nı tıklayın.
- Chrome V8 çalışma zamanını etkinleştir onay kutusunun işaretini kaldırın.
Alternatif olarak, komut dosyası manifestinizi düzenleyin:
- Apps Komut Dosyası projesini açın.
- Solda Proje Ayarları'nı tıklayın.
- "appsscript.json" manifest dosyasını düzenleyicide göster onay kutusunu işaretleyin.
- Solda, Düzenleyici'yi
appsscript.json
tıklayın.
>
appsscript.json
manifest dosyasındaruntimeVersion
alanınıDEPRECATED_ES5
değerine ayarlayın.- 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'e taşımak için uygulamanız gereken adımlar açıklanmaktadır. Bu işlem, V8 çalışma zamanını etkinleştirmeyi ve komut dosyasında bilinen uyumsuzluk olup olmadığını kontrol etmeyi içerir.
Komut dosyalarını V8'e otomatik taşıma
18 Şubat 2020'den itibaren Google, otomatik uyumluluk testimizi geçen mevcut komut dosyalarını kademeli olarak V8'e taşımaya başlayacaktır. Etkilenen komut dosyaları, taşıma işleminden sonra normal şekilde çalışmaya devam eder.
Bir komut dosyasını otomatik taşımanın kapsamı dışında bırakmak istiyorsanız manifest dosyasında runtimeVersion
alanını DEPRECATED_ES5
olarak ayarlayın. Ardından istediğiniz zaman komut dosyasını V8'e manuel olarak taşımayı seçebilirsiniz.
Hataları nasıl bildirebilirim?
Destek kılavuzunda, Stack Overflow hakkında programlama yardımı alma, mevcut sorun raporlarında arama yapma, yeni hataları bildirme ve yeni özellik isteklerinde bulunma konuları açıklanmaktadır.