Hasil bagi dan sisa pembagian lahir dari satu perhitungan yang sama, tetapi sebuah method dengan return type int hanya mampu mengirim satu angka. Pada bab Ref, Out, dan In kita mengatasi hal ini lewat out; cara lain yang lebih ringkas adalah tuple: satu nilai kembalian yang mengemas beberapa nilai sekaligus, lengkap dengan nama per elemen.
Sintaks Tuple Type #
Tuple type ditulis dengan kurung biasa dan daftar tipe berikut nama elemennya: (int hasilBagi, int sisa). Nilai kembaliannya ditulis sebagai tuple literal, misalnya (hasilBagi, sisa). Nama elemen bersifat kenyamanan pembaca; compiler tetap memeriksa tipe tiap posisinya.
Contoh Lengkap #
static class Pembagian
{
public static (int hasilBagi, int sisa) Bagi(int angka, int pembagi)
{
int hasilBagi = angka / pembagi;
int sisa = angka % pembagi;
return (hasilBagi, sisa);
}
}
var hasil = Pembagian.Bagi(17, 5);
Console.WriteLine($"17 dibagi 5: hasil bagi {hasil.hasilBagi}, sisa {hasil.sisa}");
(int isi, int sisa) = Pembagian.Bagi(25, 4);
Console.WriteLine($"Isi tiap kotak: {isi}, sisa: {sisa}");Output yang Dihasilkan:
17 dibagi 5: hasil bagi 3, sisa 2
Isi tiap kotak: 6, sisa: 1Mari kita bedah baris demi baris:
- Baris 3 (
(int hasilBagi, int sisa) Bagi(...)): return type adalah tuple dua elemen bernama; method menjanjikan dua nilaiintsekaligus. - Baris 7 (
return (hasilBagi, sisa);): tuple literal mengemas kedua variabel lokal menjadi satu nilai kembalian. - Baris 11 (
var hasil = ...): seluruh tuple ditampung dalam satu variabel; elemennya diakses lewat nama —hasil.hasilBagibernilai3danhasil.sisabernilai2. - Baris 14 (
(int isi, int sisa) = ...): bentuk ini disebut deconstruction; kedua elemen tuple langsung dipecah ke dua variabel baru dalam satu baris. - Baris 15: nama variabel di titik pemanggilan (
isi,sisa) bebas ditentukan dan tidak harus sama dengan nama elemen pada deklarasi method.
Tuple atau Out #
Kedua teknik menyelesaikan kebutuhan yang sama, dengan karakter berbeda:
| Aspek | out | Tuple |
|---|---|---|
| Variabel pemanggil | Diubah langsung | Tidak tersentuh |
| Penulisan di pemanggil | Deklarasi out pada baris panggilan | var atau deconstruction |
| Wajar untuk | Keluaran pendamping wajib (pola TryParse) | Hasil gabungan beberapa nilai |