Javascript 5 | Functions 1

Ömer Çelik
3 min readDec 1, 2019

--

Javascript nesne tabanlı bir dildir. Nesne tabanlı bir dilin de olmazsa olmazı functionlardır. Peki nedir bu function ?
Bir projede birden fazla yerde aynı kod bloğuna ihtiyacımız olabilir. Tam olarak burada functionlar devreye girer. Böyle bir durumda bu kod bloğunu tekrarlamak yerine bunları bir function’a çıkıp, ilgili yerlerde bu function’ımızı çağırırız. Böylece kod tekrarından kurtulmuş oluruz. Yani, projemizdeki işleri anlamlı parçalara bölerek, functionlar yardımıyla projemize modülerlik katarız.
Javascript’deki function’ları anlayabilmek için aşağıdaki örneği inceleyelim.
Örneğimizde neredeyse tüm case’leri incelemeye çalıştım. Field’ların başına this, var, const, let koyunca ne gibi farklar oluşuyor. Yada hiç bişey koymayınca nasıl bir fark oluşuyor. Aynı şekilde methodları da bu şekilde ele alıp Js’nin nasıl davrandığını anlamaya çalışacağız. Buradaki amacım Javascript ‘in function’ları ve içerisindeki variable’ları daha derinlemesine anlamaktır.
Örn :

var person = new Person(“Omer”);
console.log(person);
Çıktı : Person {name: “Omer”, getSurname: ƒ, getName: ƒ, getTcNo: ƒ, getSalary: ƒ}

Çıktıyı inceleyelim. Çıktıya göre bir tane name field’ı , 4 tane de methodumuz bulunmakta. Ancak biz method içerisine 5 tane field, 9 tane de method koymuştuk. Nereye kayboldu bunlar ?
Şimdi de functionlara ve field’lara erişmeye çalışalım.
person.getName() : “Omer”
person.getSalary() : “9500”
person.getSurname() : “Çelik”
person.getTcNo() : “9500” “11111111”

age : “20”
person.name : “Omer”
person.surname : undefined
person.age : undefined
person.tcNo : undefined
person.salary : undefined
İncelediğimizde çıktı da yazdırmış olduğumuz name field ve 4 tane methoda başarıyla eriştik. Bunun haricinde age field’ına erişebildik. Ancak buna erişebilmemizin sebebi global bir değişken olarak tanımlamamızdır.
Person nesnesi üzerinden surname, age, tcNo, salary ‘e erişmeye çalıştığımızda undefined sonucunu aldık.
Aslında çıkarılabilecek sonuç;
this.name // Omer // yaratılan her person nesnesinin field’ı olur.
age = “20”; //20 // global değişken olacaktır.
const tcNo = “11111111”; // person nesnesinin local variable’idir.
let salary = “9500”; // person nesnesinin local variable’idir.
var surname // Çelik // person nesnesinin local variable’idir.

Genel olarak açıklayacak olursak ;

field’ların başında var, let, const anahtar sözcüğü kullanmazsak, surname,tcNo, salary variable’ları global bir değişken olur. var, const, let yazmadan koddaki herhangi bir noktada bu variable’lar değiştirilirse kodda istenmeyen hatalara sebep olabilir.
var,const,let değişkeni current scope’da geçerlidir, bu örnek için de yalnızca person nesnesi içinde geçerlidir. Ve current scope’da olduğu için kodda başka bir noktada tanımlansa yada başka bir değer atansa da hataya sebep olmayacaktır.
Ayrıca function içerisinde this ile tanımladığımız function ve field’lara new’leyerek oluşturduğumuz yeni nesnelerden erişebilir ve kullanabiliriz.
Bunun harici başına var, const, let koyduğumuz değişkenler function içerisinde yaşarlar. Yani Java’daki private değişkenler gibi düşünebiliriz.
Bu değişkenleri method içerisinde kullanıp işlemlerimizi yapabiliriz. Ancak bunlara dışarıdan doğrudan erişemeyiz. Bu function içerisindeki methodlar yardımıyla bu variable’lara erişebiliriz. Bunun harici başına herhangi bir const, let, var koymazsak global bir değişken olur. Herhangi bir yerden erişebiliriz. Ancak yarattığımız nesne üzerinden erişemeyiz.

ÖNEMLİ NOT :

Bir methoda prototype kullanarak sonradan method eklenirse bu method o function’ın iç değişkenlerine erişemez. Yani this ile tanımlanan variable’larına erişebilir. Ancak var, const ve let ile tanımlanan değişkenlerine erişemez. Bu unutulmamalıdır. Hataya düşülen noktalardan biridir.

const person1 = new Person(“Omer”);
person1.getNameAndSurname();

Çıktı : Prototype Method…
this.name : Omer
this.surname : undefined
VM3778:4 Uncaught ReferenceError: surname is not defined
at Person.getNameAndSurname (<anonymous>:4:14)
at <anonymous>:1:9

Çıktı da da gördüğümüz gibi this yani person nesnesi içerisinde olan name variable’ına erişebildik. Ancak surname variable’ına erişemedik. Başına this koyarak veya koymadan erişmeye çalıştık ancak erişemedik.

Makalelerimin tamamına erişmek isteyen arkadaşlar için hepsinin linkinin bulunduğu bir tutorial hazırladım. Aşağıdaki linkte paylaşıyorum.

https://medium.com/@omercelikceng/javascript-makalelerimin-tamam%C4%B1-45a71ac3b386

--

--