Fonksiyonlar
Solidity'de fonksiyonlar, bir kontratın temel yapı taşlarından biridir. Fonksiyonlar, belirli görevleri yerine getirmek için kod blokları olarak tanımlanır ve bu görevler yerine getirilirken kontratın durumunu değiştirebilir veya veri döndürebilir. Fonksiyonlar, Solidity'de mantığın ve işlemlerin organize edilmesi için kritik bir rol oynar.
1. Fonksiyon Tanımı
Bir fonksiyon, function
anahtar kelimesi ile tanımlanır. Fonksiyonlar, isteğe bağlı olarak parametreler alabilir ve belirli bir türde veri döndürebilir.
Basit Bir Fonksiyon Örneği
Bu örnekte, add
adlı bir fonksiyon tanımlanmıştır. Bu fonksiyon, bir uint
değeri döndürür ve herhangi bir parametre almaz.
Fonksiyonun Parçaları
Fonksiyon İsmi: Fonksiyonun ismi,
function
anahtar kelimesinden sonra gelir. Örneğin, yukarıdaki örnekteadd
fonksiyon ismidir.Parametreler: Parantez içinde yer alır ve fonksiyonun işlem yapması için gerekli olan verileri tanımlar. Yukarıdaki örnekte,
uint a
veuint b
parametrelerdir.Erişim Belirleyicisi: Fonksiyonun hangi kapsamda erişilebilir olduğunu belirler (örneğin
public
,private
,internal
,external
).Fonksiyon Türü:
pure
,view
,payable
gibi türlerle fonksiyonun kontratın durumunu değiştirip değiştirmediği veya para transferi yapıp yapmadığı belirtilir.Dönüş Türü:
returns
ifadesi ile fonksiyonun döndürdüğü veri türü belirtilir. Yukarıdaki örnekte,uint
veri türü döndürülmektedir.
2. Fonksiyon Türleri
Fonksiyonların hangi amaçla kullanıldığını ve nasıl çalıştığını belirten farklı türleri vardır:
Pure Fonksiyonlar: Kontratın durumunu değiştirmeyen ve blok zincirine veri yazmayan fonksiyonlardır. Yalnızca hesaplama yaparlar. Blockchain verilerini okuyamazlar.
View Fonksiyonlar: Kontratın durumunu değiştirmeyen ancak durumu okuyabilen fonksiyonlardır. Bu tür fonksiyonlar, blok zincirinden veri okur.
Payable Fonksiyonlar: Ether veya diğer kripto paraları kontrata göndermek için kullanılan fonksiyonlardır.
payable
anahtar kelimesiyle belirtilir.
3. Erişim Belirleyiciler
Fonksiyonlara erişim, public
, private
, internal
ve external
gibi belirleyicilerle kontrol edilir:
public: Herkesten erişime açıktır. Kontratın dışından ve içinden çağrılabilir.
private: Yalnızca tanımlandığı kontrat içinde erişilebilir. Kontratın dışından erişim mümkün değildir.
internal: Yalnızca tanımlandığı kontrat ve ondan türetilen kontratlar tarafından erişilebilir.
external: Yalnızca kontratın dışından çağrılabilir. Kontratın içinden çağrılmak istenirse,
this.externalFunction()
şeklinde çağrılmalıdır.
4. Fonksiyon Aşırı Yükleme (Overloading)
Solidity, aynı isme sahip ancak farklı parametre türlerine sahip birden fazla fonksiyon tanımlamaya izin verir. Bu konsepte fonksiyon aşırı yükleme (overloading) denir.
Örnek:
Bu örnekte, calculate
isimli iki farklı fonksiyon tanımlanmıştır. İlki bir parametre alır ve onu 2 ile çarparken, ikincisi iki parametre alır ve bunları toplar.
5. Fonksiyon Modifiers
Fonksiyon modifiyerleri, fonksiyonların çalışma şeklini değiştiren veya belirli bir mantık ekleyen özel yapılardır. Modifiyerler, fonksiyonlar çağrılmadan önce ön koşulları kontrol etmek için kullanılır.
Örnek:
Bu örnekte, onlyOwner
modifiyeri, fonksiyonu yalnızca kontrat sahibi (owner
) tarafından çağrılabilecek şekilde sınırlar.
Burada msg.sender o andaki işlemi imzalayan kişiyi ifade eden, önceden tanımlanmış global bir değişkendir. Solidity'de varsayılan olarak gelir.
Örnek Uygulama
Aşağıda, fonksiyonların farklı türlerini ve modifiyerleri gösteren bir örnek kontrat bulunmaktadır:
Bu kontratta, setData
fonksiyonu yalnızca kontrat sahibi tarafından çağrılabilirken, getData
fonksiyonu kontrattaki veriyi okuyabilir. multiply
fonksiyonu ise yalnızca bir hesaplama yapar.
Last updated