• dot nette c++ template'lerine benzeri bir yapıyı dillere kazandıracak olan clr özelliği. şimdilik c sharp v2'de gelecek, diğer dilleri bilmiyoruz. (hatırlayalım, c# dot net'in "temel" dilidir diyorlardı bir zaman, buymuş en hakiki temeli). clr core'unda değişiklik gerektirdiği için bunu 3 senedir sayıklıyordu microsoft, sonunda yapabilmiş. en büyük avantajı "native" data type'ların örneğin collectionda saklanırken box edilmesi, okunurken unbox edilmesi sorunsalını çözecek, performansa hız ve coşku katacak olması.

    isminin generics olmasının sebebi de muhtemelen templates'in "generic" versiyonu olması, zira c++ templateleri kadar işlevli (okuyunuz: karışık) olmayacağı iddia ediliyor, yemeden bilemem.
  • java 1.5 ile birlikte java'ya da gelecek ozellik.
  • eskiden bir bağlı listeyi şöyle oluşturuyorduk :

    // sadece int tipinde elemanlar atayacağımızı düşünerek:
    arraylist mylist = new arraylist();
    mylist.add(3);
    mylist.add(105);
    // veya sadece string türünde elemanlarla:
    arraylist mylist2 = new arraylist();
    mylist2.add("ekşi");
    mylist2.add("sözlük");

    ancak burada listemizin birbirinden farklı türlere destek verebilmesi için object türünde eleman kabul ettiğini biliyoruz. yani ne atarsanız alıyor (upcasting).. ve onu geri illa cast (down casting) yaparak kullanıyorsunuz. bu tip dönüşümleri size çok vakit kaybettiriyor haliyle. bir de güvenemiyorsunuz listedeki elemanın gerçekten beklediğiniz bir tipte eleman olduğuna.. "invalid cast" hataları almanız olası.

    ne yapılıyordu peki çözüm olarak? icollection sınıfından sadece istediğiniz tipte eleman kabul eden özelleşmiş kolleksiyonlar yazıp duruyordunuz.

    artık "generics" ile tüm bu handikaplardan kurtulup anında özelleşmiş (tipleşmiş, tip güvenli) listenize kavuşuyorsunuz:

    list<int> list1 = new list<int>();
    list1.add(3);
    // aşağıdaki satır elbette hataya neden olacak
    list1.add("yak beni");
  • bir collection'da tasiyacaginiz veri tipi her zaman ayni ise hayvanlar gibi ise yarayan velakin asagidaki code ornegindeki gibi farkli tiplerde nesneler tasiyacaksaniz ise yaramayan (en azindan yaramasi icin bir yontem varsa da ben bilmiyorum) kavramdir. ayrica javac 1.5 versiyonundan itibaren, kullanilabilecegi yerlerde kullanilmadiginda warning vermektedir.

    hashmap parameters = new hashmap();
    if(debug)
    parameters.put("debug","true");
    else
    parameters.put("debug","false");

    serversocket srvsocket = null;

    if(address == null)
    srvsocket = new serversocket((new integer(port)).intvalue(), 5);
    else
    srvsocket = new serversocket((new integer(port)).intvalue(), 5, inetaddress.getbyname(address));

    parameters.put("serversocket", srvsocket);
  • visual basic 2005 tarafindan da desteklenecek olan $ey.

    ayrica microsoft oturmu$ system collections generics namespace'i altina guzel collectionlar hazirlami$lar.

    dictionary ile isim->deger bazli liste hazirlanabiliyor, linked list adi uzerinde, fifo-lifo bazli queue ve stack, readonlycollection ve sorteddictionary de adlari uzerinde..

    eninde sonunda manual olarak implement ettigimiz bu can'im listeleri yazip vermi$ olmalari mutluluk verici.
  • jdk1.7 ile birlikte instance'ı yaratırken tekrar yazma gereksinimi ortadan kalkan hayat kurtarıcı, şöyle ki;

    map<string, xyxbean> map = new hashmap<string, xyxbean>(); -> map<string, xyxbean> map = new hashmap<>();
  • java generics esasen syntactic sugar olmaktan ileri gitmeyen bir hadisedir. örneğin, c#'ta list<int> diye bir tür tanımladığınızda esasen hakikaten yeni bir tür yaratıyorsunuz. vm sizin için çalışma zamanında* o tür için gerekli kodu (t'leri replace ederek) oluşturuyor. dolayısıyla eskisi gibi yavaş casting işlemleri yapmanıza gerek kalmıyor. java'da ise generics tamamen compiler tarafında yapılan bir hadise. jvm'nin olaydan haberi yok. casting yine var ama compiler sizin yerinize yapıyor, sizin yapmanıza gerek kalmıyor. dolayısıyla bir performans artışı söz konusu vs değil. java'nın yolunu çok tırt bulduğumu söylemeden geçemeyeceğim. olmamış otur sıfır.

    c++ template'leri ise ikisinden de farklı tabii. orada yeni bir tür yaratmak gibi bir şey yok. makro gibi bir hadise esasen. c#'da runtimeda yapılan burada compile zamanında yapılıyor ama daha esnek yapısı var. örneğin, c#'da aşağıdaki kod geçersiz. zira 't' türü için toplama veya karşılaştırma operatörü tanımlanmış olsa bile aşağıdaki kod compile etmiyor. halbuki, c++'da bu mümkün.

    public class evaluate<t>
    {
    private t m_value1;
    private t m_value2;

    public evaluate(t value1, t value2)
    {
    m_value1 = value1;
    m_value2 = value2;
    }

    public t sum
    {
    get
    {
    return m_value1 + m_value2;
    }
    }

    public int compare
    {
    get
    {
    return m_value1 > m_value2 ? 1 : m_value1 == m_value2 ? 0 : 2;
    }
    }
    }

    anders hejlsberg duy sesimizi...

    http://www.artima.com/intv/generics2.html
  • c#'ta bana şöyle bir sınıf yazdırabildiği için mikisoft'a minnettar olmama vesile olan bi şey:

    public static class modelfactory<t> where t : abstractbasemodel, new() {
    -- public static t create () {
    ----- return new t();
    -- }
    }

    daha sonra

    modelfactory<hedemodel>.create() deyip instance yaratabiliyoruz. hatta create metodunu başka yerlerde delegate olarak da kullanabiliyoruz.
  • klup<string> lig[] = new klup<string>[18] gibi bir kullanımla klup(ya da başka) array'i oluşturmak istediğinizde compiler java.lang.alisamialkis error verir.
    bunun yerine klup<string> lig[] = new klup[18]; yapıp n. indise obje oluşturmak sizi sadece warningle kurtarır.
    mesele lig[0] = new klup<>("gs"); gibi

    edit: klup class'ının generic olduğunu söylememe gerek var mı? (klup<t>)
hesabın var mı? giriş yap