If you're seeing this message, it means we're having trouble loading external resources on our website.

Bağlandığınız bilgisayar bir web filtresi kullanıyorsa, *.kastatic.org ve *.kasandbox.org adreslerinin engellerini kaldırmayı unutmayın.

Ana içerik

Tekrar: Fonksiyonlar

Bu, bu derste fonksiyonlarla ilgili yaptıklarımızın bir tekrarıdır.
Program yazarken, kod bloğunu yeniden yazmak zorunda kalmadan, sık sık kod bloklarını yeniden çalıştırabilmek isteriz. Kodları birlikte gruplama ve bir isim verme yolu bulmamız gerekir, ki bunu sonra bu isimle çağıralım; fonksiyon olarak adlandırdığımız budur.
Bir fonksiyon oluşturmak için, önce değişken için olduğu gibi, onu tanımlamalıyız ve ona biri isim vermeliyiz; sonra bunu fonksiyonun tanımı izler:
var sayHello = function() {
};
Bu fonksiyonun içine herhangi bir kodu - bir önerme, birden çok önerme - koyabiliriz, ne yapmak istediğimize bağlı. Bu fonksiyonda, herhangi bir konumda bir mesaj çıkarabiliriz:
var sayHello = function() {
   text("Halllllllo!", random(200), random(200));
};
Şimdi, sadece fonksiyonun bildirimini yaparsak, hiçbir şey olmaz. Programın fonksiyonun içindeki kodu çalıştırması için, fonksiyonun ismini, ardından boş parantezle yazarak fonksiyonu "çağırmamız" gerekir:
sayHello();
Sonra, bunu istediğimiz zaman, istediğimiz kadar çağırabiliriz!
sayHello();
sayHello();
sayHello();
Sıklıkla fonksiyonları özelleştirebilmek isteriz, programa, "tamam, bu kodun tamamını yap, ama yaptıklarında bir iki şeyi değiştir" demek isteriz. Bu şekilde, hem yeniden kullanılabilir hem de esnek kodumuz olur, bir taşla iki kuş vurmuş oluruz. Bunu, fonksiyonların "argümanlarını" belirterek, bu argümanları kullanarak fonksiyonun çalışmasını değiştirerek ve fonksiyonu çağırdığımızda bunları geçirerek yapabiliriz.
Örneğin, rect() ve ellipse()'leri nereye çizmek istediğimizi tam olarak söylememiz gibi, mesajın tam olarak nerede gösterilmesini istediğimizi söyleyebilmek isteseydik? Mesajı iki kesin koordinata koymak için, onu şöyle çağırdığımızı düşünebiliriz:
sayHello(50, 100);
sayHello(150, 200);
Bunun işe yaramasını sağlamak için, sayHello fonksiyon tanımımızı, 2 argüman alacak ve sonra bunları içeride kulanacak şekilde değiştirmemiz gerekir:
var sayHello = function(xPos, yPos) {
   text("Halllllllo!", xPos, yPos);
};
Geçirilen değerler, fonksiyon tanımımızın içindeki değişkenler gibi olur, ve isimler onları parantezin içinde nasıl çağırdığınıza bağlıdır. Bunları daha kısa olacak şekilde yeniden adlandırabiliriz:
var sayHello = function(x, y) {
   text("Halllllllo!", x, y);
};
Fonksiyonlarımız istediğiniz sayıda argüman alabilir - sıfır, bir, iki veya daha fazla. Fonksiyonumuzun bir isme merhaba demesine de karar vermiş olabilirdik:
var sayHello = function(name) {
   text("Halllllllo, " + name, random(200), random(200));
};
Ve o zaman bunu şöyle çağırırız:
sayHello("Winston");
sayHello("Pamela");
Bu fikirleri birleştirebiliriz ve isim ve konum için, üç argüman kabul etmesini sağlayabiliriz:
var sayHello = function(name, x, y) {
text("Merhaba " + name, x, y);
};
Ve sonra, şöyle de çağırabiliriz:
MerhabaDe("Vahit", 10, 100);
Bu tamamen fonksiyonlarınızın ne yapmasını istediğinize ve yapabildiklerini ne kadar özelleştirmek istediğinize bağlıdır. Girdisiz başlayabilirsiniz, ve ihtiyacınız olduğunu anladıktan sonra, daha fazla ekleyebiliriz.
Şimdi, aslında bunca zamandır -çizim ve animasyonları yapmak için- fonksiyonları çağırıyordunuz; rect, ellipse, triangle, vb. gibi. Bu fonksiyonların hepsi ProcessingJS kütüphanesindendir ve her zaman kullanabilmeniz için, bunları burada yaptığınız her programa yükleriz. Sizin için yararlı olacağını düşündüğümüz fonksiyonlar tanımladık, ama şimdi kendi programlarınızda hangi özel fonksiyonları kullanacağınız size kalmış. Örneğin, bir ellipse fonksiyonunu veriyoruz, ama bir kedi fonksiyonu vermiyoruz - programınızda değişik konumlarda çok sayıda kedi varsa, belki de kendi kedi fonksiyonunuzu oluşturmalısınız!
Fonksiyonlarla yapabileceğimiz başka güçlü bir şey daha vardır - bunları bazı değerleri almak, hesaplamak ve yeni bir değer vermek için kullanabiliriz. Hesap makinesiyle neler yapabileceğinizi bir düşünün - değerlerle toplama, çıkarma, karekök bulma, çarpma, vb. Bunların hepsi, girdiyi alan ve sonucu veren fonksiyonlarla yapılabilir. Fonksiyonlar girdiyi argüman olarak alır ve bir çıktı ifadesi kullanarak sonucu verir. Burada iki sayıyı toplayan ve sonucu veren bir fonksiyon bulabilirsiniz:
var addNumbers = function(num1, num2) {
  var result = num1 + num2;
  return result;
};

var sum = addNumbers(5, 2);
text(sum, 200, 200); // Displays "7"
return ifadesi iki şey yapar: onu çağırana bir değer verir (bu nedenle, bunu sum değişkeninde saklayabiliriz) ve anında fonksiyondan çıkar. Demek ki, böyle bir şey olması saçma olurdu, çünkü son satır asla yürütülmezdi:
var addNumbers = function(num1, num2) {
var result = num1 + num2;
return result;
result = result * 2; // silly!
};
Çıktı değerleri olan fonksiyonlar, programlarda veri işlemek için çok faydalıdır ve bunlar aynı zamanda ifadelerde birleştirilebilir:
var biggerSum = addNumbers(2, 5) + addNumbers(3, 2);
Fonksiyon çağrılarının içinde de fonksiyon çağırabilirsiniz, ancak bunu okumak bazen zor olabilir:
var hugeSum = addNumbers(addNumbers(5, 2), addNumbers(3, 7));
Artık kod bloklarına sarılan fonksiyonlar oluşturmayı öğrendiğinize göre, önemli bir kavramı konuşmamız gerekiyor: yerel değişkenler ve global değişkenler.
Bir fonksiyonun içinde yeni bir değişken tanımladığımızda, bunun fonksiyonda yerel olduğunu söyleriz. Bunun nedeni, sadece bu fonksiyonun bu değişkeni görebilmesidir - bunun dışındaki programın geri kalanı göremez. Bu fonksiyonun dışına çıktığımızda, artık yok gibidir. Aşağıdaki fonksiyonda, localResult yerel bir değişkendir:
var addNumbers = function(num1, num2) {
  var localResult = num1 + num2;
  println("Lokal çözüm budur: " + localResult);
  return localResult;
};
addNumbers(5, 7);
println(localResult); // oh noes!
Bu kodu çalıştırdığımızda, son satırda bir hata elde edeceğiz: "localResult tanımlı değildir." Bu değişken sadece fonksiyonun içinde tanımlanmıştır, çünkü bunu var localResult = satırıyla burada tanımladık ve fonksiyonun dışında tanımlı değildir.
Bir değişkeni fonksiyonlarımızın dışında tanımladığımızda, bunun global bir değişken olduğunu söyleriz. Bunun nedeni, buna artık tüm fonksiyonların erişebilmesi ve bununla istediğini yapabilmesidir.
var globalResult;

var addNumbers = function(num1, num2) {
  globalResult = num1 + num2;
  println("The global result is: " + globalResult);
};
addNumbers(5, 7);
println(globalResult);
Yukarıdaki kodu yürüttüğümüzde hata vermezz, çünkü globalResult'ı fonksiyonun dışında tanımladık, dolayısıyla istediğimizde buna erişebiliriz.
Her programlama dili farklıdır, ancak JavaScript'te değişkenlerin "fonksiyon kapsamı" olduğunu bilmek önemlidir - bir fonksiyon içinde tanımlanan yerel değişkenleri ve dışında tanımlanan genel değişkenleri görebilir, ama başka fonksiyonların içindeki yerel değişkenleri göremez.

Tartışmaya katılmak ister misiniz?

Henüz gönderi yok.
İngilizce biliyor musunuz? Khan Academy'nin İngilizce sitesinde neler olduğunu görmek için buraya tıklayın.