5. Ders’te işlevin, bir eylemi gerçekleştirmek veya girdiye dayalı bir çıktı oluşturmak için talimatlar sağlayan yeniden kullanılabilir bir kod olduğunu öğrendin.
Bir işlevi tanımlamak için bir benzersiz tanımlayıcı, işlevin sonucu olarak beklenecek bilginin türü ve işlevin çağırıldığında yapacağı şey olmak üzere üç ana parça gerekir.
Bir İşlev Nasıl Tanımlanır?
İşlev İmzaları
3. Ders’te, bir değişkeni veya sabiti, onu adlandırarak ve ilgili değişken veya sabitin kullanacağı değer türünü vererek nasıl bildireceğini gördün.
İşlev imzası da benzer şekilde işler. İşlev imzası, işlev için benzersiz bir tanımlayıcıyla beraber işlevin ihtiyaç duyacağı girdiyi açıklayan parametreler, son olarak da sonuç veya çıktıya ilişkin dönüş türünü kullanır.
İşlevin tam olarak ne yaptığı kod bloğunda tanımlanır.
Kod Bloğu
Kod bloğu, işlev imzasından sonra gelen ifadeler grubudur. İşlevin sözdizimi ve kod bloğu şöyledir:
name() : type =
codeblock
Bir kod bloğunu biçimlendirmenin birkaç yolu vardır. Bunlardan biri, tanımlayıcıdan sonra gelen kod satırlarını girintili hale getirmektir. Bunu yukarıdaki işlev sözdiziminde görebilirsin. (Kod bloklarının nasıl kurulacağı konusunda sonraki derslerde daha fazla bilgi edineceksin, ancak şimdilik bunu kullanabilirsin.)
Kod bloğundaki ifadeler, işlevin çağrıldığı zaman tam olarak ne yapacağını tanımlar.
Bu ifadeler yalnızca o işlev çağrıldığında çalışır. Program ilgili kod bloğunun sonuna ulaştığında, bu ifadelerin işi bitecek (en azından bu işlev tekrar çağrılana kadar) ve program, bu işlev çağrısını izleyen bir sonraki kod bitini yürütecektir.
Gövde
Kod bloğu, işlevin ne yaptığını tanımladığında gövde olarak da adlandırılır.
Kapsam
Şu ana kadar aşağıdakileri öğrendin:
- Bir işlevin, onu programda bir şey yapması için etkinleştirmek amacıyla kullanılan benzersiz bir tanımlayıcısı vardır.
- Bir işlevin ne yapacağı, işlev gövdesindeki ifadelere bağlıdır.
- Gövdedeki son kod satırının işi bittiğinde, işlev çağrısı sona erer ve program, programdaki işlev çağrısından sonra gelen bir sonraki kod satırına geçer.
Bu işlevdeki talimatlar ile işlevden çıkan tüm değerler, işlevin kapsamını belirler.
Şimdi, işlevi tanımlamak için kullanabileceğin ifadelere geri dönmenin zamanı geldi. Sabitler ve değişkenler oluşturabilir (bunları 3. Ders’ten hatırlıyor musun?) ve bunları işlev gövdesine ekleyebilirsin.
Gövdeye bir değişken koyduğunda bu değişken, işlev kapsamı açısından yereldir. Yerel, bu bakımdan, bu kodun yalnızca o gövdede ve yalnızca işlev çağrıldığında yaşadığı ve çalıştığı anlamına gelir.
Öyleyse kapsam nedir? Kapsam, işlev adının işlev tarafından üretilen değerle ilişkilendirilmesidir. Söz konusu değer yalnızca oluşturulduğu kod bloğunda veya ilgili kapsamda kullanılabilir.
Örnek Oluşturma
Bir örnek, çağrıldığında ve yürütüldüğünde ilgili işlevin benzersiz bir uygulamasıdır. Bu örneğin oluşturulması örnek oluşturma (örnekleme) olarak adlandırılır. Örneğin İngilizce karşılığı olan “instance” ile örnek oluşturmanın İngilizce karşılığı olan “instantiation”ın her ikisinin de çok kısa bir süre anlamına gelen instant (anlık) sözcüğüyle ilişkili olduğuna dikkat et.
Bu da yaşam süresi kavramını gündeme getirir.
Yaşam Süresi
Bir örneğin, başlangıç, orta ve son olmak üzere bir yaşam süresi vardır.
Buna göre, bir işlev gövdesinde bulunanların yaşam süresi gövdenin kapsamı ile sınırlıdır ve kapsamın dışındaki yerel değişkenlere (ilgili geçerli kapsamla sınırlı olanlara) erişemezsin.
Koşullular
Aşağıdaki örnekte bir oyuncunun, sahip olduğu para adedini kullanarak satın alabileceği maksimum fare kapanı sayısının nasıl hesaplanacağı gösteriliyor.
MousetrapsYouCanBuy sabiti if bloğu içinde oluşturulmakta olup kapsam if bloğu ile sınırlıdır.
MaxMousetrapsYouCanBuy sabiti if kod bloğunun dışında kullanıldığında, MaxMousetrapsYouCanBuy adı kapsam dışında var olmadığından hata üretir. Bilinmeyen Tanımlayıcı şeklinde bir hata mesajı görürsün. Bunun anlamı, MaxMousetrapsYouCanBuyın yalnızca ilgili kapsamda geçerli olmasıdır.
İfade tamamlandığında, gövdede oluşturulan yerel sabitler ile yerel değişkenler artık mevcut değildir. Yaşam sürelerinin sonuna gelmişlerdir.
Kapsamı, bir şeylerin, işleri bitene kadar çalıştığı küçük bir kod öbeği olarak düşün.
İşlev Sözdizimi
İşlev sözdizimine tekrar, ancak bu defa biraz daha derinlemesine bakalım.
name() : type =
codeblock
name() : type = |
Bu işlev imzasıdır. Ortada iki noktayla ayrılan İşlev imzası, kullanılacak girdinin türünü içerir. İşlevin döndürdüğü değer ( |
codeblock |
İşlev kod bloğu veya gövde, işlevin çağrıldığında ne yapacağını göstermek için sabitleri, değişkenleri veya diğer ifadeleri eklediğin yerdir. |
Örneğin, bir fare kapanı için ödeme yapılmasına dair işlev şöyle görünebilir:
var Coins : int = 500
CoinsPerMousetrap : int = 100
BuyMousetrap() : void =
set Coins = Coins - CoinsPerMousetrap
Print("Mousetrap bought! You have {Coins} coins left.")
İşlev adları için adlandırma kuralları, değişkenler ve sabitler için kullanacağın kurallarla aynıdır. İşlevler, sıralı eylemler gerçekleştirdiğinden bunları, gerçekleştirdikleri eylemleri yansıtacak şekilde adlandırmak (BuyMousetrap() gibi) iyi bir uygulamadır.
Void
BuyMousetrap()e ilişkin işlev imzasında voidi fark etmiş olmalısın. Bir işleve ilişkin void (değer döndürmeyen) türü, bunun işlev çağrısının hiçbir şey döndürmeyeceği anlamına gelir. Bir sonraki derste ‘void'in ne olduğu ve nasıl kullanılacağı konusunda daha fazla bilgi edineceksin.
Kendini Tekrar Etme
Programlamanın önemli ilkelerinden biri Kendini Tekrar Etme şeklinde özetlenebilecek ilkedir.
Buna göre, bir kod satırını üç veya daha fazla kez tekrar ediyorsan ilgili satırı farklı bir şekilde yazmayı düşünmen gerekir. Ve evet, bunun bir sebebi var!
Ne kadar çok kod satırı yazarsan, o kodun bakımı o kadar zor olur ve kodu bir yerde değiştirip başka bir yerde değiştirmediğinde kaçınılmaz olarak hatalarla karşılaşma olasılığın o kadar artar.
Sabitler gibi işlevler de ihtiyacın olmadığında kodu tekrar etmemenin bir yoludur; dolayısıyla işlevler seni yalnızca kod kopyalamaktan kurtarmakla kalmaz, aynı zamanda bakım ihtiyacını ve kod hatası olasılığını azaltır.
Kod yazarken, hem ifadelerini ve işlevlerini adlandırma şeklin bakımından, hem de anahtar sözcükler ve yerleşik işlevler kullandığında büyük harf kullanımına dikkat et. Verse büyük/küçük harfe duyarlıdır; büyük harf kullanımın doğru ve tutarlı olmazsa hatalara (bugs) ve derleme hatalarına sebep olabilir.
Özet
- İşlev, bir eylemin gerçekleştirilmesi veya bir girdiye dayalı bir çıktı oluşturulması için talimatlar sağlayan yeniden kullanılabilir koddur.
- Her işlevin, bir tanımlayıcı, bir tür ve işlevin, çağrıldığı zaman sonucunun ne olacağını içeren bir kod bloğu olmak üzere üç parçaya ihtiyacı vardır.
- İşlevler, işlev imzalarına göre çağrılır.
- Kod bloğu, işlevin ne yaptığını tanımladığında gövde olarak da adlandırılır.
- Kapsam, kod bloğunun içeriği tarafından tanımlanan işlevle ilişkili değeri ifade eder.
- Bir kod bloğu içinde yer alan kod, o kapsam için yereldir.
- Yaşam süresi, kapsamın süresini ifade eder.
- Kendini Tekrar Etme.