CodeBlanks Logo Icon CodeBlanks

Meydan okuma 1: Object pool

Basit bir object pool sınıfı yazarsın.

Object pool mantığı

Object pool, nesneleri yok etmek yerine bir havuzda tutup yeniden kullanma yöntemidir. Havuz genellikle Queue yapısıyla kurulur; nesne gerektiğinde Dequeue ile sıradan alınır, iş bitince Enqueue ile geri konur. Böylece her seferinde yeni tahsis yapmak gerekmez.

Queue<string> havuz = new Queue<string>();
havuz.Enqueue("Kutu");
string nesne = havuz.Dequeue();

Bu yöntem, sık oluşturulan nesnelerde bellek yükünü azaltır.

Uygulama Basit havuz sınıfı

NesneHavuzu sınıfında havuz adında bir kuyruk alanı tanımla. Al adında bir metod yaz; bu metod havuzdan bir nesneyi alıp döndürsün. Start içinde havuza "Kutu1" ekle, Al ile bir nesne alıp alinan değişkenine ata ve Debug.Log ile "Alinan: " metnini alinan ile birleştirerek yazdır.

Başlangıç kodu

Player.cs
using UnityEngine;
using System.Collections.Generic;

public class NesneHavuzu : MonoBehaviour
{
    // havuz adli kuyruk alanini tanimla

    // Al adinda bir metod yaz: havuzdan bir nesne alip dondursun

    void Start()
    {
        // havuza "Kutu1" ekle
        // Al() sonucunu alinan degiskenine ata
        // "Alinan: " metnini alinan ile birlestirip yazdir
    }
}

Örnek çözüm

Player.cs
using UnityEngine;
using System.Collections.Generic;

public class NesneHavuzu : MonoBehaviour
{
    private Queue<string> havuz = new Queue<string>();

    string Al()
    {
        return havuz.Dequeue();
    }

    void Start()
    {
        havuz.Enqueue("Kutu1");
        string alinan = Al();
        Debug.Log("Alinan: " + alinan);
    }
}

Beklenen çıktı

Alinan: Kutu1

Uygulama Havuz yeniden kullanımı

HavuzSayaci sınıfında havuz adında bir kuyruk alanı ve yenidenKullanilan adında bir tam sayı alanı tanımla. Start içinde havuza "Kasa" ekle, Dequeue ile bir nesne al, onu Enqueue ile havuza geri koy, yenidenKullanilan değerini bir artır ve Debug.Log ile "Yeniden kullanilan: " metnini bu değişkenle birleştirerek yazdır.

Başlangıç kodu

Player.cs
using UnityEngine;
using System.Collections.Generic;

public class HavuzSayaci : MonoBehaviour
{
    // havuz adli kuyruk alanini tanimla
    // yenidenKullanilan adli tam sayi alanini tanimla

    void Start()
    {
        // havuza "Kasa" ekle
        // kuyruktan bir nesne al
        // nesneyi Enqueue ile havuza geri koy
        // yenidenKullanilan degerini bir artir
        // "Yeniden kullanilan: " metnini bu degiskenle yazdir
    }
}

Örnek çözüm

Player.cs
using UnityEngine;
using System.Collections.Generic;

public class HavuzSayaci : MonoBehaviour
{
    private Queue<string> havuz = new Queue<string>();
    int yenidenKullanilan;

    void Start()
    {
        havuz.Enqueue("Kasa");
        string nesne = havuz.Dequeue();
        havuz.Enqueue(nesne);
        yenidenKullanilan = yenidenKullanilan + 1;
        Debug.Log("Yeniden kullanilan: " + yenidenKullanilan);
    }
}

Beklenen çıktı

Yeniden kullanilan: 1

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bir object pool'da nesne geri bırakıldığında ne olur?

  • Nesne havuza geri konur ve yeniden kullanılmak üzere bekler Doğru cevap
  • Yeni bir tahsis yapılır
  • Nesne yok edilir ve bellek geri alınır
  • Havuz kalıcı olarak kapanır

Açıklama: Havuz mantığında nesne yok edilmez; Enqueue ile sıraya geri eklenir ve sonraki kullanımda yeniden alınır.

2 Havuza ekleme

Soru
    havuz.____("Kutu1");
Cevap
    havuz.Enqueue("Kutu1");

Açıklama: Queue yapısına eleman ekleme işlemi Enqueue ile yapılır.

3 Havuz terimleri

Kavram Anlamı
Queue FIFO sırasına göre çalışan koleksiyon
Enqueue Sıraya ekleme / havuza geri koyma
Dequeue Sıranın başından eleman çıkarma
Object Pool Nesnelerin yeniden kullanıldığı yapı

Uzman bölümündeki tüm dersler