Tuple'ların bilgisayar alanında özel bir anlamı vardır, bu isim biraz yabancı gelebilir ve kod yazmada neredeyse hiçbir uygulama senaryosu yoktur, ancak şaşırtıcı bir şekilde, tuple'lar programlamayla yakından ilişkilidir, bazı öğrenciler ilişkisel veritabanlarında "kayıtlar" için başka bir akademik adın "tuples" olduğunu, bir kayıt bir tuple'dur, bir tablo bir ilişkidir, kayıtlar tablolardan oluşur, tuple'lar ilişkiler oluşturur, bu ilişkisel veritabanlarının temel kavramıdır.
Tuples, ilişkisel bir veritabanının ayrılmaz bir parçasıdır, ancak programlamada o kadar vazgeçilmez değildirler. Bazı programlama dillerinin kendi tuple sözdizimi vardır; örneğin python, F#, haskell, scala vb., diğerleri ise daha popülerdir ancak tuple sözdizimi yoktur, örneğin Java, JavaScript, C++, C# vb. gibi.
Tuple'lar, diziler ve nesneler gibi vazgeçilmez programlama öğeleri değildir, ancak kullanımları özellikle bir fonksiyonun birden fazla değer döndürmesi gerektiğinde kod yazmak için çok kullanışlı olabilir. Bu durumda, yaygın uygulama bir nesneyi tanımlamak, fonksiyonun döndürmesi gereken değeri nesnenin özniteliği olarak ayarlamak ve ardından fonksiyonun dönüş değer tipini nesnenin tipine ayarlamaktır. Ya da bu fonksiyon, belirli verinin var olduğu bir harita veri yapısını döndürebilir. Ancak, her iki yaklaşımın da kusurları vardır ve ilk yöntem güvenilirdir, ancak kod alışılmadık derecede şişiricidir. Gereksinimler çok basittir, fonksiyon birden fazla değer döndürdüğü sürece, ancak bu yöntem önceden bir tür tanımlamayı, sonra örneklemeyi, ardından örnek özelliklerini ayarlamayı ve sonunda geri dönmeyi gerektirir ki bu çok verimsizdir. İkinci yöntem hızlı olsa da yeterince güvenli olmasa da, fonksiyon içinde haritada ne tür bir değerin saklandığını bilebilir, ancak fonksiyon dışında, bu fonksiyonun dönüş değerinin bir harita olduğunu bilinir; haritada hangi değerlerin saklandığı, hangi türün bilinmediği çok kişilik geliştirme projelerinde bu dezavantaj özellikle açıktır; maalesef bu uygulama bazı dinamik tipli dillerde tercih edilen çözümdür ve bu da dinamik tipli dillerin zayıf güvenlik ve okunabilirlikten şikayet edilmesinin temel nedenlerinden biridir. Bu nedenle, bu tür sorunlara en iyi çözüm tuple kullanmaktır.
Sözdizimi kendisi tuple'ları desteklediği dillerde, tuple'lar parantez ile temsil edilir; örneğin (int, bool, string) üçlü tiptir ve değeri (1, true, "abc") olabilir. Her tuple tipinin benzersiz olduğu belirtilmelidir; (int, bool), (bool, int), (string, double) hepsi ikilidir, ancak burada belirli bir tuple'ı fonksiyonun dönüş değeri olarak alırsanız, bu yöntem daha önce bahsedilen özel tiplerle ilk çözüm kadar iyi olmasa da, map ile ikinci çözümden çok daha iyidir, en azından tuples kullanılarak fonksiyonun kaç değer döndüreceğini bilebilir, Bu değerler ne tür bir değer ve harita kullanarak ikinci bir şemayı kodlamanın basit ve hızlı olması avantajına sahiptir.
Neyse ki, bu programlama dilleri artık genel dilleri destekliyor ve yerleşik olmayan tuple'ların uygulanması son derece basit hale geldi, ancak sonuçta bu dil dışı yerleşik bir sözdizimi öğesidir ve kesinlikle yerel tuple'lar kadar kullanışlı değildir.
Aşağıda, kendi resmi ana sayfası ve yüzlerce github yıldızı olan üçüncü taraf Java tuples kütüphanesi tanıtıyor; bu kütüphane, Java tuple alanında neredeyse tekel konumunu oynuyor.
Javatuple'lar maksimum 10 uzunluğunda bir tuple tanımlar, ama bence 10 tuple'daki eleman sayısı zaten çok fazla ve neredeyse hiç okunabilirlik yok. Tuple sınıfları aşağıdaki şekilde tanımlanır:
Birim<A> (1 eleman)
Çift<A,B> (2 eleman)
Üçlü<A,B,C> (3 eleman)
Dörtlü<A,B,C,D> (4 unsur)
Beşli<A,B,C,D,E> (5 eleman)
Altlı<A,B,C,D,E,F> (6 eleman)
Yetmiş<A,B,C,D,E,F,G> (7 eleman)
Oktet<A,B,C,D,E,F,G,H> (8 eleman)
Ennead<A,B,C,D,E,F,G,H,I> (9 eleman)
On Yıl<A,B,C,D,E,F,G,H,I,J> (10 eleman) Bu arketipik sınıflar genel sınıflardır, bu yüzden açı parantezlerindeki harfler rastgele tiplerle değiştirilebilir. Aşağıda ikili kod örneği verilmektedir
Çıkarımlar yaparak, diğer tuple tipleri de aynı şekilde kullanılır.
Java'nın tuple'ları dilin kendisi tarafından desteklenmediği için, kod Cava dilinde ve daha az zarif görünüyor. Ancak, kod yazarken, yazmanın kolaylığı verimliliği artırabilir, ayrıca kodun kendisinin ifade ettiği anlama daha fazla dikkat etmek daha önemlidir; yani tuple'un anlamını (işlevini) kodu geliştirmek için kullanmak ve nasıl yazılacağı aslında sadece ikincil bir şeydir.
Son olarak, genel açı parantezlerindeki tipin Java'nın temel tipi olamaz, temel tipi kullanmak istiyorsanız, aynı zamanda kutulanmış temel tip olması gerekir; örneğin int tipi tam sayıya dönüştürülmelidir ve bool tipi Boolean tipine karşılık gelir. |