Struct & Enum

Solidity'de Struct ve Enum veri yapıları, daha karmaşık verileri ve durumları saklamak için kullanılır. Bu yapılar, akıllı kontratların daha düzenli ve okunabilir olmasına yardımcı olur.

1. Struct

Struct, farklı veri tiplerini bir araya getirip tek bir yapı altında toplamak için kullanılır. Struct'lar, Solidity'de veriyi organize etmenin ve kompleks veri tiplerini yönetmenin güçlü bir yoludur.

struct Person {
    string name;
    uint age;
    address wallet;
}

Yukarıdaki örnekte Person adlı struct, bir kişinin adını (name), yaşını (age) ve cüzdan adresini (wallet) saklar.

Struct Kullanımı

Struct tanımladıktan sonra, bu yapıdan yeni veri oluşturabiliriz.

Person public person1 = Person("Alice", 30, 0x1234567890123456789012345678901234567890);

Bu kodda, person1 adında bir Person örneği oluşturulmuş ve bu örneğe Alice adında bir kişi atanmıştır.

Struct ile Fonksiyonlar

Struct'lar, fonksiyonlar içinde parametre olarak kullanılabilir veya fonksiyonlardan döndürülebilir.

function createPerson(string memory _name, uint _age, address _wallet) public returns (Person memory) {
    return Person(_name, _age, _wallet);
}

Bu fonksiyon, bir Person struct'ı oluşturur ve döndürür.

Struct'ları Depolama

Struct'lar, mapping ve array gibi veri yapıları içerisinde depolanabilir. Bu, Solidity'de veri tabanı gibi kullanılabilecek güçlü bir yapıdır.

Bu örnekte, people adlı bir mapping kullanarak birden fazla kişiyi saklayabilirsiniz.

2. Enum

Enum, bir dizi sabit değeri tanımlamak için kullanılır. Özellikle belirli bir durum veya seçenek seti varsa, enum kullanmak kodu daha okunabilir hale getirir.

Bu enum, bir siparişin durumlarını saklamak için kullanılabilir: Pending, Shipped, Delivered, Canceled.

Enum Kullanımı

Enum tanımlandıktan sonra, bir değişken olarak kullanılabilir:

Bu örnekte, currentStatus adlı bir enum değişkeni oluşturulmuş ve setStatus fonksiyonu ile bu durum ayarlanabilir.

Enum ile Koşullu Yapılar

Enum'lar, koşullu yapılarda kullanılarak belirli işlemler gerçekleştirilirken durumların kontrol edilmesini sağlar:

Bu örnekte, shipOrder fonksiyonu yalnızca sipariş durumu Pending olduğunda çalışır ve durumu Shipped olarak günceller.

Örnek Uygulama

Aşağıda, hem Struct hem Mapping hem de Enum kullanılarak oluşturulmuş bir örnek kontrat bulunmaktadır:

Bu örnekte, StructEnumExample adlı kontrat, siparişleri takip etmek için Order struct'ını ve sipariş durumlarını izlemek için Status enum'ını kullanır. Yeni siparişler eklenebilir, durumları güncellenebilir ve mevcut durumu kontrol edilebilir.

Last updated