İşlevler, eylemler gerçekleştirebilir. Bir fonksiyonun yapabileceği şeylerden biri de onu çağırdığında sana bir değer vermektir. Bu değer sonuçtur.
Örneğin, GetRandomInt(1, 10) fonksiyonunu çağırdığında, 1 ile 10 arasında rasgele bir tamsayı almayı beklersin.
Fonksiyonundan istediğin değer türünü değiştirmek için fonksiyon imzasındaki türü değiştirmen gerekir. Örneğin:
GetNumberOfMousetrapsYouCanAfford() : int
Bu örnekte, GetNumberOfMousetrapsYouCanAfford() fonksiyonunun dönüş türü tamsayıdır, bu nedenle kodunda GetNumberOfMousetrapsYouCanAfford() fonksiyonunu her çağırdığında bunun bir tamsayı döndürmesini bekleyebilirsin.
GetNumberOfMousetrapsYouCanAfford() : float
Öte yandan, türü kayan sayı olarak değiştirirsen fonksiyon farklı türde bir değer döndürür.
Fonksiyonunun dönüş türü belirlendiğinde, fonksiyonun gövdesi (kod bloğu), bu türe uygun bir sonuç üretmelidir. Aksi halde kod derlenmeyecek ve bir derleyici hatası oluşacaktır. Bunu nasıl önleyeceğini öğrenmeye hazır mısın?
Sonuçlar ve Dönüşler
Sonuç, bir fonksiyon yürütüldüğünde (çalıştığında) döndürülen değerdir.
2. derste, Verse’te yerleşik özel sözcükler olan ve son derece spesifik eylemlerle ilişkilendirilen anahtar sözcükler açıklanmıştı.
Verse’te return aynı zamanda bir fonksiyona return anahtar sözcüğünü izleyen ifadeden elde edilen sonucu sağlamasını bildiren bir anahtar sözcüktür.
MyFunction() : int =
return 5
OnBegin<override>()<suspend> : void =
MyFunction() # result is 5
Yukarıdaki örnekte, MyFunction() çağrıldığında bu kod 5 değerini döndürür.
Return ifadesinin eklenmemesi fonksiyonunu bozmaz, ancak return ifadesini açıkça dahil etmek iyi bir uygulamadır. Bununla ilgili daha fazla bilgi edinmek istiyorsan Fonksiyonlar bölümüne bakabilirsin.
Erken Dönüşler
Programın bir return ifadesi yürüttüğünde, program fonksiyon kodu bloğundan hemen çıkar. Bu, return ifadesini diğer kodun önüne yerleştirirsen, onu takip eden kodun yürütülmeyeceği anlamına gelir. Bu özellik, belirli bir koşul karşılandığında bir fonksiyondan erken çıkmak için faydalı olabilir.
Aşağıdaki fonksiyon, CoinsPerMouseTrap’e göre Coins değişkenini günceller. Ancak fare kapanı satın almak için Coins değişkeni pozitif bir değer olarak ayarlanmalıdır. Coins negatifse fonksiyon bir hata mesajı yazdırır ve fonksiyon gövdesindeki kodun geri kalanını çalıştırmak için bir neden olmadığından hemen dönüş yapar.
Aslında return ifadesi olmasaydı fonksiyon hatalı bir şekilde Coins değerini düşürür ve Coins değerinin negatif olduğunu hiçbir zaman belirtmezdi.
var Coins : int = -10
CoinsPerMousetrap : int = 100
BuyMousetrap() : void =
if (Coins < 0):
Print("Error: Coins set to negative value")
return
set Coins = Coins - CoinsPerMousetrap
Print(“Mousetrap bought! You have {Coins} coins left.”)
Bir fonksiyondan return ifadesi ile erken çıkmak hatalara yol açabilir, bu yüzden bunu dikkatli kullanmak önemlidir. Örneğin, aşağıdaki kodda return Print(“Fare kapanı satın alındı! {Coins} madeni paran kaldı.”) ifadesinden önce çalışır ve Coins değişkeninin yeni değerini hiçbir zaman yazdırmaz.
var Coins : int = 500
CoinsPerMousetrap : int = 100
BuyMousetrap() : void =
if (Coins < 0):
Print("Error: Coins set to negative value")
return
set Coins = Coins - CoinsPerMousetrap
return
Print("Mousetrap bought! You have {Coins} coins left.")
Kodunda erken bir return ifadesi varsa kodun yine de derlenir, ancak Visual Studio kodu return’den sonraki ifadelerin çalışmayacağına dair seni uyarır.
Faydalı Bir Sonucu Olmayan Fonksiyonlar İçin Void
Bazen bir sonuç istersin, bazen de istemezsin.
2. dersteki türleri hatırlıyorsan her türün belirli bir türde değere ihtiyacı olduğunu da hatırlayabilirsin. Aşağıda çok kısa bir liste yer alıyor. Verse pek çok tür kullanır, ancak aşağıdakiler en yaygın türlerdir ve bu türler, değişkenlerle sabitlerin kullanımının temelini oluştur.
| Tür | Ne Yapar? | Değerler |
|---|---|---|
| Bu değer türü yalnızca true veya false olabilir. | true/false |
| Tamsayı, tam bir sayıdır (kesir değildir) ve | Tam sayılar |
| Bu tür, kesirler gibi tamsayı olmayan değerler içindir. | Ondalıklı sayılar |
| Bu tür her türlü metin içindir. Bu; harfler, sayılar, noktalama işaretleri, boşluklar ve hatta emojiler olabilir. 😻 | Harfler, sayılar, noktalama işaretleri, boşluklar, emoji’ler |
Sonuç üretmesi gerekmeyen bir fonksiyon oluşturduğunda, fonksiyonun dönüş türünü void olarak ayarlayabilirsin.
Bu, fonksiyonun türü void olarak ayarlandığı için kod bloğundaki son ifadenin bir derleyici hatası üretmeden herhangi bir türden bir sonuç üretebileceği anlamına gelir.
Return anahtar sözcüğünü void türüne sahip fonksiyonlar için kullanmaya devam edebilirsin, yalnızca return anahtar sözcüğüyle birlikte bir değer sağlaman gerekmez.
Özet
Sonuç, bir fonksiyonu çağırdığında ondan elde ettiğin değerdir.
Bir kod bloğunda, son ifade sonucu üretir.
Bir fonksiyonda değer türünü değiştirmek için fonksiyon imzasındaki türü değiştirmen gerekir.
Return, bir fonksiyona, onu takip eden ifadeden elde edilen değeri sağlamasını söyleyen bir anahtar sözcüktür.
Erken dönüş, return anahtar sözcüğünün bir kod bloğunda, bloğun bitiminden önce kullanılmasını ifade eder. Bu, programın, bloktaki kodun geri kalanını çalıştırmadan hemen ilgili kod bloğundan çıkmasına neden olur.
Void, fonksiyon değerinin başka hiçbir yerde kullanılmayacağını söyleyen bir türdür. Bir başka deyişle, ilgili değerle uğraşılmasına değmeyeceğini söylediği de düşünülebilir. Sonuç üretmesi gerekmeyen bir fonksiyonun türü olarak değer döndürmeyen void türünü kullanabilirsin.