1. Anasayfa
  2. 100 Günde Solidity

🧵 #100GündeSolidity 010 : if/else

🧵 #100GündeSolidity 010 : if/else
if/else
0

if/else: Akıllı Sözleşmelerin Güvenliğini Artıran Yapılar

#100GündeSolidity serisinin 10. gününde “If / Else” üzerine konuşacağız. Haydi bugün hangi konulara değineceğimizi listeleyelim.

  1. If/else yapısı nasıl kullanılır?
  2. If/else kullanarak kontrol edilen koşullar nasıl gerçekleşir?
  3. else-if yapısı nasıl kullanılır?
  4. If/else kullanarak fonksiyonların daha etkili hale getirilmesi
  5. If/else kullanarak smart contractların güvenliğini artırmak.

Akıllı Sözleşmeler, blockchain teknolojisi sayesinde tamamen otomatikleşen ve herhangi bir aracıya ihtiyaç duymadan yürütülen sözleşmelerdir. Ancak, bu otomatikleşme işlemi sırasında bazı durumlarda beklenmedik sonuçlar ortaya çıkabilir. Bu nedenle, smart contractların yazımı sırasında dikkatli olunması ve güvenliği artırmak için gerekli önlemler alınması gerekir. Bu yazıda, smart contractların güvenliğini artırmak için kullanabileceğiniz if/else yapısına odaklanacağız. Bu yapı sayesinde smart contractlarınızda koşulları kontrol edebilir ve beklenmedik durumlar için gerekli önlemleri alabilirsiniz.

Solidity ile If/Else yapısının nasıl kullanılır?

Solidity dilinde if/else yapısı, C diline benzer şekilde kullanılır. Örnek olarak, bir koşul kontrolü yapmak istediğinizde aşağıdaki gibi bir kod yazabilirsiniz:

if (koşul) {
    // koşul gerçekleşirse burada yer alan kod bloğu çalıştırılır
} else {
    // koşul gerçekleşmezse burada yer alan kod bloğu çalıştırılır
}

Burada, koşul değişkeni bir değer döndüren bir ifade olmalıdır. Eğer koşul true döndürürse, if bloğu çalıştırılır, aksi halde else bloğu çalıştırılır.

Ayrıca, else-if yapısını da kullanabilirsiniz. Örnek olarak:

if (koşul1) {
    // koşul1 gerçekleşirse burada yer alan kod bloğu çalıştırılır
} else if (koşul2) {
    // koşul1 gerçekleşmezse ve koşul2 gerçekleşirse burada yer alan kod bloğu çalıştırılır
} else {
    // koşul1 ve koşul2 gerçekleşmezse burada yer alan kod bloğu çalıştırılır
}

Bu şekilde, birden fazla koşul kontrol edebilir ve gerektiğinde farklı yollarla hareket edebilirsiniz.

Solidity Dilinde If/Else kullanarak kontrol edilen koşullar nasıl gerçekleşir?

Solidity dilinde if/else yapısı kullanarak kontrol edilen koşullar, öncelikle bir değişkenin değerini kontrol ederek gerçekleşir. Örneğin, bir değişkenin değerinin belirli bir aralıkta olup olmadığını kontrol etmek isteyebilirsiniz:

uint age;
if (age >= 18 && age <= 65) {
    // age değişkeni 18 ile 65 arasında olduğu için bu bloğun içeriği çalıştırılır
} else {
    // age değişkeni 18 ile 65 arasında değil olduğu için bu bloğun içeriği çalıştırılır
}

Ayrıca, smart contractlarınızda fonksiyonların geri dönüş değerlerini de kontrol edebilirsiniz. Örneğin, bir fonksiyonun geri dönüş değerinin true veya false olup olmadığını kontrol etmek isteyebilirsiniz:

function checkAge(uint _age) public view returns (bool) {
    if (_age >= 18 && _age <= 65) {
        return true;
    } else {
        return false;
    }
}

if (checkAge(25)) {
    // checkAge fonksiyonu geri dönüş değeri true olduğu için bu bloğun içeriği çalıştırılır
} else {
    // checkAge fonksiyonu geri dönüş değeri false olduğu için bu bloğun içeriği çalıştırılır
}

Bu şekilde, if/else yapısını kullanarak smart contractlarınızda gerçekleşen koşulları kontrol edebilir ve gerektiğinde farklı yollarla hareket edebilirsiniz.

Solidity Dilinde else-if yapısı nasıl kullanılır?

Solidity dilinde else-if yapısı, if/else yapısının bir uzantısıdır ve birden fazla koşul kontrol etmek için kullanılır. Örnek olarak, bir değişkenin değerine göre farklı bir işlem yapmak isteyebilirsiniz:

uint variable;
if (variable == 1) {
    // variable değeri 1 olduğu için bu bloğun içeriği çalıştırılır
} else if (variable == 2) {
    // variable değeri 1 değilse ve 2 olduğu için bu bloğun içeriği çalıştırılır
} else if (variable == 3) {
    // variable değeri 1 ve 2 değilse ve 3 olduğu için bu bloğun içeriği çalıştırılır
} else {
    // variable değeri 1, 2 ve 3 değilse bu bloğun içeriği çalıştır

Solidity ile If/Else kullanarak fonksiyonları daha etkili hale nasıl getirilir?

Solidity dilinde if/else yapısını kullanarak fonksiyonların daha etkili hale getirmek için birkaç yol vardır. Örneğin:

Koşullu geri dönüş: Bir fonksiyon içerisinde gerçekleşen koşullara göre farklı geri dönüş değerleri döndürebilirsiniz. Örneğin, bir fonksiyon içerisinde gerçekleşen koşullara göre true veya false döndürebilirsiniz.

function checkAge(uint _age) public view returns (bool) {
    if (_age >= 18 && _age <= 65) {
        return true;
    } else {
        return false;
    }
}

Koşullu işlemler: Bir fonksiyon içerisinde gerçekleşen koşullara göre farklı işlemler yapabilirsiniz. Örneğin, bir değişkenin değerinin belirli bir aralıkta olup olmadığını kontrol etmek isteyebilirsiniz ve gerçekleşen koşula göre farklı işlemler yapabilirsiniz.

function transferFunds(address _to, uint _amount) public {
    if (_amount <= balance) {
        _to.transfer(_amount);
    } else {
        // hata mesajı gönderilir
    }
}

Koşullu fonksiyon çağırma: Bir fonksiyon içerisinde gerçekleşen koşullara göre farklı fonksiyonlar çağırabilirsiniz. Örneğin, bir fonksiyon içerisinde gerçekleşen koşulla göre farklı fonksiyonlar çağırabilirsiniz.

function processPayment(address _from, address _to, uint _amount) public {
    if (isApproved[_from]) {
        _to.transfer(_amount);
    } else {
        approve(_from);
    }
}

Bu yollar sayesinde if/else yapısını kullanarak fonksiyonlarınızı daha etkili hale getirebilirsiniz. Bu sayede fonksiyonlarınız daha anlaşılır ve kontrol edilebilir hale gelir.

Solidity ile If/else kullanarak akıllı sözleşmelerin güvenliği nasıl artırılır?

Solidity dilinde if/else yapısını kullanarak smart contractların güvenliğini artırmak için birkaç yol vardır. Örneğin:

Yetkilendirme kontrolü: Bir fonksiyon içerisinde çağrılan kişinin yetkili olup olmadığını kontrol edebilirsiniz. Örneğin, bir fonksiyon içerisinde gerçekleşen koşulla göre yetkilendirme kontrolü yapabilirsiniz.

function transferFunds(address _to, uint _amount) public {
    require(msg.sender == owner);
    _to.transfer(_amount);
}

Kontrol edilebilir limitler: Bir fonksiyon içerisinde gerçekleşen koşulla göre kontrol edilebilir limitler koyabilirsiniz. Örneğin, bir değişkenin değerinin belirli bir aralıkta olup olmadığını kontrol etmek isteyebilirsiniz ve gerçekleşen koşula göre limitler koyabilirsiniz.

function transferFunds(address _to, uint _amount) public {
    require(_amount > 0 && _amount <= balance);
    _to.transfer(_amount);
}

Reentrancy saldırılarını önlemek: Reentrancy saldırılarını önlemek için, fonksiyon içerisinde gerçekleşen koşulla göre mutex kullanabilirsiniz. Örneğin, bir fonksiyon içerisinde gerçekleşen koşulla göre mutex kullanabilirsiniz.

bool locked = false;
function transferFunds(address _to, uint _amount) public {
    require(!locked);
    locked = true;
    _to.transfer(_amount);
    locked = false;
}

Bu yollar sayesinde if/else yapısını kullanarak smart contractlarınızın güvenliğini artırabilirsiniz. Bu sayede smart contractlarınız daha güvenli ve kontrol edilebilir hale gelir.

Örnek Solidity kodunu güvenlik, işlev, verimlilik açılarından inceleyelim

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

contract IfElse {
    function foo(uint x) public pure returns (uint) {
        if (x < 10) {
            return 0;
        } else if (x < 20) {
            return 1;
        } else {
            return 2;
        }
    }

    function ternary(uint _x) public pure returns (uint) {
        // if (_x < 10) {
        //     return 1;
        // }
        // return 2;

        // shorthand way to write if / else statement
        // the "?" operator is called the ternary operator
        return _x < 10 ? 1 : 2;
    }
}
  1. Güvenlik: Bu smart contract, “foo” ve “ternary” isimli iki fonksiyon içermektedir. Her iki fonksiyon da “pure” ve “public” olarak tanımlanmıştır. Bu, fonksiyonların içerisinde herhangi bir state değişikliği yapmadığını ve herhangi bir Ether transferi gerçekleştirmediğini gösterir. Bu nedenle, bu smart contract içerisinde herhangi bir güvenlik açığı bulunmamaktadır.
  2. İşlev: “foo” fonksiyonu, girdi olarak bir “uint” tipinde “x” değişkeni almaktadır. Bu fonksiyon içerisinde, “x” değişkeninin değerine göre 3 farklı koşul kontrol edilmektedir. Eğer “x” değişkeninin değeri 10’dan küçükse, fonksiyon 0 döndürür. Eğer “x” değişkeninin değeri 20’den küçükse ve 10’dan büyükse, fonksiyon 1 döndürür. Diğer durumlarda ise fonksiyon 2 döndürür.

    “ternary” fonksiyonu ise, “x” değişkeninin değerine göre tek bir koşul kontrol etmektedir. Eğer “x” değişkeninin değeri 10’dan küçükse, fonksiyon 1 döndürür. Aksi halde, fonksiyon 2 döndürür. Bu fonksiyon içerisinde, if/else yapısının shorthand(kısa yazım) olarak kullanıldığını görüyoruz. Bu shorthand yazım, “?” operatorü ile yapılmıştır.
  1. Verimlilik: Bu smart contract içerisinde, if/else yapısı kullanılmıştır. Bu sayede, koşullar kontrol edilirken daha az kod yazılmasına ve daha az işlem yapmasına olanak sağlar. Ayrıca, “ternary” fonksiyonu içerisinde shorthand yazım kullanılmıştır, bu da kodun daha okunaklı ve anlaşılır olmasını sağlar.

Örnek Solidity Kodunu Satır Satır Yorumlayalım

  1. pragma solidity ^0.8.17;: Bu satır, bu smart contractın Solidity sürümünü belirtir. Bu nedenle, bu smart contract en az 0.8.17 sürümünde çalışır.
  2. contract IfElse {: Bu satır, smart contractın adını belirtir. Bu nedenle, smart contractın adı “IfElse” dir.
  3. function foo(uint x) public pure returns (uint) {: Bu satır, “foo” isimli fonksiyonun tanımını belirtir. Bu fonksiyon, girdi olarak bir “uint” tipinde “x” değişkeni alır ve geri dönüş olarak da “uint” tipinde bir değer döndürür. Ayrıca fonksiyon “public” ve “pure” olarak tanımlanmıştır.
  4. if (x < 10) {: Bu satır, ilk koşul kontrolünün başlangıcını belirtir. Eğer “x” değişkeninin değeri 10’dan küçükse bu bloğun içeriği çalıştırılır.
  5. return 0;: Eğer “x” değişkeninin değeri 10’dan küçükse, bu satır çalışır ve fonksiyon 0 döndürür.
  6. } else if (x < 20) {: Bu satır, ikinci koşul kontrolünün başlangıcını belirtir. Eğer “x” değişkeninin değeri 20’den küçük ve 10’dan büyükse bu bloğun içeriği çalıştırılır.
  7. return 1;: Eğer “x” değişkeninin değeri 20’den küçük ve 10’dan büyükse, bu satır çalışır ve fonksiyon 1 döndürür.
  8. } else {: Bu satır, diğer koşullar için else bloğunun başlangıcını belirtir. Eğer “x” değişkeninin değeri 20’den büyükse bu bloğun içeriği çalıştırılır.
  9. return 2;: Eğer “x” değişkeninin değeri 20’den büyükse, bu satır çalışır ve fonksiyon 2 döndürür.
  10. }: Bu satır, if/else yapısının sonunu belirtir.
  11. function ternary(uint _x) public pure returns (uint) {: Bu satır, “ternary” isimli fonksiyonun tanımını belirtir. Bu fonksiyon, girdi olarak bir “uint” tipinde “_x” değişkeni alır ve geri dönüş olarak da “uint” tipinde bir değer döndürür. Ayrıca fonksiyon “public” ve “pure” olarak tanımlanmıştır.
  12. return _x < 10 ? 1 : 2;: Bu satır, shorthand yazım ile if/else yapısının kullanıldığını belirtir. Eğer “_x” değişkeninin değeri 10’dan küçükse, fonksiyon 1 döndürür. Aksi halde, fonksiyon 2 döndürür.
  13. }: Bu satır, “ternary” fonksiyonunun sonunu belirtir.
  14. }: Bu satır, “IfElse” smart contractının sonunu belirtir.

Sonuç olarak, Solidity dilinde if/else yapısını kullanarak smart contractların güvenliğini ve işlevselliğini artırmak mümkündür. Örnekte gösterildiği gibi, koşulları kontrol ederek yetkilendirme, kontrol edilebilir limitler ve reentrancy saldırılarını önlemek gibi güvenlik önlemleri almak mümkündür. Ayrıca, shorthand yazım kullanarak kodun okunaklılığını ve anlaşılırlığını artırmak da mümkündür. Bu nedenle, if/else yapısının smart contractlar için oldukça yararlı olduğu söylenebilir.

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