1. Anasayfa
  2. 100 Günde Solidity

🧵 #100GündeSolidity 015 : Structs

🧵 #100GündeSolidity 015 : Structs
Structs
0

Structs: Veri Yapılarının Oluşturulması ve Yönetimi

#100DaysOfSolidity serisinin 15. gününde Solidity Dilinde “Structs” üzerine konuşacağız. Haydi bugün hangi konulara değineceğimizi listeleyelim.

Solidity dilinde, kullanıcılar kendi veri yapılarını oluşturmak için struct adlı bir yapı kullanabilirler. Structs, benzer verileri gruplandırmak için kullanışlıdır. Örneğin, bir blockchain platformunda kullanıcıların bilgilerini saklamak için struct oluşturabilirsiniz. Bu struct içinde kullanıcının adı, soyadı, e-posta adresi ve diğer bilgileri saklayabilirsiniz.

Aşağıda bir struct örneği verilmiştir:

pragma solidity ^0.8.0;

struct User {
  address email;
  string firstName;
  string lastName;
}

Bu struct, kullanıcının e-posta adresi, adı ve soyadını saklamak için kullanılabilir.

Structs, bir smart contract içinde tanımlanabildiği gibi, ayrı bir dosyada da tanımlanabilir ve daha sonra başka bir smart contractta içe aktarılabilir. Bu, kodun daha okunaklı ve organize olmasını sağlar. Örneğin:

pragma solidity ^0.8.0;
import "./User.sol";

contract MyContract {
  User[] users;
  ...
}

Bu örnekte, User struct’ı ayrı bir dosyada tanımlanmış ve MyContract adlı smart contractta içe aktarılmıştır. Bu sayede, MyContract içinde User struct’ını kullanarak kullanıcıları saklayabiliriz.

Structs nedir ve nasıl kullanılır?

“Structs” Solidity dilinde kullanıcı tarafından tanımlanabilen veri yapılarıdır. Bu veri yapıları, benzer verileri gruplandırmak için kullanılır. Örneğin, bir blockchain platformunda kullanıcıların bilgilerini saklamak için struct oluşturabilirsiniz. Bu struct içinde kullanıcının adı, soyadı, e-posta adresi ve diğer bilgileri saklayabilirsiniz.

Structs, smart contract içinde tanımlanabilir veya ayrı bir dosyada tanımlanabilir ve daha sonra başka bir smart contractta içe aktarılabilir. Bu, kodun daha okunaklı ve organize olmasını sağlar.

Struct tanımlamak için “struct” anahtar kelimesi kullanılır, ve struct içinde tanımlanmış değişkenlerin türü ile birlikte tanımlanır. Örnek olarak:

pragma solidity ^0.8.0;

struct User {
  address email;
  string firstName;
  string lastName;
}

Bu struct, kullanıcının e-posta adresi, adı ve soyadını saklamak için kullanılabilir. Bu struct içinde tanımlanmış değişkenlerin türleri adres, string’dir.

Struct’ı kullanmak için, struct’ı tanımladıktan sonra, struct’ın adını kullanarak bir değişken oluşturabiliriz. Örnek olarak:

User memory user1 = User({
  email: "[email protected]",
  firstName: "John",
  lastName: "Doe"
});

Bu örnekte, “user1” değişkeni User struct’ını kullanarak oluşturuldu ve struct içinde tanımlanmış email, firstName, lastName değişkenlerine değer atandı.

Structs içinde değişkenlerin tanımlanması

Structs içinde değişkenler, struct tanımı içinde tanımlanır. Değişken türü ve adı ile birlikte tanımlanır. Örnek olarak:

struct User {
  address email;
  string firstName;
  string lastName;
}

Bu struct içinde “email”, “firstName” ve “lastName” adlı değişkenler tanımlanmıştır ve türleri address ve string’dir.

Struct içinde tanımlanmış değişkenler, struct’ı kullanan smart contract içinde kullanılabilir. Örneğin:

contract MyContract {
  User[] users;
  function addUser(address _email, string memory _firstName, string memory _lastName) public {
    users.push(User({
      email: _email,
      firstName: _firstName,
      lastName: _lastName
    }));
  }
}

Bu örnekte, MyContract içinde User struct’ını kullanarak “users” adlı bir dizi oluşturuldu ve “addUser” fonksiyonu ile bu diziye kullanıcılar eklenebilir. Bu fonksiyon içinde, _email, _firstName ve _lastName adlı parametreler User struct’ının email, firstName ve lastName değişkenlerine atanır.

Ayrıca struct içinde değişkenlere bir varsayılan değer atayabilirsiniz. Örneğin:

struct User {
  address email;
  string firstName;
  string lastName;
  uint age = 18;
}

Bu örnekte, “age” adlı değişken için varsayılan değer 18 olarak atanmıştır, Bu değerin kullanılmasına gerek kalmadığı durumlarda kullanıcı tarafından değiştirilebilir.

Structs içinde fonksiyonların kullanımı

Structs içinde fonksiyonlar, struct tanımı içinde tanımlanabilir. Bu fonksiyonlar, struct içinde tanımlanmış değişkenleri kullanabilir ve struct içinde yapılacak işlemleri gerçekleştirebilir. Örneğin:

struct User {
  address email;
  string firstName;
  string lastName;

  function getFullName() public view returns (string memory) {
    return firstName + " " + lastName;
  }
}

Bu örnekte, User struct’ı içinde “getFullName” adlı bir fonksiyon tanımlanmıştır. Bu fonksiyon, firstName ve lastName değişkenlerini kullanarak kullanıcının tam adını döndürür.

Struct içinde tanımlanmış fonksiyonlar, struct’ı kullanan smart contract içinde kullanılabilir. Örneğin:

contract MyContract {
  User[] users;
  function addUser(address _email, string memory _firstName, string memory _lastName) public {
    users.push(User({
      email: _email,
      firstName: _firstName,
      lastName: _lastName
    }));
  }
  function getUserFullName(uint256 _index) public view returns (string memory) {
    return users[_index].getFullName();
  }
}

Bu örnekte, MyContract içinde User struct’ını kullanarak “users” adlı bir dizi oluşturuldu ve “addUser” fonksiyonu ile bu diziye kullanıcılar eklenebilir. “getUserFullName” fonksiyonu ile ise dizideki kullanıcının tam adını getirebiliriz. Bu fonksiyon içinde, “users” dizisinden _index parametresi ile belirlenen kullanıcının getFullName() fonksiyonunu çağırır.

Structs dizileri ve dizilerde struct kullanımı

Structs dizileri, struct tipinde birden fazla değer saklamak için kullanılabilir. Örneğin, bir blockchain platformunda kullanıcıların bilgilerini saklamak için struct oluşturabilirsiniz ve bu struct’ı kullanarak bir dizi oluşturabilirsiniz. Örnek olarak:

struct User {
  address email;
  string firstName;
  string lastName;
}

contract MyContract {
  User[] users;
  function addUser(address _email, string memory _firstName, string memory _lastName) public {
    users.push(User({
      email: _email,
      firstName: _firstName,
      lastName: _lastName
    }));
  }
}

Bu örnekte, MyContract içinde User struct’ını kullanarak “users” adlı bir dizi oluşturuldu ve “addUser” fonksiyonu ile bu diziye kullanıcılar eklenebilir. Bu fonksiyon içinde, _email, _firstName ve _lastName adlı parametreler User struct’ının email, firstName ve lastName değişkenlerine atanır.

Struct dizileri, smart contract içinde kullanıldığı gibi başka smart contractlar arasında da paylaşılabilir. Örneğin, bir smart contract içinde kullanıcıların bilgilerini saklamak için bir dizi oluşturabilirsiniz ve bu diziyi başka bir smart contractta kullanarak kullanıcıların bilgilerine erişebilirsiniz.

Dizilerde struct kullanımı, veri yapılarını daha okunaklı ve organize hale getirmek için kullanışlıdır. Örneğin, bir blockchain platformunda kullanıcıların bilgilerini saklamak için struct oluşturduğunuzda, bu struct’ı kullanarak bir dizi oluşturarak kullanıcıların bilgilerini tek bir yerde saklamış olursunuz ve bu dizi içindeki kullanıcıların bilgilerine daha kolay erişebilirsiniz.

Structs ile veri yapılarının oluşturulması ve yönetimi

Structs, Solidity dilinde kullanıcı tarafından tanımlanabilen veri yapılarıdır. Bu veri yapıları, benzer verileri gruplandırmak için kullanılır. Örneğin, bir blockchain platformunda kullanıcıların bilgilerini saklamak için struct oluşturabilirsiniz. Bu struct içinde kullanıcının adı, soyadı, e-posta adresi ve diğer bilgileri saklayabilirsiniz.

Structs oluşturmak için “struct” anahtar kelimesi kullanılır ve struct içinde tanımlanmış değişkenlerin türü ile birlikte tanımlanır. Örnek olarak:

pragma solidity ^0.8.0;

struct User {
  address email;
  string firstName;
  string lastName;
}

Bu struct, kullanıcının e-posta adresi, adı ve soyadını saklamak için kullanılabilir.

Structs içinde tanımlanmış değişkenler, struct’ı kullanan smart contract içinde kullanılabilir. Örneğin:

contract MyContract {
  User[] users;
  function addUser(address _email, string memory _firstName, string memory _lastName) public {
    users.push(User({
      email: _email,
      firstName: _firstName,
      lastName: _lastName
    }));
  }
}

Bu örnekte, MyContract içinde User struct’ını kullanarak “users” adlı bir dizi oluşturuldu ve “addUser” fonksiyonu ile bu dizi

ile bu diziye kullanıcılar eklenebilir. Bu fonksiyon içinde, _email, _firstName ve _lastName adlı parametreler User struct’ının email, firstName ve lastName değişkenlerine atanır. Bu şekilde struct ile oluşturduğumuz veri yapılarını smart contract içinde kullanarak kullanıcıların bilgilerini saklamış oluyoruz ve bu bilgilere erişebilir hale getiriyoruz.

Struct ile oluşturduğumuz veri yapılarını kullanarak, verileri daha okunaklı ve organize hale getirebilir, fonksiyonlar ile işlemler yapabilir ve dizilerde saklayarak verileri daha kolay yönetebiliriz. Özellikle blockchain uygulamalarında veri yapılarının doğru yönetimi önemlidir, structs ile bu yönetimi daha kolay hale getirebiliriz.

Structs kullanımı ile kod okunaklılığının arttırılması

Structs, Solidity dilinde kullanıcı tarafından tanımlanabilen veri yapılarıdır. Bu veri yapıları, benzer verileri gruplandırmak için kullanılır. Structs kullanarak, verileri daha okunaklı ve organize hale getirebilir ve kodun anlaşılmasını ve okunmasını kolaylaştırabilirsiniz.

Örneğin, bir blockchain platformunda kullanıcıların bilgilerini saklamak için struct oluştursanız, bu struct içinde kullanıcının adı, soyadı, e-posta adresi gibi bilgileri saklamış olursunuz. Bu bilgileri tek tek tanımlamak yerine, struct içinde saklamak daha okunaklı ve anlaşılır hale getirir.

Ayrıca, struct içinde tanımlanmış değişkenlere ve fonksiyonlara ayrı ayrı erişmek yerine, struct’ı kullanarak erişebilirsiniz. Örneğin, struct içinde tanımlanmış bir “firstName” değişkenine erişmek için user.firstName şeklinde kullanabilirsiniz. Bu şekilde, kod daha okunaklı ve anlaşılır hale gelir.

Structs kullanarak, veri yapılarının yönetimi daha kolay hale gelir. Özellikle blockchain uygulamalarında veri yapılarının doğru yönetimi önemlidir ve structs ile bu yönetimi daha kolay hale getirebiliriz.

Structs ile veri yapılarının fonksiyonlarla birlikte kullanımı

Structs, fonksiyonlarla birlikte kullanıldığında veri yapılarının daha etkili bir şekilde yönetilmesini sağlar. Örneğin, bir blockchain platformunda kullanıcıların bilgilerini saklamak için struct oluştursanız, struct içinde tanımlanmış değişkenlere ve fonksiyonlara erişmek için fonksiyonlar kullanabilirsiniz.

Fonksiyonlar, struct içinde tanımlanmış değişkenleri okuma ve yazma işlemleri yapmak için kullanılabilir. Örneğin, struct içinde tanımlanmış bir “firstName” değişkenine erişmek için getter ve setter fonksiyonlar tanımlayabilirsiniz.

struct User {
  address email;
  string firstName;
  string lastName;
  function getFirstName() public view returns (string memory) {
    return firstName;
  }
  function setFirstName(string memory _firstName

) public {
firstName = _firstName;
}
}

Bu örnekte, User struct içinde “getFirstName” ve “setFirstName” adlı fonksiyonlar tanımlanmıştır. “getFirstName” fonksiyonu struct içinde tanımlanmış olan “firstName” değişkenini okur ve geri döndürür. “setFirstName” fonksiyonu ise struct içinde tanımlanmış olan “firstName” değişkenini yeni bir değer ile günceller.

Fonksiyonlar, struct içinde tanımlanmış değişkenleri işlemek için de kullanılabilir. Örneğin, struct içinde tanımlanmış bir “lastName” değişkenine erişmek için bir fonksiyon tanımlayabilirsiniz ve bu fonksiyon ile lastName’i düzenleyebilirsiniz.

Structs ile birlikte kullanılan fonksiyonlar, veri yapılarını daha okunaklı ve organize hale getirmekte ve veri yapılarının yönetimini daha kolay hale getirmektedir. Özellikle blockchain uygulamalarında veri yapılarının doğru yönetimi önemlidir ve structs ile birlikte kullanılan fonksiyonlar bu yönetimi daha kolay hale getirebilir.

Structs ile veri yapılarının storage ve memory’de saklanması

Solidity dilinde, structs veri yapıları storage ve memory’de saklanabilir. Storage, smart contract’ın ömür boyu sakladığı verileri barındıran bellek alanıdır. Memory ise, fonksiyonlar içinde geçici olarak kullanılan verileri barındıran bellek alanıdır.

Storage’da saklanan struct’lar, smart contract ömür boyu saklamakta ve daha sonra erişilebilir olmaktadır. Memory’de saklanan struct’lar ise, fonksiyon içinde kullanıldıktan sonra gidecektir. Storage’da saklanan struct’lar için güncelleme yaparken mutability yani değiştirilebilirlik özelliği kullanılması gerekir. Memory’de saklanan struct’lar ise yalnızca okunabilir olabilir.

Storage’da saklanan struct’lar, smart contract’ın ömür boyu sakladığı verileri barındıran bellek alanıdır. Örneğin:

pragma solidity ^0.8.0;

struct User {
  address email;
  string firstName;
  string lastName;
}

contract MyContract {
  User[] public users;
  function addUser(address _email, string memory _firstName, string memory _lastName) public {
    users.push(User({
      email: _email,
      firstName: _firstName,
      lastName: _lastName
    }));
  }
}

Bu örnekte, “MyContract” içinde User struct’ını kullanarak “users” adlı bir dizi oluşturuldu ve “addUser” fonksiyonu ile bu diziye kullanıcılar eklenebilir. Bu fonksiyon içinde, _email, _firstName ve _lastName adlı parametreler User struct’ının email, firstName ve lastName değişkenlerine atanır.

Memory’de saklanan struct’lar ise fonksiyon içinde geçici olarak kullanılır. Örnek olarak:

pragma solidity ^0.8.0;

struct User {
  address email;
  string firstName;
  string lastName;
}

contract MyContract {
  function addUser(address _email, string memory _firstName, string memory _lastName) public {
    User memory user = User({
      email: _email,
      firstName: _firstName,
      lastName: _lastName
    });
    // do something with user
  }
}

Bu örnekte, “addUser” fonksiyonu içinde “user” adlı bir User struct’ı memory’de oluşturuldu. Bu struct, fonksiyon içinde kullanılır ve daha sonra silinir. Fonksiyon içinde, _email, _firstName ve _lastName adlı parametreler User struct’ının email, firstName ve lastName değişkenlerine atanır ve “user” struct’ı ile işlem yapabilirsiniz.

Storage ve memory’de saklanan struct’ların kullanımı arasındaki temel fark, storage’da saklanan struct’ların ömür boyu saklandığı ve daha sonra erişilebilir olurken, memory’de saklanan struct’ların sadece fonksiyon içinde kullanıldıktan sonra silindiğidir. Hangi alanı kullanacağınızı veri yapılarının ömür boyu saklanması gerekip gerekmediğine ve performans gerekliliklerine göre belirlemelisiniz.

Structs ile veri yapılarının dinamik olarak oluşturulması

Solidity dilinde, structs veri yapıları dinamik olarak oluşturulabilir. Örneğin, bir fonksiyon içinde struct’ı oluşturup, oluşan struct’ı diziye ekleyebilirsiniz. Aynı şekilde, struct içinde tanımlanmış değişkenlere değer atayarak struct’ı oluşturabilirsiniz. Bu sayede, fonksiyonlar içinde struct’ları dinamik olarak oluşturup, dizilerde saklayarak verileri daha kolay yönetebilirsiniz.

Örnek olarak, bir blockchain platformunda kullanıcıların bilgilerini saklamak için struct oluştursanız, bu struct içinde kullanıcının adı, soyadı, e-posta adresi gibi bilgileri saklamış olursunuz ve bu bilgileri fonksiyonlar içinde dinamik olarak oluşturup, dizilerde saklayarak verileri daha kolay yönetebilirsiniz. Örnek olarak, aşağıdaki kod parçasında User struct’ını kullanarak, addUser fonksiyonu ile dinamik olarak kullanıcıları saklamaktadır:

pragma solidity ^0.8.0;

struct User {
  address email;
  string firstName;
  string lastName;
}

contract MyContract {
  User[] public users;
  function addUser(address _email, string memory _firstName, string memory _lastName) public {
    users.push(User({
      email: _email,
      firstName: _firstName,
      lastName: _lastName
    }));
  }
}

Bu örnekte, “MyContract” içinde User struct’ını kullanarak “users” adlı bir dizi oluşturuldu ve “addUser” fonksiyonu ile bu diziye kullanıcılar dinamik olarak eklenebilir. Bu fonksiyon içinde, _email, _firstName ve _lastName adlı parametreler User struct’ının email, firstName ve lastName değişkenlerine dinamik olarak atanır.

Bu şekilde struct ile oluşturduğumuz veri yapılarını dinamik olarak oluşturarak, smart contract içinde kullanarak kullanıcıların bilgilerini saklamış oluyoruz ve bu bilgilere erişebilir hale getiriyoruz. Dinamik struct oluşturma yöntemi, veri yapılarını daha kolay yönetebilmemizi ve veri yapılarını daha dinamik hale getirmemizi sağlar. Bu sayede, fonksiyonlar içinde struct’ları dinamik olarak oluşturup, dizilerde saklayarak verileri daha kolay yönetebilirsiniz. Örneğin, bir blockchain platformunda kullanıcı kaydı sistemi oluştururken, kullanıcı bilgilerini dinamik olarak alıp, struct yapısını kullanarak saklamak ve sonrasında bu verileri kullanarak işlem yapmak daha kolay hale gelir.

Structs ile veri yapılarının diğer smart contractlar ile iletişim kurması

Solidity dilinde, structs veri yapıları, diğer smart contractlar ile iletişim kurabilir. Bu sayede, farklı smart contractlar arasında veri aktarımı yapabilirsiniz. Örneğin, bir blockchain platformunda kullanıcı bilgilerini sakladığınız bir smart contract, bu bilgileri işlem yapmak için gerekli olan başka bir smart contracta gönderebilir.

Bu iletişim, smart contractlar arasında fonksiyon çağrıları ile gerçekleştirilir. Örneğin, struct içinde tanımlanmış bir değişkeni diğer bir smart contracta göndermek için, struct’ın içindeki değişkeni parametre olarak alan bir fonksiyon yazabilirsiniz ve bu fonksiyonu diğer smart contractta çağırarak değişkeni diğer smart contractta kullanabilirsiniz.

pragma solidity ^0.8.0;

struct User {
  address email;
  string firstName;
  string lastName;
}

contract UserContract {
  User[] public users;
  function addUser(address _email, string memory _firstName, string memory _lastName) public {
    users.push(User({
      email: _email,
      firstName: _firstName,
      lastName: _lastName
    }));
  }

  function getUser(uint _index) public view returns (address, string memory, string memory) {
    User storage user = users[_index];
    return (user.email, user.firstName, user.lastName);
  }
}

contract AnotherContract {
  UserContract userContract;
  constructor(address _userContract) public {
    userContract = UserContract(_userContract);
  }

  function getUserFromUserContract(uint _index) public view returns (address, string memory, string memory) {
    return userContract.getUser(_index);
  }
}

Bu örnekte, “UserContract” smart contractı içinde User struct’ını kullanarak “users” adlı bir dizi oluşturuld

u ve “addUser” fonksiyonu ile bu diziye kullanıcılar eklenebilir. “getUser” fonksiyonu ise, dizi içindeki belirli bir kullanıcının bilgilerini döndürmektedir. “AnotherContract” ise “UserContract” ‘ın fonksiyonlarını çağırarak kullanıcı bilgilerini almaktadır. “AnotherContract” constructor fonksiyonunda “UserContract” adresi alınır ve ilişkilendirilir. “getUserFromUserContract” fonksiyonu ile “UserContract” ‘dan gelen kullanıcı bilgileri alınır.

Bu şekilde, struct veri yapılarını diğer smart contractlar ile iletişim kurarak, veri aktarımı yapabilirsiniz. Bu yöntem, smart contractlar arasında veri paylaşımı yaparken kullanabileceğiniz bir yöntemdir ve veri yapılarının daha kolay yönetilmesini sağlar.

Structs ile veri yapılarının örnek uygulamalar ve kullanım senaryoları

Structs veri yapıları, birçok farklı uygulamada kullanılabilir. Örnek olarak, bir blockchain platformunda kullanıcı bilgilerini saklamak için struct kullanabilirsiniz. Bu struct içinde kullanıcının adı, soyadı, e-posta adresi, telefon numarası gibi bilgileri saklayabilirsiniz ve bu bilgileri fonksiyonlar içinde dinamik olarak oluşturup, dizilerde saklayarak verileri daha kolay yönetebilirsiniz.

Ayrıca, bir e-ticaret platformunda ürün bilgilerini saklamak için struct kullanabilirsiniz. Bu struct içinde ürünün adı, fiyatı, stok durumu, üretici bilgisi gibi bilgileri saklayabilirsiniz ve bu bilgileri fonksiyonlar içinde dinamik olarak oluşturup, dizilerde saklayarak verileri daha kolay yönetebilirsiniz.

Bir diğer senaryo ise, bir bilet satış platformunda bilet bilgilerini saklamak için struct kullanabilirsiniz. Bu struct içinde biletin sefer bilgisi, tarihi, fiyatı, kolt

uk sayısı gibi bilgileri saklayabilirsiniz ve bu bilgileri fonksiyonlar içinde dinamik olarak oluşturup, dizilerde saklayarak verileri daha kolay yönetebilirsiniz.

Ayrıca, bir sağlık platformunda hasta bilgilerini saklamak için struct kullanabilirsiniz. Bu struct içinde hastanın adı, soyadı, cinsiyeti, yaşı, tahlil sonuçları gibi bilgileri saklayabilirsiniz ve bu bilgileri fonksiyonlar içinde dinamik olarak oluşturup, dizilerde saklayarak verileri daha kolay yönetebilirsiniz.

Bu örnekler, struct veri yapılarının çeşitli kullanım senaryolarını göstermektedir. Structs, verileri daha kolay yönetebilmemizi ve okunaklı hale getirmemizi sağlar ve birçok farklı uygulamada kullanılabilir.

Structs ile veri yapılarının güvenlik ve performans açısından değerlendirilmesi

Structs veri yapıları, güvenlik ve performans açısından değerlendirildiğinde, çeşitli avantajlar ve dezavantajlar taşır.

Avantajlar:

  • Verileri daha okunaklı hale getirir ve daha kolay yönetebilir hale getirir.
  • Verileri daha kolay işleyebilir hale getirir.
  • Verileri daha kolay paylaşabilir hale getirir.

Dezavantajlar:

  • Veri yapılarının boyutu büyüdükçe, performans düşebilir.
  • Verileri yanlış kullanırsanız, güvenlik açığı oluşabilir.

Güvenlik açısından, structs veri yapıları, veri yapılarının daha kolay yönetilmesini sağlar. Özellikle, veri yapılarının dizilerde saklanması ile verilerin daha kolay erişilebilir hale gelir. Bu sayede, smart contractlar arasında veri aktarımı yapmak daha kolay hale gelir. Ancak, structs veri yapılarının kullanımı ile birlikte, smart contractlar arasındaki veri aktarımının güvenliği daha önemlidir. Özellikle, structs veri yapılarının kullanımı ile birlikte, smart contractlar arasındaki veri aktarımı için güvenli fonksiyonlar yazmak ve bu fonksiyonların güvenliğini test etmek önemlidir.

Performans açısından, structs veri yapıları, veri yapılarının daha kolay yönetilmesini sağlar ve smart contractlar arasınd

aki veri aktarımını kolaylaştırır. Ancak, structs veri yapılarının kullanımı ile birlikte, smart contractlar arasındaki veri aktarımı için çok fazla fonksiyon çağrısı yapılması performansı etkileyebilir. Ayrıca, structs veri yapılarının dizilerde saklanması, dizinin boyutunun büyümesiyle birlikte performansı etkileyebilir. Bu nedenle, structs veri yapılarının kullanımının performans açısından da dikkatli olunması gerekir ve gerektiğinde optimize edilmesi gerekir.

Sonuç olarak, structs veri yapıları, güvenlik ve performans açısından değerlendirildiğinde, çeşitli avantajlar ve dezavantajlar taşır. Ancak, doğru kullanıldığında ve optimize edildiğinde, veri yapılarının daha kolay yönetilmesini sağlar ve smart contractlar arasındaki veri aktarımını kolaylaştırır.

Structs ile veri yapılarının debug ve test edilmesi

Structs veri yapılarının debug ve test edilmesi, diğer smart contract kodları gibi, aynı yöntemlerle gerçekleştirilir.

Debugging: Structs veri yapıları içinde tanımlanmış değişkenler ve fonksiyonlar, Solidity dilinde tanımlanmış olan diğer değişken ve fonksiyonlar gibi, debug edilebilir. Örneğin, struct içinde tanımlanmış değişkenlerin değerlerini görüntülemek için, Truffle veya Remix gibi araçlar kullanabilirsiniz. Ayrıca, struct içinde tanımlanmış fonksiyonları çalıştırırken oluşan hata mesajlarını inceleyerek, kodun hangi noktada hata verdiğini tespit edebilirsiniz.

Testing: Structs veri yapılarının test edilmesi, diğer smart contract kodları gibi, unit testler ile gerçekleştirilir. Örneğin, struct içinde tanımlanmış değişkenlerin ve fonksiyonların doğru değerleri döndürüp döndürmediğini kontrol etmek için, test fonksiyonları oluşturabilirsiniz. Ayrıca, struct içinde tanımlanmış fonksiyonların doğru şekilde çalışıp çalışmadığını kontrol etmek için, test fonksiyonları oluşturabilirsiniz. Bu test fonksiyonlarını, Truffle veya bu gibi araçlar kullanarak, otomatik olarak çalıştırabilirsiniz.

Sonuç olarak, structs veri yapılarının debug ve test edilmesi, diğer smart contract kodları gibi, aynı yöntemlerle gerçekleştirilir. Özellikle, debug ve test sürecinde, struct içinde tanımlanmış değişkenlerin ve fonksiyonların doğru değerleri döndürüp döndürmediğini ve doğru şekilde çalışıp çalışmadığını kontrol etmek önemlidir. Bu işlemleri gerçekleştirmek için araçlar, kodu inceleme ve hata ayıklama, test fonksiyonları oluşturma ve otomatik test yürütme gibi fonksiyonlar içeren araçlar kullanabilirsiniz. Ayrıca, struct içinde tanımlanmış değişkenlerin ve fonksiyonların kullanımının doğru olduğundan emin olmak için, kodun dokümantasyonunu düzgün bir şekilde yazmanız gerekir.

Structs ile veri yapılarının gelecekteki gelişmeler ve trendleri

Structs veri yapılarının gelecekteki gelişmeler ve trendleri hakkında, kesin bir bilgiye sahip değilim. Ancak, blockchain teknolojisi ve smart contractlar ile ilgili alanlar hızla gelişmektedir ve bu alandaki gelişmeler structs veri yapılarını da etkileyebilir. Özellikle, veri yapılarının daha kolay yönetilmesi ve kullanılması için, structs veri yapılarının daha gelişmiş özellikler içerebileceği ve daha kolay kullanılabilir hale gelebileceği düşünülebilir.

Ayrıca, smart contractlar arasındaki veri aktarımının güvenliği ve performansının arttırılması için, structs veri yapılarının güvenlik ve performans açısından optimize edilmiş versiyonları ortaya çıkabilir.

Son olarak, veri yapılarının daha kolay yönetilmesi ve kullanılması için, structs veri yapılarının daha kolay anlaşılır ve kullanımı kolay hale getirilmiş versiyonları ortaya çıkabilir.

Örnek Akıllı Sözleşme İncelemesi

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

contract Todos {
    struct Todo {
        string text;
        bool completed;
    }

    // An array of 'Todo' structs
    Todo[] public todos;

    function create(string calldata _text) public {
        // 3 ways to initialize a struct
        // - calling it like a function
        todos.push(Todo(_text, false));

        // key value mapping
        todos.push(Todo({text: _text, completed: false}));

        // initialize an empty struct and then update it
        Todo memory todo;
        todo.text = _text;
        // todo.completed initialized to false

        todos.push(todo);
    }

    // Solidity automatically created a getter for 'todos' so
    // you don't actually need this function.
    function get(uint _index) public view returns (string memory text, bool completed) {
        Todo storage todo = todos[_index];
        return (todo.text, todo.completed);
    }

    // update text
    function updateText(uint _index, string calldata _text) public {
        Todo storage todo = todos[_index];
        todo.text = _text;
    }

    // update completed
    function toggleCompleted(uint _index) public {
        Todo storage todo = todos[_index];
        todo.completed = !todo.completed;
    }
}

Bu Solidity kodu, “Todos” adlı bir smart contract içerir. Bu smart contract, “Todo” adlı bir struct tanımlar ve bu struct içinde “text” ve “completed” adlı iki değişkeni içerir. Aynı zamanda, “todos” adlı bir dizi de tanımlanmıştır ve bu dizi, “Todo” structlarını saklar.

“create” adlı bir fonksiyon tanımlanmıştır ve bu fonksiyon, “Todo” structlarının oluşturulması için kullanılır. Bu fonksiyon, “text” değişkeninin değerini alır ve bu değer ile birlikte, structların oluşturulması için üç farklı yöntem kullanılmıştır.

“get” adlı bir fonksiyon tanımlanmıştır ve bu fonksiyon, belirli bir dizinin içeriğini döndürür. Ayrıca, “updateText” ve “toggleCompleted” adlı fonksiyonlar da tanımlanmıştır ve bu fonksiyonlar, belirli bir dizinin içeriğini güncellemek için kullanılır. Bu fonksiyonlar “Todo” structlarının içeriğ

i ile ilgili işlemler yaparlar. Örneğin, “updateText” fonksiyonu belirli bir dizinin içeriğindeki “text” değişkeninin değerini günceller ve “toggleCompleted” fonksiyonu belirli bir dizinin içeriğindeki “completed” değişkeninin değerini tersine çevirir.

“Todos” adlı smart contract, “Todo” structlarının oluşturulması, saklanması, okunması ve güncellenmesi için kullanabileceğiniz temel fonksiyonlar içerir. Bu smart contract, örnek olarak düşünülebilecek bir to-do listesi uygulaması için temel işlevleri sağlar.

  • İşlev: Bu smart contract, temel to-do listesi uygulaması için gereken işlevleri sağlar. Örneğin, “create” fonksiyonu ile Todo structları oluşturulabilir, “get” fonksiyonu ile Todo structlarının içeriği okunabilir ve “updateText” ve “toggleCompleted” fonksiyonları ile Todo structlarının içeriği güncellenebilir. Bu fonksiyonların hepsi kullanıcının ihtiyacı olan işlevleri sağlar.
  • Verimlilik: Bu smart contract, structların dizi olarak saklanmasını kullanır ve bu sayede veri yapılarını daha kolay yönetmenizi sağlar. Ayrıca, “get” fonksiyonu ile Todo structlarının içeriği okunurken dizi indeksi kullanılır ve bu sayede dizi içinde arama yapmanıza gerek kalmaz. Ancak, “updateText” ve “toggleCompleted” fonksiyonları structların içeriğini değiştirirken, structların tamamını tek tek gezmeniz gerekebilir ve bu sayede performans açısından dikkat edilmesi gereken bir nokta olabilir.
  • Güvenlik: Bu smart contract, temel güvenlik önlemlerini almış görünüyor. Örneğin, fonksiyonlar içinde structların dizi indeksi kullanılarak erişilir ve bu sayede dizi içinde gezmenize gerek kalmaz. Ayrıca, “create” fonksiyonu structların oluşturulması için kullanılırken “text” değişkeni “calldata” ile geçirilir ve bu sayede, saldırganların saldırganlık yapmasını engellemek için Solidity’nin sağladığı güvenlik önlemlerinden yararlanılmıştır. Ancak, dizi içinde gezinirken performans düşüklüğü olabileceği ve dizi içinde arama yapmaya gerek kalmamasına rağmen, “updateText” ve “toggleCompleted” fonksiyonları içinde structları tek tek gezmeniz gerekebilir ve bu sayede performans açısından dikkat edilmesi gereken bir nokta olabilir.

Sonuç Bağlamı : Solidity Dilinde Structs

Sonuç olarak, Solidity dilinde “structs” veri yapıları kullanmak, smart contractlar için veri yapılarının daha kolay yönetilmesini ve kullanılmasını sağlar. Bu örnekte gördüğümüz “Todos” adlı smart contract, temel to-do listesi uygulaması için gereken işlevleri sağlar ve structların dizi olarak saklanmasını kullanarak veri yapılarını daha kolay yönetmenizi sağlar. Ayrıca, “get” fonksiyonu ile Todo structlarının içeriği okunurken dizi indeksi kullanılır ve bu sayede dizi içinde arama yapmanıza gerek kalmaz. Ancak, “updateText” ve “toggleCompleted” fonksiyonları structların içeriğini değiştirirken, structların tamamını tek tek gezmeniz gerekebilir ve bu sayede performans açısından dikkat edilmesi gereken bir nokta olabilir. Bu smart contract, temel güvenlik önlemlerini almış görünüyor ve güvenli bir şekilde veri yapılarını yönetmenizi sağlar. Özellikle, smart contractlar arasındaki veri aktarımının güvenliği ve performansının arttırılması için structs veri yapılarının kullanımı önemlidir.

Solidity Programlama Dili Öğrenme yolculuğunuz hakkında daha iyi rehberlik almak için Solidity nedir? Ethereum Akıllı Sözleşmelerinin Dili Rehberi içeriğimize göz atın. Dilerseniz Yeni Başlayanlar için Solidity – Akıllı Sözleşme Geliştirme Hızlandırılmış Kursuna katılın.

Çalışmaya nereden başlayacağım diyenler için Blockchain ​​Developer Olmak İçin Yol Haritası içeriğine de muhakkak bakın.

Gelin aklınızdaki soruları SUPERPEER sohbetinde cevaplayalım.

Bu makaleyi okuduğunuz için teşekkürler! Bana destek olmak isterseniz;

Beni TwitterLinkedin ve YouTube‘da takip edin.

Kısa bir yorum bırakmayı UNUTMAYIN!

solidity101 - Solidity, 2015 yılında Christian Reitwiessner liderliğinde piyasaya sürülen, büyük harf kullanımına göre ikinci en büyük kripto para piyasası olan Ethereum tarafından oluşturulan yepyeni bir programlama dilidir.

Yazarın Profili
İlginizi Çekebilir

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir