Pemrograman D - Tupel

Tupel digunakan untuk menggabungkan beberapa nilai sebagai satu objek. Tupel berisi urutan elemen. Elemen dapat berupa tipe, ekspresi, atau alias. Jumlah dan elemen tupel ditetapkan pada waktu kompilasi dan tidak dapat diubah pada waktu proses.

Tuple memiliki karakteristik baik struct maupun array. Elemen tupel dapat terdiri dari berbagai jenis seperti struct. Elemen-elemen tersebut dapat diakses melalui pengindeksan seperti array. Mereka diimplementasikan sebagai fitur perpustakaan oleh template Tuple dari modul std.typecons. Tuple menggunakan TypeTuple dari modul std.typetuple untuk beberapa operasinya.

Tuple Menggunakan tuple ()

Tupel dapat dibangun dengan fungsi tuple (). Anggota tupel diakses oleh nilai indeks. Contohnya ditunjukkan di bawah ini.

Contoh

import std.stdio; 
import std.typecons; 
 
void main() { 
   auto myTuple = tuple(1, "Tuts"); 
   writeln(myTuple); 
   writeln(myTuple[0]); 
   writeln(myTuple[1]); 
}

Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -

Tuple!(int, string)(1, "Tuts") 
1 
Tuts

Tuple menggunakan Tuple Template

Tuple juga bisa dibangun langsung oleh template Tuple daripada fungsi tuple (). Jenis dan nama setiap anggota ditentukan sebagai dua parameter templat yang berurutan. Dimungkinkan untuk mengakses anggota berdasarkan properti saat dibuat menggunakan templat.

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); 
}

Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut

Tuple!(int, "id", string, "value")(1, "Tuts") 
by index 0 : 1 
by .id : 1 
by index 1 : Tuts 
by .value Tuts

Memperluas Parameter Properti dan Fungsi

Anggota Tuple dapat diperluas baik dengan properti .expand atau dengan mengiris. Nilai yang diperluas / diiris ini dapat diteruskan sebagai daftar argumen fungsi. Contohnya ditunjukkan di bawah ini.

Contoh

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..$]); 
}

Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -

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

TypeTuple

TypeTuple didefinisikan dalam modul std.typetuple. Daftar nilai dan jenis yang dipisahkan koma. Contoh sederhana menggunakan TypeTuple diberikan di bawah ini. TypeTuple digunakan untuk membuat daftar argumen, daftar template, dan daftar literal array.

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);  
}

Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -

method 1 5 my string 3.3 r 
5     6