1. Anasayfa
  2. 100 Günde Solidity

🧵 #100GündeSolidity 011 : For & While

🧵 #100GündeSolidity 011 : For & While
For & While
0

For & While Döngülerini Anlamak ve Optimize Etme

#100DaysOfSolidity serisinin 11. gününde “For & While Loop” üzerine konuşacağız. Haydi bugün hangi konulara değineceğimizi listeleyelim.

  1. For döngülerinin nasıl kullanılacağı
  2. While döngülerinin nasıl kullanılacağı
  3. For ve While döngülerinin farklı kullanımları
  4. For ve While döngülerinin Solidity’de olası sınırlamaları
  5. Örnek kodlar ile For ve While döngülerinin nasıl kullanılacağının gösterimi

Döngüler, programlama dillerinde sıklıkla kullanılan ve özellikle verileri dolaşmak, işlem yapmak veya belirli bir koşula göre işlem yapmak için kullanılan yapılardır. Solidity, programlama dillerinde sıklıkla kullanılan for, while ve do-while döngülerini destekler. Ancak, Solidity’de döngülerin sınırsız olması, gaz limitini aşmasına neden olabilir ve işlemlerinizin başarısız olmasına sebep olabilir. Bu nedenle, while ve do-while döngüleri nadiren kullanılır. Bu yazıda, Solidity‘de for ve while döngülerinin nasıl kullanılacağını ve Solidity’de döngülerle ilgili olası sınırlamaları anlamaya çalışacağız.

Solidity Dİlinde for döngüsü nasıl kullanılır?

Solidity dilinde for döngüsü, bir dizi içinde verileri dolaşmak, işlem yapmak veya belirli bir koşula göre işlem yapmak için kullanılır. For döngüsü, başlangıç değeri, bitiş değeri ve adım değeri gibi parametreleri alır. Örneğin, aşağıdaki kod bloğu 0’dan 10’a kadar olan tüm sayıları yazdırır:

for(uint i = 0; i <= 10; i++) {
    // Code to execute
    // i is the loop variable
    // it will take values from 0 to 10
}

for döngüsü, bir sayaç değişkeni olan i’yi tanımlar ve bu değişkeni 0’dan başlatır. Döngü, i değişkeninin bitiş değeri olan 10’a ulaşana kadar devam eder. Her seferinde döngü içinde, i değişkeninin değeri 1 arttırılır. Döngü içinde, i değişkeninin değerine göre işlem yapabilirsiniz. Bu örnekte, i değişkeninin değerine göre ekrana yazdırma işlemi yapılmıştır.

Solidity Dilinde while döngüsü nasıl kullanılır?

Solidity dilinde while döngüsü, belirli bir koşula göre işlem yapmak için kullanılır. While döngüsü, bir koşul ifadesi alır ve koşul true olduğu sürece döngü içindeki kod bloğu çalıştırılır. Örneğin, aşağıdaki kod bloğu 0’dan 10’a kadar olan tüm sayıları yazdırır:

uint i = 0;
while (i <= 10) {
    // Code to execute
    // i is the loop variable
    // it will take values from 0 to 10
    i++;
}

while döngüsü, bir sayaç değişkeni olan i’yi tanımlar ve bu değişkeni 0’dan başlatır. Döngü, i değişkeninin bitiş değeri olan 10’a ulaşana kadar devam eder. Her seferinde döngü içinde, i değişkeninin değeri 1 arttırılır. Döngü içinde, i değişkeninin değerine göre işlem yapabilirsiniz. Bu örnekte, i değişkeninin değerine göre ekrana yazdırma işlemi yapılmıştır.

Ancak unutmayın ki while döngüleri gaz limitleri açısından dikkatli kullanılması gereken yapılardır. Çünkü döngü sonsuz döngüye girerse, işlemlerinizin gaz limitleri aşmasına sebep olabilir ve işlemleriniz başarısız olabilir.

Solidity Dilinde for ve while döngülerinin farklı kullanımları ?

For ve while döngüleri, Solidity dilinde verileri dolaşmak, işlem yapmak veya belirli bir koşula göre işlem yapmak için kullanılırlar. Ancak, her ikisi de farklı kullanımları vardır.

For döngüsü, bir dizi içinde verileri dolaşmak, belli aralıklarla işlem yapmak veya belirli bir koşula göre işlem yapmak için kullanılır. Örneğin, bir dizi içinde tüm elemanların toplamını hesaplamak, bir dizi içinde tüm elemanların karesini almak gibi işlemler için for döngüsü kullanılabilir.

While döngüsü ise, belirli bir koşula göre işlem yapmak için kullanılır. Örneğin, kullanıcının girdiği bir sayının faktöriyelini hesaplamak, bir dizi içinde arama yapmak gibi işlemler için while döngüsü kullanılabilir.

Ayrıca dikkat etmeniz gereken bir diğer önemli nokta For döngüsünün içinde belirli bir aralık için döngü yapılırken, while döngüsünde ise belirli bir koşula göre döngü yapılır. Bu nedenle for döngüsünde döngü süresi önceden belirlenirken, while döngüsünde döngü süresi koşulunun gerçekleşmesi ile belirlenir.

For ve While döngülerinin Solidity’de olası sınırlamaları

For ve while döngüleri, Solidity dilinde verileri dolaşmak, işlem yapmak veya belirli bir koşula göre işlem yapmak için kullanılırlar ancak her ikisi de Solidity dilinde bazı sınırlamalara sahiptir.

  1. Gas Limit: Solidity dilinde döngüler, belirli bir gas limiti vardır. Bu nedenle, döngülerin sınırsız olması, gaz limitini aşmasına neden olabilir ve işlemlerinizin başarısız olmasına sebep olabilir.
  2. Stack depth: Solidity dilinde, döngüler için belirli bir stack depth (yığın derinliği) sınırı vardır. Bu nedenle, çok fazla döngü yapmak stack depth sınırını aşmasına neden olabilir ve işlemlerinizin başarısız olmasına sebep olabilir.
  3. Suicidal contracts: Solidity dilinde, döngülerin sınırsız olması, kontratınızın kendini yok etmesine neden olabilir. Bu nedenle, döngüleri belirli bir sınır içinde kullanmalısınız.
  4. Rerunability: Döngülerin sınırsız olması kontratınızın yeniden çalıştırılamaz hale gelmesine neden olabilir. Bu nedenle döngülerin sınırlandırılması gerekir.

Bu nedenlerle, Solidity dilinde döngülerin sınırsız olmasından kaçınmak için dikkatli bir şekilde kullanmalısınız. Döngüleri belirli bir sınır içinde kullanmalı ve gaz limitleri, stack depth sınırları ve kontratınızın rerunability gibi faktörleri dikkate almalısınız.

Örnek kodlar ile For ve While döngülerinin nasıl kullanılacağının gösterimi

For Döngüsü Örnek Kodu:

function sumOfNumbers(uint upperLimit) public pure returns (uint) {
    uint sum = 0;
    for(uint i = 0; i <= upperLimit; i++) {
        sum += i;
    }
    return sum;
}

Bu örnekte, bir fonksiyon olarak sumOfNumbers tanımlanmıştır. Bu fonksiyon bir parametre olarak upperLimit alır ve bu sayıya kadar olan tüm sayıların toplamını döndürür. For döngüsü, 0’dan upperLimit‘e kadar olan tüm sayıları dolaşır ve her seferinde i değişkeninin değerine göre toplamı arttırır.

While Döngüsü Örnek Kodu:

function factorial(uint number) public pure returns (uint) {
    uint factorial = 1;
    uint i = 1;
    while (i <= number) {
        factorial *= i;
        i++;
    }
    return factorial;
}

Bu örnekte, bir fonksiyon olarak factorial tanımlanmıştır. Bu fonksiyon bir parametre olarak number alır ve bu sayının faktöriyelini döndürür. While döngüsü, 1’den number‘a kadar olan tüm sayıları dolaşır ve her seferinde i değişkeninin değerine göre faktöriyeli arttırır.

Bu örneklerde gördüğünüz gibi, for ve while döngüleri, verileri dolaşmak, işlem yapmak veya belirli bir koşula göre işlem yapmak için kullanılır. Ancak, Solidity dilinde döngülerin sınırsız olmasından kaçınmak için dikkatli bir şekilde kullanmalısınız.

Örnek Akıllı Sözleşme Analizi

Aşağıdaki Solidity kodunu güvenlik, işlev, verimlilik açılarından inceleyelim.

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

contract Loop {
    function loop() public {
        // for loop
        for (uint i = 0; i < 10; i++) {
            if (i == 3) {
                // Skip to next iteration with continue
                continue;
            }
            if (i == 5) {
                // Exit loop with break
                break;
            }
        }

        // while loop
        uint j;
        while (j < 10) {
            j++;
        }
    }
}

Bu Solidity kontratı, iki farklı döngü türünün nasıl kullanılacağını göstermektedir. Aşağıda güvenlik, işlev ve verimlilik açılarından incelemesi yapılmıştır:

Güvenlik:

  • Kontrat, bir güvenlik açısından herhangi bir problem içermemektedir.

İşlev:

  • Kontrat, loop() adlı bir fonksiyon içermektedir.
  • Bu fonksiyon içinde, bir for döngüsü ve bir while döngüsü yer almaktadır.
  • For döngüsü, 0’dan 9’a kadar olan sayıları dolaşır ve i değişkeni her seferinde 1 arttırılır.
  • For döngüsü içinde, i değişkeni 3 olduğunda “continue” komutu ile döngünün sonraki adımına geçilir ve i değişkeni 5 olduğunda “break” komutu ile döngüden çıkılır.
  • While döngüsü, j değişkenini 10’a kadar arttırır. Ancak, j değişkeni önceki bir değer almadan döngüye başlar ve sonunda ne kadar arttığı belirsizdir.

Verimlilik:

  • For döngüsü ve while döngüsü, verimlilik açısından herhangi bir problem içermemektedir. Ancak, for döngüsünde break ve continue komutlarının kullanılması döngünün çalışmasını optimize etmek için kullanılabilecek bir yöntemdir.
  • While döngüsünde ise, j değişkeninin önceki bir değer almadan döngüye başlaması verimliliği etkileyebilir.

Genel olarak, kod işlevseldir ve herhangi bir güvenlik riski oluşturmaz. Ancak kodun performansı ve okunabilirliği için, döngüye girmeden önce değişkenleri başlatmak veya durumu kontrol etmek daha iyidir.

Örnek Akıllı Sözleşmeyi Satır Satır İnceleyelim

  1. Satır: “pragma solidity ^0.8.17;” – Bu satır, kullanılacak Solidity sürümünü belirtir. Bu sözleşme 0.8.17 veya daha yüksek sürümlerle çalışacaktır.
  2. Satır: “contract Loop {” – Bu satır, kontratın adını belirtir. Kontrat adı “Loop” ‘dur.
  3. Satır: “function loop() public {” – Bu satır, kontratın içinde “loop” adlı bir fonksiyon tanımlar. Bu fonksiyon herhangi bir parametre almaz ve herhangi bir değer döndürmez. Bu fonksiyon “public” olarak tanımlanmıştır, bu nedenle diğer kontratlar veya dış sistemler tarafından erişilebilir.
  4. Satır: “for (uint i = 0; i < 10; i++) {” – Bu satır, for döngüsünün başlangıcıdır. Döngü, i değişkenini 0’dan başlatır ve i değişkeni 10’a ulaşana kadar devam eder. Her seferinde, i değişkeni 1 arttırılır.
  5. Satır: “if (i == 3) {” – Bu satır, i değişkeninin 3 olduğunu kontrol eder.
  6. Satır: “continue;” – Bu satır, if koşulu true olduğunda döngünün sonraki adımına geçilir.
  7. Satır: “if (i == 5) {” – Bu satır, i değişkeninin 5 olduğunu kontrol eder.
  8. Satır: “break;” – Bu satır, if koşulu true olduğunda döngüden çıkılır.
  9. Satır: “uint j;” – Bu satır, while döngüsü için j değişkenini tanımlar.
  10. Satır: “while (j < 10) {” – Bu satır, while döngüsünün başlangıcıdır. Döngü, j değişkeni 10’a ulaşana kadar devam eder.
  11. Satır: “j++;” – Bu satır, her seferinde j değişkeninin değeri 1 arttırılır.
  12. Satır: “}”}” – Bu satır, for döngüsü ve while döngüsünün sonudur.

Bu sözleşme, for ve while döngülerinin nasıl kullanılacağını gösterir. For döngüsünde, i değişkeninin 3 ve 5 olduğunda döngünün sonraki adımına geçilir ve döngüden çıkılır. While döngüsünde j değişkeni 10’a kadar arttırılır. Ancak, j değişkeni önceki bir değer almadan döngüye başlar ve ne kadar arttığı belirsizdir.

Sonuç Bağlamı

Sonuç olarak, Solidity dilinde for ve while döngüleri, verileri dolaşmak, işlem yapmak veya belirli bir koşula göre işlem yapmak için kullanılır. Ancak, döngülerin sınırsız olmasından kaçınmak için dikkatli bir şekilde kullanmalısız. Özellikle, gaz limitleri, stack depth sınırları ve kontratın rerunability gibi faktörleri dikkate almalısınız. Ayrıca, for döngüsünde break ve continue komutlarının kullanılması döngünün çalışmasını optimize etmek için kullanılabilecek bir yöntemdir. Örnek kod incelemesinde, for ve while döngülerinin nasıl kullanılacağını göstermiştir. Ancak bu kod verimlilik açısından iyileştirilebilir, örneğin j değişkeni önceki bir değer almadan döngüye başlaması verimliliği etkileyebilir. Bu nedenle, yazılan kodun iyileştirilebilirliğini ve okunaklılığını düşünerek kullanılmalıdır. Sonuç olarak, for ve while döngüleri Solidity dilinde kullanımı için önemli araçlar olsa da, güvenlik ve verimlilik açısından dikkatli bir şekilde kullanmak önemlidir. Bu konuda daha fazla örnek ve ayrıntılı bilgiye ihtiyacınız varsa, Solidity belgelerini veya başka kaynakları incelemenizi öneririz.

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