D Programlama - Demetler
Tuple'lar, birden çok değeri tek bir nesne olarak birleştirmek için kullanılır. Tuples, bir dizi öğe içerir. Öğeler, türler, ifadeler veya takma adlar olabilir. Bir demetin sayısı ve öğeleri derleme zamanında sabittir ve çalışma zamanında değiştirilemezler.
Tuples, hem yapıların hem de dizilerin özelliklerine sahiptir. Tuple öğeleri, yapılar gibi farklı türlerde olabilir. Elemanlara diziler gibi indeksleme yoluyla erişilebilir. Std.typecons modülündeki Tuple şablonu tarafından bir kitaplık özelliği olarak uygulanırlar. Tuple, bazı işlemleri için std.typetuple modülünden TypeTuple'ı kullanır.
Tuple kullanarak Tuple ()
Tuples, tuple () fonksiyonu tarafından oluşturulabilir. Bir demetin üyelerine dizin değerleri ile erişilir. Aşağıda bir örnek gösterilmiştir.
Misal
import std.stdio;
import std.typecons;
void main() {
auto myTuple = tuple(1, "Tuts");
writeln(myTuple);
writeln(myTuple[0]);
writeln(myTuple[1]);
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
Tuple!(int, string)(1, "Tuts")
1
Tuts
Tuple Şablonunu kullanarak Tuple
Tuple, tuple () işlevi yerine doğrudan Tuple şablonu tarafından da oluşturulabilir. Her üyenin türü ve adı iki ardışık şablon parametresi olarak belirtilir. Şablonlar kullanılarak oluşturulduğunda üyelere özelliklere göre erişmek mümkündür.
import std.stdio;
import std.typecons;
void main() {
auto myTuple = Tuple!(int, "id",string, "value")(1, "Tuts");
writeln(myTuple);
writeln("by index 0 : ", myTuple[0]);
writeln("by .id : ", myTuple.id);
writeln("by index 1 : ", myTuple[1]);
writeln("by .value ", myTuple.value);
}
Yukarıdaki kod derlendiğinde ve çalıştırıldığında, aşağıdaki sonucu verir
Tuple!(int, "id", string, "value")(1, "Tuts")
by index 0 : 1
by .id : 1
by index 1 : Tuts
by .value Tuts
Özellik ve Fonksiyon Parametrelerini Genişletme
Tuple üyeleri .expand özelliğiyle veya dilimlenerek genişletilebilir. Bu genişletilmiş / dilimlenmiş değer, işlev bağımsız değişken listesi olarak iletilebilir. Aşağıda bir örnek gösterilmiştir.
Misal
import std.stdio;
import std.typecons;
void method1(int a, string b, float c, char d) {
writeln("method 1 ",a,"\t",b,"\t",c,"\t",d);
}
void method2(int a, float b, char c) {
writeln("method 2 ",a,"\t",b,"\t",c);
}
void main() {
auto myTuple = tuple(5, "my string", 3.3, 'r');
writeln("method1 call 1");
method1(myTuple[]);
writeln("method1 call 2");
method1(myTuple.expand);
writeln("method2 call 1");
method2(myTuple[0], myTuple[$-2..$]);
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
method1 call 1
method 1 5 my string 3.3 r
method1 call 2
method 1 5 my string 3.3 r
method2 call 1
method 2 5 3.3 r
TürTuple
TypeTuple, std.typetuple modülünde tanımlanmıştır. Virgülle ayrılmış değerler ve türler listesi. TypeTuple kullanan basit bir örnek aşağıda verilmiştir. TypeTuple, bağımsız değişken listesi, şablon listesi ve dizi değişmez listesi oluşturmak için kullanılır.
import std.stdio;
import std.typecons;
import std.typetuple;
alias TypeTuple!(int, long) TL;
void method1(int a, string b, float c, char d) {
writeln("method 1 ",a,"\t",b,"\t",c,"\t",d);
}
void method2(TL tl) {
writeln(tl[0],"\t", tl[1] );
}
void main() {
auto arguments = TypeTuple!(5, "my string", 3.3,'r');
method1(arguments);
method2(5, 6L);
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
method 1 5 my string 3.3 r
5 6