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 #

csharp
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:

text
17 dibagi 5: hasil bagi 3, sisa 2
Isi tiap kotak: 6, sisa: 1

Mari kita bedah baris demi baris:

  1. Baris 3 ((int hasilBagi, int sisa) Bagi(...)): return type adalah tuple dua elemen bernama; method menjanjikan dua nilai int sekaligus.
  2. Baris 7 (return (hasilBagi, sisa);): tuple literal mengemas kedua variabel lokal menjadi satu nilai kembalian.
  3. Baris 11 (var hasil = ...): seluruh tuple ditampung dalam satu variabel; elemennya diakses lewat nama — hasil.hasilBagi bernilai 3 dan hasil.sisa bernilai 2.
  4. Baris 14 ((int isi, int sisa) = ...): bentuk ini disebut deconstruction; kedua elemen tuple langsung dipecah ke dua variabel baru dalam satu baris.
  5. 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:

AspekoutTuple
Variabel pemanggilDiubah langsungTidak tersentuh
Penulisan di pemanggilDeklarasi out pada baris panggilanvar atau deconstruction
Wajar untukKeluaran pendamping wajib (pola TryParse)Hasil gabungan beberapa nilai