Javascript

Javascript use strict Kullanımı

Herkese merhaba, Javascript yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda Javascript’te use strict ifadesinin ne olduğunu anlatacağım. Hadi başlayalım !

Katı Moda Giriş

strict, kelime anlamı olarak katı demek ve aslında Javascript’te de katı modda çalışmayı etkinleştirir. Katı modu şöyle açıklayabiliriz; normalde Javascript’te bir değişken oluştururken değişkenin başına var, let yada const anahtar kelimelerinden birini yazarız ve bu şekilde değişken oluştururuz fakat Javascript var, let yada const kullanmadan da değişken oluşturulmasına izin vermekte. Yani sayi = 5; gibi doğrudan bir değişken oluşturulmasına izin vermekte. Fakat katı mod etkinleştirildiğinde bu şekilde bir değişken oluşturma işlemi hata verecektir. use strict ifadesi herhangi bir atama yapılmaksızın tırnak işaretleri içinde string gibi yazılır fakat özel bir string olduğu için Javascript bunu katı moda geç olarak algılar. Ayrıca ya Javascript kodlarının en başında yada fonksiyonların başında kullanılır. Javascript kodlarının başında kullanılırsa tüm dosya, fonksiyonun başında kullanılırsa da sadece o fonksiyonda katı mod etkinleştirilir. Şimdi use strict ile katı moda geçildiğinde ne gibi şeylerin değiştiğine bir göz atalım.

  • Katı modda değişken oluşturmak için var, let yada const kullanmak zorunludur,
  • Katı modda delete komutu ile herhangi bir değişken, nesne yada fonksiyon silinemez,
  • Katı modda fonksiyonun aldığı parametlerin adı aynı olamaz,
  • Javascript için ayrılmış olan implements, interface, let, package, private, protected, public, static, arguments, eval ve yield anahtar kelimeleri katı modda değişken adı olarak kullanılamaz,
  • Octal yani 8 tabanındaki sayılar var, let yada const ile beraber kullanılsa dahi değişkenlere değer olarak atanamaz,
  • Sadece okunabilir bir değişkene değer ataması yapılamaz,
  • Fonksiyonların aldığı parametrelere başlangıç değeri atanamaz.

Şimdi bu özellikleri örnekler ile açıklayalım.

Veritipi Olmadan Değişken Oluşturma

'use strict'
sayi = 5;

Bu şekilde bir değişken oluşturmada “Uncaught ReferenceError: sayi is not defined” hatası verecektir. Bunun yerine sayi değişkenini var, let yada const anahtar kelimelerinden birini kullanarak oluşturmamız gerekiyor.

Referans Silme

'use strict'

// değişken silme
var sayi = 5;
delete sayi;

// fonksiyon silme
const func = (a, b) => { return a + b; }
delete func;

// nesne silme
var set = new Set();
delete set;

3 farklı örnek yazdım fakat üçünü de ayrı ayrı yazdığınızda katı modda delete komutunu kullanamayacağımız için “Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.” hatası verecektir.

Fonksiyonda Aynı İsimde Parametre

'use strict'
function topla(a, a) { return a + a; }

Javascript’te normalde bir fonksiyonun parametrelerinin adları aynı olabilmekte ve aynı olan parametleri kullanmak istediğinizde en son gelen parametrenin değerini kullanacaktır fakat strict modda buna izin vermemektedir. Yukarıdaki kod “Uncaught SyntaxError: Duplicate parameter name now allowed in this context” hatası verecektir.

Javascript’e Ayrılmış Kelimeler

'use strict'
var implements = 5;

Bu kodu çalıştırdığınızda “Uncaught SyntaxError: Unexpected strict mode reserved word” hatası verecektir. Katı mod etkinleştirilmediğinde yani ‘use strict’ yazılmadığında böyle bir değişken oluşturulabilmektedir.

8 Tabanlı Sayılar

'use strict'
const x = 010;

Katı mod etkinleştirilmediğinde yukarıdaki kod hata vermeden çalışacak ve x 8 tabanında bir sayı olacaktır. Fakat katı modda 8 tabanında bir sayı oluşturulamaz. Kodu çalıştırdığınızda “Uncaught SyntaxError: Octal literals are not allowed in strict mode.” hatası verecektir.

Readonly Değişkenin Değerini Değiştirme

'use strict'
const obj = { get x() { return 5; } };
obj.x = 10;

obj objesi içerisinde x değişkeninin sadece get metodu bulunuyor yani x’e sonradan değer ataması yapılamaz fakat katı mod dışında bu yapılabilir (obj.x = 10 satırında olduğu gibi) fakat geçerli olmaz. Yani x değişkeninin değerini 10 yaptıktan sonra obj.x şeklinde çağırdığımızda yine 5 değerini verir fakat katı modda sadece okunabilir bir değişkene değer ataması yapıldığında “Uncaught TypeError: Cannot set property x of #<Object> which has only a getter” hatası verir.

'use strict';
const obj = {};
Object.defineProperty(obj, 'x', { value: 0, writable: false });
obj.x = 3.14;

Bir önceki örneğin farklı bir varyasyonu olan bu örnekte obj adında bir obje içerisinde sadece okunabilir olan ve değeri 0 olan bir x değişkeni ekledik ve sonradan bu x değişkeninin değerini 3.14 olarak güncelledik. Katı mod dışında bu kod hata vermez fakat x değişkeninin değerini sonradan değiştirsek bile 0 olarak kalır. Katı modda ise “Uncaught TypeError: Cannot assign to read only property ‘x’ of object ‘#<Object>'” hatası verecektir.

'use strict'
function topla(a = 5, b = 6) {
    return a + b;
}

Fonksiyon Parametrelerine Başlangıç Değeri Atama

Katı mod dışında fonksiyonların aldığı parametrelere başlangıç değerleri atanabilir ve fonksiyonlar çağrılırken ilgili parametrelere değer ataması yapılmazsa başlangıç değerleri kullanılır. Fakat katı modda bu şekilde bir kullanımda “Illegal ‘use strict’ directive in function with non-simple parameter list” hatası verecektir.

use strict ile katı moda fonksiyon içerisinde geçilirse sadece o fonksiyon katı modda çalışır, fonksiyondan önce yada sonra bulunan kodlar bundan etkilenmez.

function f() {
    'use strict'
    sayi = 5;
}
sayi2 = 10;
console.log('Fonksiyon içerisinde use strict kullanım örneği');
f();

Bu kodu çalıştırdığınızda console ekranında Fonksiyon içerisinde use strict kullanım örneği yazacak ve sonrasında f() fonksiyonunu çağırdığımız ve fonksiyon içerisinde katı moda geçip sayi değişkenini başında var, let yada const olmadan oluşturduğumuz için “Uncaught ReferenceError: sayi is not defined” hatası verecektir. Görüldüğü üzere fonksiyonu oluşturup fonksiyon içerisinde katı moda geçsek bile fonksiyonu çağırmadan yazdığımız kodlar katı modda çalışmadan devam etti.

Evet Javascript’te use strict ile katı moda geçme ve katı mod özellikleri bu şekilde. Tüm Javascript yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.

Skorumuz:
Oy Vermek İçin Tıklayın
[Toplam: 0 Ortalama: 0]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu