🧵 #100GündeSolidity 003 : İlkel Veri Türleri
İlkel Veri Türleri
0

İlkel Veri Türleri: boolean, uint, int, address

Solidity dilinde kullanılan temel veri türlerini anlama rehberi: boolean, uint, int, address ve kullanımları

Merhaba!

Bu bültende, #100DaysOfSolidity serisinin 3. içeriği olarak, Solidity dilinde İlkel veri türlerine değineceğiz.

Solidity, Ethereum ağında yazılmış akıllı sözleşmeler için kullanılan bir dilidir. Bu dil, birçok farklı veri türünü destekler ve bu veri türlerini kullanarak akıllı sözleşmelerin yapısını oluşturur. İlkel veri türleri, Solidity dilinin temel veri türleridir ve bu makalede, boolean, uint, int ve address gibi ilkel veri türlerine değineceğiz. Bu veri türleri, akıllı sözleşmelerde sıklıkla kullanılan ve önemli bir rol oynayan veri türleridir ve bu makalede bu veri türlerinin özelliklerini ve kullanım şekillerini anlatacağız. Bu makale, Solidity diline yeni başlayanlar için önemli bir kaynak olacak ve bu dilin temel veri türlerini anlamaya yardımcı olacaktır.

İlkel veri türlerine değinebilmek için Bu Solidity kodu, “Primitives” adında bir sözleşme içerir. Bu sözleşmede, çeşitli veri tiplerini kullanarak birkaç değişken tanımlanmıştır. Örneğin, “boo” adında bir bool değişkeni tanımlanmıştır ve bu değişkenin değeri varsayılan olarak true olarak belirtilmiştir. Bunun yanı sıra, “u8”, “u256” ve “u” adında uint türünde değişkenler tanımlanmıştır. “u” değişkeni, uint256 türüne eşdeğerdir. “i8”, “i256” ve “i” adında int türünde değişkenler de tanımlanmıştır. “i” değişkeni, int256 türüne eşdeğerdir. Ayrıca, int türünün minimum ve maksimum değerleri olan “minInt” ve “maxInt” değişkenleri tanımlanmıştır. “addr” adında bir address türünde değişken de tanımlanmıştır ve bu değişkenin değeri bir Ethereum adresidir. “a” ve “b” adında bytes1 türünde değişkenler de tanımlanmıştır ve bu değişkenlerin değerleri bit dizileridir. Bu kodda ayrıca, atanmamış değişkenlerin varsayılan değerlerini tanımlayan “defaultBoo”, “defaultUint”, “defaultInt” ve “defaultAddr” adında değişkenler de tanımlanmıştır.

“İlkel Veri Türleri” alanına değinebilmek için seçtiğimiz kod yapısı aşağıdaki gibidir. Gelin kod satırlarına bakalım;

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

contract Primitives {
    bool public boo = true;

    /*
    uint stands for unsigned integer, meaning non negative integers
    different sizes are available
        uint8   ranges from 0 to 2 ** 8 - 1
        uint16  ranges from 0 to 2 ** 16 - 1
        ...
        uint256 ranges from 0 to 2 ** 256 - 1
    */
    uint8 public u8 = 1;
    uint public u256 = 456;
    uint public u = 123; // uint is an alias for uint256

    /*
    Negative numbers are allowed for int types.
    Like uint, different ranges are available from int8 to int256
    
    int256 ranges from -2 ** 255 to 2 ** 255 - 1
    int128 ranges from -2 ** 127 to 2 ** 127 - 1
    */
    int8 public i8 = -1;
    int public i256 = 456;
    int public i = -123; // int is same as int256

    // minimum and maximum of int
    int public minInt = type(int).min;
    int public maxInt = type(int).max;

    address public addr = 0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c;

    /*
    In Solidity, the data type byte represent a sequence of bytes. 
    Solidity presents two type of bytes types :

     - fixed-sized byte arrays
     - dynamically-sized byte arrays.
     
     The term bytes in Solidity represents a dynamic array of bytes. 
     It’s a shorthand for byte[] .
    */
    bytes1 a = 0xb5; //  [10110101]
    bytes1 b = 0x56; //  [01010110]

    // Default values
    // Unassigned variables have a default value
    bool public defaultBoo; // false
    uint public defaultUint; // 0
    int public defaultInt; // 0
    address public defaultAddr; // 0x0000000000000000000000000000000000000000
}

Bu Solidity kodu, “Primitives” adında bir sözleşme içerir. Bu sözleşmede, çeşitli veri tiplerini kullanarak birkaç değişken tanımlanmıştır. Örneğin, “boo” adında bir bool değişkeni tanımlanmıştır ve bu değişkenin değeri varsayılan olarak true olarak belirtilmiştir. Bunun yanı sıra, “u8”, “u256” ve “u” adında uint türünde değişkenler tanımlanmıştır. “u” değişkeni, uint256 türüne eşdeğerdir. “i8”, “i256” ve “i” adında int türünde değişkenler de tanımlanmıştır. “i” değişkeni, int256 türüne eşdeğerdir. Ayrıca, int türünün minimum ve maksimum değerleri olan “minInt” ve “maxInt” değişkenleri tanımlanmıştır. “addr” adında bir address türünde değişken de tanımlanmıştır ve bu değişkenin değeri bir Ethereum adresidir. “a” ve “b” adında bytes1 türünde değişkenler de tanımlanmıştır ve bu değişkenlerin değerleri bit dizileridir. Bu kodda ayrıca, atanmamış değişkenlerin varsayılan değerlerini tanımlayan “defaultBoo“, “defaultUint“, “defaultInt” ve “defaultAddr” adında değişkenler de tanımlanmıştır.

Akıllı Sözleşme Satır Satır Analizi

  1. Satır: “// SPDX-License-Identifier: MIT” bu satırın amacı, sözleşmenin MIT lisansı altında yayınlandığını belirtmektir.
  2. Satır: “pragma solidity ^0.8.17;” bu satır, Solidity sözdizimini kullandığımızı ve kullanılan Solidity sürümünün 0.8.17 veya daha yüksek bir sürüm olduğunu belirtir.
  3. Satır: “contract Primitives {” bu satır, “Primitives” adında bir akıllı sözleşme oluşturduğumuzu belirtir.
  4. Satır: “bool public boo = true;” bu satır, “boo” adında bir bool türünde değişken tanımlar ve bu değişkenin değerini varsayılan olarak true olarak ayarlar.
  5. Satır: “uint8 public u8 = 1;” bu satır, “u8” adında bir uint8 türünde değişken tanımlar ve bu değişkenin değerini varsayılan olarak 1 olarak ayarlar.
  6. Satır: “uint public u256 = 456;” bu satır, “u256” adında bir uint türünde değişken tanımlar ve bu değişkenin değerini varsayılan olarak 456 olarak ayarlar.
  7. Satır: “uint public u = 123;” bu satır, “u” adında bir uint türünde değişken tanımlar ve bu değişkenin değerini varsayılan olarak 123 olarak ayarlar. Bu değişken, uint256 türüne eşdeğerdir.
  8. Satır: “int8 public i8 = -1;” bu satır, “i8” adında bir int8 türünde değişken tanımlar ve bu değişkenin değerini varsayılan olarak -1 olarak ayarlar.
  9. Satır: “int public i256 = 456;” bu satır, “i256” adında bir int türünde değişken tanımlar ve bu değişkenin değerini varsayılan olarak 456 olarak ayarlar.
  10. Satır: “int public i = -123;” bu satır, “i” adında bir int türünde değişken tanımlar ve bu değişkenin değerini varsayılan olarak -123 olarak ayarlar. Bu değişken, int256 türüne eşdeğerdir.
  11. Satır: “int public minInt = type(int).min;” bu satır, “minInt” adında bir int türünde değişken tanımlar ve bu değişkenin değerini int türünün minimum değeri olarak ayarlar.
  12. Satır: “int public maxInt = type(int).max;” bu satır, “maxInt” adında bir int türünde değişken tanımlar ve bu değişkenin değerini int türünün maksimum değeri olarak ayarlar.
  13. Satır: “address public addr = 0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c;” bu satır, “addr” adında bir address türünde değişken tanımlar ve bu değişkenin değerini bir Ethereum adresi olarak ayarlar.
  14. Satır: “bytes1 a = 0xb5;” bu satır, “a” adında bir bytes1 türünde değişken tanımlar ve bu değişkenin değerini bit dizisi olarak ayarlar.
  15. Satır: “bytes1 b = 0x56;” bu satır, “b” adında bir bytes1 türünde değişken tanımlar ve bu değişkenin değerini bit dizisi olarak ayarlar.
  16. Satır: “bool public defaultBoo;” bu satır, “defaultBoo” adında bir bool türünde değişken tanımlar ve bu değişkenin değerini varsayılan olarak false olarak ayarlar.
  17. Satır: “uint public defaultUint;” bu satır, “defaultUint” adında bir uint türünde değişken tanımlar ve bu değişkenin değerini varsayılan olarak 0 olarak ayarlar.
  18. Satır: “int public defaultInt;” bu satır, “defaultInt” adında bir int türünde değişken tanımlar ve bu değişkenin değerini varsayılan olarak 0 olarak ayarlar.
  19. Satır: “address public defaultAddr;” bu satır, “defaultAddr” adında bir address türünde değişken tanımlar ve bu değişkenin değerini varsayılan olarak 0x0000000000000000000000000000000000000000 olarak ayarlar.
  20. Satır: “}” bu satır, sözleşmenin tanımını tamamlar.

Akıllı Sözleşme Güvenliği

Bu sözleşme, tanımladığı değişkenleri depolamak için yapılmış basit bir sözleşmedir ve güvenlik açıkları açısından taranması gereken bir kod değildir. Ancak, genel olarak, bir akıllı sözleşmenin güvenliği açısından taranması için aşağıdaki adımlar tavsiye edilir:

  1. Önemli fonksiyonların yetkilerinin doğru bir şekilde yönetildiğinden emin olun. Örneğin, yalnızca sözleşmenin sahibi tarafından çağrılabilecek fonksiyonların yetkilerinin doğru bir şekilde yönetildiğinden emin olun.
  2. Önemli değişkenlerin değerlerinin doğru bir şekilde kontrol edildiğinden emin olun. Örneğin, bir değişkenin değerinin bir belirtilen aralıkta olması gerektiğinde, bu aralıkta olup olmadığını kontrol edin.
  3. Gereksiz kod parçacıklarının sözleşmeden kaldırılmasına dikkat edin. Özellikle, sözleşmeyi etkilemeyen veya kullanılmayan kod parçacıkları gereksiz yere sözleşmenin boyutunu büyütebilir ve bu da sözleşmenin çalışmasını yavaşlatabilir.
  4. Sözleşmeyi test edin. Örneğin, önemli fonksiyonları çağırarak sözleşmenin doğru bir şekilde çalıştığından emin olun.
  5. Güvenlik açıkları açısından tarama yapın. Özellikle, sözleşmenin güvenlik açıkları açısından tarama yapılması için güvenlik tarama araçları kullanın.

Benzer İşlev ile Akıllı Sözleşme

pragma solidity ^0.8.17;

contract Variables {
    bool public booleanVariable = true;
    uint8 public uint8Variable = 1;
    uint public uint256Variable = 456;
    uint public uintVariable = 123;
    int8 public int8Variable = -1;
    int public int256Variable = 456;
    int public intVariable = -123;
    int public minimumInt = type(int).min;
    int public maximumInt = type(int).max;
    address public addressVariable = 0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c;
    bytes1 public bytes1VariableA = 0xb5;
    bytes1 public bytes1VariableB = 0x56;
    bool public defaultBooleanVariable;
    uint public defaultUintVariable;
    int public defaultIntVariable;
    address public defaultAddressVariable;
}

Bu sözleşme, aynı veri tiplerini ve değerlerini kullanarak Primitives sözleşmesinde tanımlanan değişkenleri depolayan bir sözleşmedir. Ancak, değişkenlerin isimleri farklıdır ve sözleşmenin adı “Variables” olarak değiştirilmiştir. Bu sözleşme de güvenlik açığı olmayan basit bir sözleşmedir ve yalnızca tanımladığı değişkenleri depolamak için kullanılır.

Akıllı Sözleşme Verimliliği

Verimlilik açısından her iki sözleşmenin de performansı aynıdır çünkü ikisi de aynı veri tiplerini ve değerlerini kullanarak basit bir şekilde değişkenleri depolamak için yapılmış sözleşmelerdir. Ancak, yine de iki sözleşmenin arasında küçük bir performans farkı olabilir. Örneğin, Primitives sözleşmesinde tanımlanan değişkenlerin isimleri daha uzun olduğundan, bu sözleşmeyi çağıran bir fonksiyon tarafından kullanılması biraz daha yavaş olabilir. Bununla birlikte, bu fark çok azdır ve önemli bir etki yaratmaz.

Özet olarak, her iki sözleşme de aynı veri tiplerini ve değerlerini kullanarak basit bir şekilde değişkenleri depolamak için yapılmış sözleşmelerdir ve performans açısından aralarında önemli bir fark yoktur. Bu sözleşmelerin amacı yalnızca tanımladıkları değişkenleri depolamaktır ve herhangi bir fonksiyon içermezler. Bu nedenle, sözleşmelerin performansı açısından bir karşılaştırma yapılması anlamsızdır.

Sonuç Bağlamı

Sonuç olarak, Solidity dilinde ilkel veri türleri önemli bir rol oynar ve bu makalede, boolean, uint, int ve address gibi ilkel veri türlerine değindik. Bu veri türleri, akıllı sözleşmelerde sıklıkla kullanılır ve önemli bir rol oynar. Bu makale, Solidity diline yeni başlayanlar için önemli bir kaynak olmuş ve bu dilin temel veri türlerini anlamaya yardımcı olmuştur. Bu makalede, bu veri türlerinin özelliklerini ve kullanım şekillerini anlatmış ve Solidity dilini anlamaya yardımcı olmuştur. Bu dilin diğer veri türlerini de anlamaya yönelik olarak, diğer makaleleri okumaya devam etmelisiniz.

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

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