Contoh STRING (variable) interpolation di bahasa Singkong


Catatan: apabila membutuhkan template engine (yang menawarkan lebih banyak fitur dibandingkan dengan interpolation), bacalah juga tutorial Bekerja dengan template engine di bahasa Singkong.

Seringkali, kita perlu menggabungkan sebuah literal STRING dan variabel, seperti contoh berikut (kode diketikkan pada Interactive evaluator Singkong).

>  var a = 123456
>  println("Total adalah: " + a)
Total adalah: 123456

Apabila penggabungan tersebut hanya di awal atau akhir STRING seperti contoh tersebut, mungkin tidak terlalu jadi kendala. Tapi, bagaimana kalau harus berkali-kali melakukan penggabungan dalam sebuah STRING, seperti contoh berikut?

>  var a = 123456
>  var b = number_group(a, ".", ",")
>  var c = words_id(string(a))
>  println("Total adalah: " + b + " (" + c + ") Rupiah")
Total adalah: 123.456 (Seratus dua puluh tiga ribu empat ratus lima puluh enam) Rupiah

Agak repot dengan operator + dan kutip, bukan? Untungnya, mulai Singkong versi 10.7, kita dapat menggunakan STRING (variable) interpolation, dengan fungsi interpolate. Contoh sebelumnya dapat dituliskan ulang sebagai berikut:

>  println(interpolate("Total adalah: {b} ({c}) Rupiah"))
Total adalah: 123.456 (Seratus dua puluh tiga ribu empat ratus lima puluh enam) Rupiah

Kita tidak perlu menggabungkan lagi secara manual untuk literal STRING dan variabel. Fungsi interpolate akan menggantikan nama variabel yang dituliskan diantara { dan } dengan nilainya. Tentu saja, karena Singkong case-insensitive, huruf besar atau kecil pada nama variabel tidak dibedakan.

>  println(interpolate("Total adalah: {B} ({C}) Rupiah"))
Total adalah: 123.456 (Seratus dua puluh tiga ribu empat ratus lima puluh enam) Rupiah

Bagaimana kalau kita menuliskan nama variabel yang tidak valid? Dalam hal ini, tidak ada nilai apapun yang digantikan, dan akan tetap dituliskan apa adanya.

>  D
ERROR: [line: 1] identifier not found: D

>  println(interpolate("Total adalah: {B} ({D}) Rupiah"))
Total adalah: 123.456 ({D}) Rupiah

Apabila fungsi interpolate digunakan terus menerus, kita bisa membuat variabel dengan nama yang lebih ringkas, misal: _s. Contoh:

>  var _s = interpolate
>  println(_s("Total adalah: {B} ({C}) Rupiah"))
Total adalah: 123.456 (Seratus dua puluh tiga ribu empat ratus lima puluh enam) Rupiah

Fungsi interpolate dimaksudkan untuk interpolasi variabel. Pada contoh berikut, ekspresi tidak dievaluasi:

>  println(interpolate("{1 + 2 + 3}"))
{1 + 2 + 3}

Kita tetap perlu menyimpan ke variabel terlebih dahulu:

>  var d = 1 + 2 + 3
>  println(interpolate("{d}"))
6

Kita juga tidak dapat memanggil fungsi secara langsung, seperti contoh berikut. Dengan demikian, apabila interpolasi dimaksudkan untuk template sederhana yang ditulis oleh developer lain, kita tidak perlu khawatir adanya pemanggilan fungsi.

>  println(interpolate("Environment variabel: {env()}"))
Environment variabel: {env()}

Selama variabel terdefinisi, nilainya akan digantikan. Tapi, untuk tipe dengan operator indeks [] seperti ARRAY atau HASH, operator ini tidak serta merta dievaluasi. Perhatikanlah contoh berikut:

>  var e = [1,2,3,4,5]
>  println(interpolate("{e}"))
[1, 2, 3, 4, 5]

>  println(interpolate("{e[4]}"))
{e[4]}

Seperti contoh-contoh sebelumnya, kita tetap perlu assign ke variabel terlebih dahulu:

>  var f = e[4]
>  println(interpolate("{f}"))
5

Terima kasih telah membaca :)