Sobes.tech
Middle

Programlamada genellemeler (Generics) nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Genel özellikler (Generics), programlama dillerinde, farklı veri türleriyle çalışan bileşenler (sınıflar, arayüzler, metodlar/fonksiyonlar) oluşturmayı sağlayan bir mekanizmadır; bu, tür güvenliğini kaybetmeden ve tür dönüşümlerine (casting) gerek kalmadan yapılır.

Genel özelliklerin kullanım amaçları:

  • Tür güvenliğinin artırılması: Derleyici, derleme aşamasında türleri kontrol eder ve çalıştırmadan önce hataları tespit eder.
  • Kod okunabilirliğinin artırılması: Bir bileşenin hangi veri türleriyle çalıştığı açıkça görülür.
  • Kodun yeniden kullanımı: Farklı türlerle çalışan tek bir bileşen oluşturulabilir, böylece birkaç farklı versiyon yazmaya gerek kalmaz.
  • Tür dönüşümlerinin azaltılması: Açık tür dönüşümlerine gerek kalmaz, bu da kodu daha temiz ve hatalara daha az açık hale getirir ClassCastException (uygulandığı dillerde, örneğin Java) gibi hataları önler.

Genel özelliklerin kullanım örnekleri:

  • Koleksiyonlar: Listeler (List), kümeler (Set), haritalar (Map) belirli bir türdeki öğeleri saklayabilir, böylece başka türde öğelerin eklenmesi engellenir.
  • Metodlar/fonksiyonlar: Bir metod, parametrelerle çalışabilir veya genel bir türde değer döndürebilir.
  • Sınıflar/arayüzler: Evrensel veri yapıları veya davranış kalıpları oluşturulabilir.

Java örneği:

// Genel özellikli Pair sınıfı
public class Pair<T, U> {
    private T first;
    private U second;

    public Pair(T first, U second) {
        this.first = first;
        this.second = second;
    }

    public T getFirst() {
        return first;
    }

    public U getSecond() {
        return second;
    }
}

// Kullanım
Pair<String, Integer> pair = new Pair<>("Hello", 123);
String str = pair.getFirst(); // Tür dönüşümüne gerek yok
int num = pair.getSecond(); // Tür dönüşümüne gerek yok

// Yanlış Pair örneği
// Pair<String, Integer> wrongPair = new Pair<>(123, "Hello"); // Derleme hatası: tür uyuşmazlığı

C# örneği:

// Genel özellikli Pair sınıfı
public class Pair<T, U>
{
    public T First { get; set; }
    public U Second { get; set; }

    public Pair(T first, U second)
    {
        First = first;
        Second = second;
    }
}

// Kullanım
var pair = new Pair<string, int>("Hello", 123);
string str = pair.First; // Tür dönüşümüne gerek yok
int num = pair.Second; // Tür dönüşümüne gerek yok

// Yanlış Pair örneği
// var wrongPair = new Pair<string, int>(123, "Hello"); // Derleme hatası: tür uyuşmazlığı

TypeScript örneği:

// Dizinin ilk elemanını alan genel fonksiyon
function getFirstElement<T>(arr: T[]): T | undefined {
    if (arr.length > 0) {
        return arr[0];
    }
    return undefined;
}

// Kullanım
let numbers: number[] = [1, 2, 3];
let firstNumber = getFirstElement(numbers); // firstNumber türü number

let words: string[] = ["a", "b", "c"];
let firstWord = getFirstElement(words); // firstWord türü string

// let mixedArray: (number | string)[] = [1, "a", 2];
// let firstMixed = getFirstElement(mixedArray); // firstMixed türü number | string

Genel özellikler, esnek, tür güvenli ve yeniden kullanılabilir kodlar oluşturmak için güçlü bir araçtır.