Fonksiyonlar, Solidity’de belirli işlemleri gerçekleştirmek için kullanılan kod bloklarıdır. Akıllı sözleşmelerin kalbinde yer alan bu yapılar, veriyi işlemek, belirli hesaplamaları yapmak veya blockchain üzerinde işlemler gerçekleştirmek için kullanılır. Bu yazıda, Solidity’de fonksiyonların nasıl tanımlandığını, erişim belirleyicilerini ve fonksiyonlarla ilgili temel kavramları ele alacağız.
Fonksiyon Tanımı
Solidity’de bir fonksiyon tanımlamak oldukça basittir. Aşağıda, temel bir fonksiyonun nasıl tanımlandığını inceleyeceğiz.
pragma solidity ^0.8.0;
contract MyContract {
// Fonksiyon tanımı
function greet() public pure returns (string memory) {
return "Merhaba, Dünya!";
}
}
Gelin akıllı sözleşme kodundaki elemanların ne ifade ettiğine tek tek bakalım:
- function greet(): greet adında bir fonksiyon tanımlanmıştır.
- public: Fonksiyonun erişim belirleyicisidir (aşağıda detaylıca açıklanacaktır).
- pure: Fonksiyonun durumu değiştirmediğini veya blockchain verilerini okumadığını belirtir.
- returns (string memory): Fonksiyonun string türünde bir değer döndüreceğini ifade eder.
- return “Merhaba, Dünya!”: Fonksiyon çağrıldığında bu değeri döndürür.
Fonksiyon Parametreleri
Fonksiyonlar, girdiler alabilir ve bu girdilere göre işlem yapabilir. Hemen basit bir örnek yapalım.
function add(uint a, uint b) public pure returns (uint) {
return a + b;
}
Örnekteki add fonksiyonu iki adet uint (pozitif tam sayı) parametresi alır ve bu iki sayının toplamını döndürür.
Erişim Belirleyicileri
Fonksiyonların kimler tarafından çağrılabileceğini belirlemek için erişim belirleyicileri kullanılır. Solidity’de dört ana erişim belirleyicisi vardır:
1. public
Bir fonksiyon public olarak tanımlandığında, hem sözleşme içinden hem de dışından çağrılabilir.
function publicFunction() public {
// Herkes bu fonksiyonu çağırabilir
}
2. private
private fonksiyonlar yalnızca aynı sözleşme içerisinden erişilebilir. Bu, sözleşme dışındaki kullanıcıların veya diğer sözleşmelerin bu fonksiyona erişmesini engeller.
function privateFunction() private {
// Sadece bu sözleşme içerisinden çağrılabilir
}
3. internal
internal fonksiyonlar, yalnızca aynı sözleşmeden veya ondan türetilmiş (inheritance yoluyla) sözleşmelerden çağrılabilir. private fonksiyonlardan farklı olarak, miras alan sözleşmeler bu fonksiyonlara erişebilir.
function privateFunction() private {
// Sadece bu sözleşme içerisinden çağrılabilir
}
4. external
external fonksiyonlar yalnızca sözleşme dışından çağrılabilir. Sözleşme içinden çağrılmaları gerekiyorsa this anahtar kelimesi kullanılmalıdır.
function externalFunction() external {
// Sadece sözleşme dışından çağrılabilir
}
external fonksiyonlar sözleşme içinden this.externalFunction() şeklinde çağrılabilir. Ancak bu, daha fazla gas maliyeti oluşturur.
Belirleyici | Sözleşme İçi | Sözleşme Dışı | Miras Alan Sözleşmeler |
---|---|---|---|
public | ✔️ | ✔️ | ✔️ |
private | ✔️ | ❌ | ❌ |
internal | ✔️ | ❌ | ✔️ |
external | ❌ | ✔️ | ❌ |