Sebelum string interpolation diperkenalkan, .NET sudah memiliki composite formatting: pemformatan dengan placeholder bernomor seperti {0} dan {1} di dalam string format. Gaya ini masih dipakai luas di pustaka .NET, pesan exception, dan framework logging, sehingga kita perlu membaca dan menulisnya dengan lancar.

Placeholder Bernomor #

Placeholder mengacu pada argumen setelah string format, dengan penomoran mulai dari nol:

csharp
string nama = "Budi";
int jumlah = 3;
double hargaSatuan = 15000;

Console.WriteLine("Pelanggan: {0}", nama);
Console.WriteLine("Total: {0} x {1} = {2:C}", jumlah, hargaSatuan, jumlah * hargaSatuan);

Output yang Dihasilkan:

text
Pelanggan: Budi
Total: 3 x 15.000,00 = Rp45.000,00

Contoh di atas berjalan dengan regional id-ID yang diatur pada bab sebelumnya. Mari kita telaah baris demi baris:

  1. Baris 5 ("Pelanggan: {0}"): Placeholder {0} merujuk argumen pertama setelah string format, yaitu variabel nama.
  2. Baris 6 ("{0} x {1} = {2:C}"): Tiga placeholder menerima tiga argumen secara berurutan; jumlah mengisi {0}, hargaSatuan mengisi {1}, dan hasil kali keduanya mengisi {2}.
  3. Baris 6 ({2:C}): Specifier setelah titik dua bekerja sama seperti pada bab sebelumnya, sehingga angka tampil sebagai mata uang Rp45.000,00.
  4. Baris 6 (expression jumlah * hargaSatuan): Argumen boleh berupa expression; compiler mengevaluasinya lebih dulu, lalu hasilnya diformat oleh placeholder.

Perataan pada Placeholder #

Alignment juga didukung: tanda koma di dalam placeholder mengatur lebar minimum kolom, sama seperti pada interpolation:

csharp
Console.WriteLine("{0,-8}|{1,10}", "Barang", "Stok");
Console.WriteLine("{0,-8}|{1,10}", "Buku", 120);
Console.WriteLine("{0,-8}|{1,10}", "Pensil", 75);

Output yang Dihasilkan:

text
Barang  |      Stok
Buku    |       120
Pensil  |        75

Placeholder {0,-8} mengisi kolom delapan karakter dengan rata kiri, sedangkan {1,10} mengisi kolom sepuluh karakter dengan rata kanan. Tiga baris output kini membentuk tabel sederhana dengan kolom yang lurus.

Karakter Kurung Kurawal Literal #

Untuk menampilkan tanda {0} sebagai teks biasa, kurung kurawal ditulis ganda:

csharp
Console.WriteLine("Tanda {{0}} adalah placeholder {0}", "pertama");

Output yang Dihasilkan:

text
Tanda {0} adalah placeholder pertama

Dua gaya pemformatan ini saling melengkapi: string interpolation lebih nyaman untuk kode baru yang kita tulis, sedangkan composite formatting perlu dikuasai saat membaca pustaka dan kode lama yang menggunakannya.