Halo! Selamat datang kembali di “Seri Belajar Dasar Pemrograman Bahasa C#“. Pada materi sebelumnya, kita sudah mempelajari apa itu tipe data dan variabel. Kali ini, kita akan mempelajari bagaimana bekerja dengan tipe string di C#.
Setelah selesai mempelajari materi ini, Anda akan mendapatkan pemahaman tentang bagaimana cara memanipulasi sebuah teks menggunakan operasi-operasi bawaan dari tipe data string
.
Selain itu, Anda juga akan memahami bagaimana cara membandingkan dua buah teks untuk mengevaluasi apakah keduanya identik atau tidak. Terakhir, Anda akan mengerti cara menggunakan interpolasi string untuk menampilkan data-data dari program Anda dalam bentuk teks.
Manipulasi String Di C#
Buat sebuah aplikasi console dengan nama BekerjaDenganString. Lalu, tulis kode program di bawah ini di dalam method Main()
.
string nama = "mahirkoding.id";
Console.WriteLine("Nilai dari variabel nama: {0}", nama);
Console.WriteLine("Nilai variabel nama memiliki {0} karakter", nama.Length);
Console.WriteLine("Nilai variabel nama dengan huruf besar: {0}", nama.ToUpper());
Console.WriteLine("Nilai variabel nama dengan huruf kecil: {0}", nama.ToLower());
Console.WriteLine("Apakah terdapat huruf \'m\' pada nilai variabel nama?: {0}", nama.Contains('m'));
Console.WriteLine("Menghapus karakter pada nilai variabel nama dari index tertentu: {0}", nama.Remove(11));
Console.WriteLine("Menghapus sekian karakter pada nilai variabel nama dimulai dari index tertentu: {0}", nama.Remove(5, 9));
Console.WriteLine("Menyusupkan karakter dari index tertentu: {0}", nama.Insert(5, "BANGET"));
Console.WriteLine("Nilai variabel nama setelah ditukar: {0}", nama.Replace("id", "net"));
Pada baris pertama, kita menetapkan nilai mahirkoding.id
ke sebuah variabel dari tipe string
bernama nama
.
string nama = "mahirkoding.id";
Pada baris kedua, kita hanya sekedar menampilkan nilai dari variabel nama
ke layar console.
Console.WriteLine("Nilai dari variabel nama: {0}", nama);
Pada baris ketiga dan selanjutnya, kita memanfaatkan operasi bawaan dari tipe string
seperti Length()
, ToUpper()
, ToLower()
, dan lain-lain. Mari kita pelajari satu-persatu fungsi dari masing-masing operasi tersebut.
Operasi Length()
Operasi Length()
kita gunakan untuk mendapatkan panjang karakter dari sebuah nilai dari tipe string
. Pada kode program di atas, operasi Length()
akan menghitung jumlah karakter dari teks “mahirkoding.id”. Operasi ini menghasilkan angka 14 (terdapat 14 buah karakter).
Console.WriteLine("Nilai variabel nama memiliki {0} karakter", nama.Length);
Operasi ToUpper()
Operasi ToUpper()
kita gunakan untuk mengubah kapitalisasi teks ke huruf besar semua. Sehingga untuk teks “mahirkoding.id”, operasi ini menghasilkan teks “MAHIRKODING.ID”.
Console.WriteLine("Nilai variabel nama dengan huruf besar: {0}", nama.ToUpper());
Operasi ToLower()
Jika operasi ToUpper()
mengubah tiap karakter pada suatu teks ke huruf besar, sebaliknya operasi ToLower()
mengubah tiap karakter pada suatu teks ke huruf kecil semua. Sehingga, operasi ToLower()
pada kode program di atas menghasilkan “mahirkoding.id”.
Console.WriteLine("Nilai variabel nama dengan huruf kecil: {0}", nama.ToLower());
Operasi Contains()
Operasi Contains()
kita gunakan untuk memeriksa apakah pada sebuah teks terdapat suatu karakter tertentu atau tidak.
Pada kode program di atas, kita memberi argumen berupa karakter ‘m’ ke operasi Contains()
. Dengan begitu, operasi Contains()
akan memeriksa apakah karakter ‘m’ terdapat pada teks “mahirkoding.id” atau tidak.
Jika operasi ini menemukan karakter ‘m’, maka operasi ini akan menghasilkan nilai boolean True
, sebaliknya akan menghasilkan nilai False
jika tidak menemukan karakter ‘m’.
Console.WriteLine("Apakah terdapat huruf \'m\' pada nilai variabel nama?: {0}", nama.Contains('m'));
Operasi Remove()
Operasi Remove()
kita gunakan untuk menghapus karakter pada sebuah teks dari indeks yang ditentukan sampai akhir dari teks. Memberi nilai 11 sebagai argumen pada operasi Remove()
akan menghapus seluruh karakter setelah karakter ke-11. Operasi Remove()
pada kode program di atas menghasilkan teks “mahirkoding”.
Console.WriteLine("Menghapus karakter pada nilai variabel nama dari index tertentu: {0}", nama.Remove(11));
Catatan
Indeks nilai string dimulai dari indeks 0. Artinya karakter pertama dari sebuah teks memiliki indeks 0.
Operasi Remove()
juga bisa menerima 2 argumen. Argumen pertama adalah posisi awal dari karakter yang ingin dihapus, sedangkan argumen kedua adalah jumlah karakter yang ingin dihapus dimulai dari posisi tersebut. Sehingga operasi Remove(5, 9)
di atas akan menghapus 9 karakter setelah karakter ke 5. Hasil dari operasi tersebut adalah “mahir”.
Console.WriteLine("Menghapus sekian karakter pada nilai variabel nama dimulai dari index tertentu: {0}", nama.Remove(5, 9));
Operasi Insert()
Operasi Insert()
kita gunakan untuk menyisipkan sebuah karakter atau teks ke dalam sebuah teks. Operasi Insert()
menerima 2 argumen. Argumen pertama adalah indeks di mana teks pada argumen kedua ingin disisipkan. Operasi Insert(5, "BANGET")
pada kode program di atas menyisipkan teks “BANGET” ke teks “mahirkoding.id” setelah karakter ke 5, sehingga menghasilkan teks “mahirBANGETkoding.id”.
Console.WriteLine("Menyusupkan karakter dari index tertentu: {0}", nama.Insert(5, "BANGET"));
Operasi Replace()
Operasi Replace()
kita gunakan untuk menukar sebuah atau beberapa karakter dari suatu teks ke karakter yang lain. Operasi Replace()
menerima 2 argumen, di mana argumen pertama adalah karakter yang ingin diganti dengan karakter pada argumen kedua. Operasi Replace("id","net")
pada kode program di atas menghasilkan teks “mahirkoding.net”.
Console.WriteLine("Nilai variabel nama setelah ditukar: {0}", nama.Replace("id", "net"));
Catatan
Tentunya masih banyak operasi-operasi bawaan yang bisa kita gunakan untuk memanipulasi nilai string. Anda bisa melihat daftar lengkapnya di dokumentasi bahasa C# di situs web Microsoft.
Operasi Penggabungan String (String Concatenation)
Tambahkan kode program di bawah ini ke dalam program BekerjaDenganString yang sudah Anda buat sebelumnya.
string str1 = "Belajar pemrograman di ";
string str2 = "mahirkoding.id";
string str3 = str1 + str2;
string str4 = System.String.Concat(str1, str2);
Console.WriteLine(str3);
Console.WriteLine(str4);
Jalankan kode program tersebut, lalu perhatikan keluaran yang ditampilkan di layar console.
Baik variabel str3
maupun str4
menghasilkan keluaran yang sama, yaitu “Belajar pemrograman di mahirkoding.id”.
Pada baris ke-3 kode program di atas, kita menggabungkan nilai variabel str1
dan str2
dengan operator + , lalu menetapkan hasil penggabungan tersebut ke variabel str3
.
Pada baris ke-4, kita melakukan penggabungan string dengan memanfaatkan operasi Concat()
yang merupakan operasi bawaan dari tipe data string
.
Operasi penggabungan string menggunakan operator + sebenarnya hanya merupakan sintaks pemanis saja, karena secara implisit operator + akan memanggil operasi Concat()
. Hal ini bisa kita buktikan dengan melihat kode IL hasil kompilasi kode program di atas.
IL_0003: call string [mscorlib]System.String::Concat(string, string)
Hanya saja menggunakan operator + untuk melakukan operasi penggabungan string akan lebih ringkas dan mudah dibaca dibanding menggunakan operasi Concat()
secara eksplisit.
Karakter Escape (Escape Character)
Beberapa karakter tanda baca seperti tanda petik (“), tanda petik tunggal (‘), dan tanda garis miring terbalik (\) tidak bisa kita gunakan di dalam sebuah teks. Hal ini dikarenakan tanda baca tersebut merupakan karakter khusus (reserved character) pada sintaks bahasa C#.
Oleh karena itu, menggunakan baris kode program di bawah ini untuk menampilkan teks 'Halo mahirkoding.id'
akan menghasilkan eror karena menggunakan tanda petik tunggal di dalam sebuah teks.
Console.WriteLine(" 'Halo mahirkoding.id ' ");
Lalu bagaimana jika kita ingin menggunakan karakter-karakter tadi di dalam sebuah teks? Caranya adalah dengan menambahkan karakter escape (\) sebelum karakter tanda petik (\”), tanda petik tunggal (\’), dan tanda garis miring terbalik itu sendiri (\\).
C# menggunakan tanda garis miring terbalik (\) sebagai karakter escape. Seperti namanya, karakter escape digunakan untuk meloloskan karakter-karakter khusus tadi supaya tidak dianggap sebagai bagian dari sintaks bahasa C#.
Tambahkan kode program berikut ini ke dalam program BekerjaDenganString.
Console.WriteLine("Tanda kutip tunggal");
Console.WriteLine("\'Halo mahirkoding.id\'\n");
Console.WriteLine("Tanda kutip ganda");
Console.WriteLine("\"MERDEKA!!\"\n");
Console.WriteLine("Backslash");
Console.WriteLine("C:\\MyApp\\bin\\debug\n");
Console.WriteLine("Tabular");
Console.WriteLine("Nomor\tNama\tAlamat\t");
Console.WriteLine("0001\tSlamet\tYogyakarta\t");
Kode program di atas juga menggunakan karakter escape di depan huruf n (\n
) dan t (\t
). Jalankan kode program tersebut, lalu perhatikan apa efek dari kedua karakter escape tersebut.
Verbatim String
Menggunakan banyak karakter escape pada suatu teks terkadang membuat teks tersebut menjadi susah dibaca. Agar kita bisa menulis teks apa adanya, C# menyediakan konstruksi sintaks bernama verbatim string.
Untuk merubah string menjadi verbatim string, kita cukup menambahkan karakter @ sebelum nilai string tersebut seperti berikut ini.
@"\Ini
\adalah
\'verbatim'
\string"
Dengan menggunakan verbatim string seperti kode program di atas, kita tidak perlu lagi menggunakan karakter escape untuk tanda petik tunggal (\’) dan tanda garis miring terbalik (\\). Bahkan, Kita juga bisa membuat baris baru tanpa menggunakan karakter escape (\n). Menggunakan verbatim string, memungkinkan kita menulis teks seperti adanya.
Pada program BekerjaDenganString yang Anda buat sebelumnya, buat dan tambahkan baris kode program yang bisa menampilkan verbatim string di atas ke layar console. Lalu, perhatikan seperti apa keluaran yang Anda dapatkan
Perhatian
Untuk menampilkan tanda petik, Anda harus menulisnya dua kali seperti @”Para pejuang berteriak “”Merdeka!!”” dengan semangat membara.”
Membandingkan Dua Buah Teks
Sebuah aplikasi yang interaktif biasanya membutuhkan masukan (input) dari pengguna, mengolahnya, dan kemudian merespon masukan tersebut.
Misalnya ketika melakukan login, biasanya kita perlu mengisi nama pengguna dan kata sandi. Proses login akan berhasil apabila data yang kita isi, sesuai dengan data yang disimpan oleh sebuah aplikasi (misalnya, di sebuah database). Begitu pula sebaliknya.
Proses ini biasanya dilakukan dengan cara membandingkan antara masukan dengan data yang ada pada sebuah aplikasi. Seringkali yang dibandingkan adalah dua buah teks atau string.
Untuk membantu pemahaman Anda, deklarasikan dua buah variabel dengan tipe data string
seperti di bawah ini di dalam program BekerjaDenganString sebelumnya.
string str5 = "Halo!";
string str6 = "Hai!";
Equality Operator
Untuk mengecek apakah dua buah string adalah identik atau tidak, kita bisa menggunakan dua tanda sama dengan (==) atau biasa disebut dengan equality operator.
Tulis kode program di bawah ini, lalu perhatikan keluaran yang Anda dapatkan.
Console.WriteLine("str5 == str6 ? {0}", str5 == str6);
Console.WriteLine("str5 == Halo! ? {0}", str5 == "Halo!");
Console.WriteLine("str5 == HALO! ? {0}", str5 == "HALO!");
Console.WriteLine("str5 == halo! ? {0}", str5 == "halo!");
Equality operator akan menghasilkan nilai boolean true
apabila operand di sebalah kiri operator identik dengan operand di sebelah kanan operator. Begitu pula sebaliknya , akan menghasilkan nilai boolean false
apabila keduanya tidak identik.
Setelah memperhatikan keluaran yang Anda dapatkan, apa kesimpulan yang bisa Anda ambil?
Inequality Operator
Jika equality operator menghasilkan nilai boolean true
untuk kondisi di mana kedua string adalah identik, maka sebaliknya inequality operator menghasilkan nilai boolean true
untuk kondisi di mana kedua string tidak identik.
Inequality operator menggunakan notasi tanda seru dan tanda sama dengan (!=).
Ganti notasi equality operator pada kode program sebelumnya dengan notasi inequality operator. Jalankan program Anda, lalu perhatikan keluaran yang Anda dapatkan.
Operasi Equals()
Tipe string
memiliki operasi bawaan untuk membandingkan sebuah string dengan string yang lain, yaitu operasi Equals()
. Kita bisa menggunakan operasi Equals()
dengan sebuah variabel dengan tipe data string seperti berikut ini,
Console.WriteLine("str5.Equals(str6) ? {0}", str5.Equals(str6));
atau dengan nilai string itu sendiri seperti berikut ini,
Console.WriteLine("Hai.Equals(str6) ? {0}", "Hai!".Equals(str6));
Mengenal Culture-sensitive
Membandingkan dua buah string baik dengan equality maupun inequality operator dilakukan dengan cara membandingkan karakter demi karakter dengan memperhatikan kapitalisasi tiap karakter. Di C#, dua karakter yang sama dengan kapitalisasi berbeda dianggap sebagai dua karakter yang tidak identik. Hal ini biasa disebut dengan case-sensitive.
Selain memperhatikan kapitalisasi dari tiap karakter, operasi perbandingan string di C# juga memperhatikan pengaturan wilayah dan bahasa (culture) di mana aplikasi tersebut dijalankan.
Konsekuensinya, pembandingan dua buah string pada sebuah aplikasi bisa saja menghasilkan keluaran yang berbeda ketika dijalankan di sistem operasi dengan kultur U.S. English (en-US) dengan ketika dijalankan di sistem operasi dengan kultur Sami, Swedia Utara (se-SE). Hal ini biasa disebut dengan culture-sensitive.
Contohnya, dengan kultur en-US, “encyclopædia” dan “encyclopaedia” dianggap dua buah string yang identik. Namun tidak demikian untuk kultur se-SE. Kedua string tersebut dianggap tidak identik pada kultur se-SE.
Untuk menambah pemahaman Anda tentang culture-sensitive, tambahkan kode program di bawah ini.
string str7 = "encyclopædia";
string str8 = "encyclopaedia";
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
Console.WriteLine("Current Culture: {0}", CultureInfo.CurrentCulture.Name);
Console.WriteLine("str7.Equals(str8) ? (CurrentCulture): {0}", str7.Equals(str8, StringComparison.CurrentCulture));
Console.WriteLine("str7.Equals(str8) ? (CurrentCultureIgnoreCase): {0}", str7.Equals(str8, StringComparison.CurrentCultureIgnoreCase));
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("se-NO");
Console.WriteLine("Current Culture: {0}", CultureInfo.CurrentCulture.Name);
Console.WriteLine("str7.Equals(str8) ? (CurrentCulture): {0}", str7.Equals(str8, StringComparison.CurrentCulture));
Console.WriteLine("str7.Equals(str8) ? (CurrentCultureIgnoreCase): {0}", str7.Equals(str8, StringComparison.CurrentCultureIgnoreCase));
Setelah itu, sertakan dua namespace di bawah ini.
using System.Threading;
using System.Globalization;
Namespace System.Threading
kita butuhkan agar bisa menggunakan class Thread
. Sedangkan namespace System.Globalization
kita butuhkan agar bisa menggunakan class CultureInfo
.
Anda tidak perlu bingung tentang apa itu thread karena materi tentang thread sendiri akan kita pelajari bersama pada materi tingkat advance. Thread sendiri sederhananya berfungsi untuk mengeksekusi kode program pada sebuah aplikasi.
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
Baris kode program di atas menetapkan en-US sebagai kultur secara spesifik hanya pada thread yang sedang mengeksekusi aplikasi Anda.
str7.Equals(str8, StringComparison.CurrentCulture)
Baris kode program di atas mengecek apakah variabel str7
dan str8
menyimpan dua buah string yang identik secara kapitalisasi maupun secara kultur atau tidak.
str7.Equals(str8, StringComparison.CurrentCultureIgnoreCase)
Baris kode program di atas melakukan hal yang sama dengan baris kode program sebelumnya, kecuali kali ini pengecekan terhadap kapitalisasi tiap karakter akan diabaikan.
Topik mengenai penggunaan bahasa spesifik pada sebuah aplikasi merupakan topik yang cukup luas dan di luar lingkup materi kita kali ini. Tujuan saya hanya ingin mengenalkan konsep ini kepada Anda.
Penggunaan kultur pada sebuah aplikasi akan berpengaruh ketika misalnya Anda melakukan perbandingan string untuk mengurutkan suatu daftar string (sorting). Hasilnya akan sedikit berbeda untuk masing-masing bahasa, terutama jika sebuah bahasa juga memiliki karakter di luar karakter alfabet.
Immutable dan Mutable String
Perhatikan kode program di bawah ini. Kira-kira, tanpa menjalankannya, apa keluaran yang dihasilkan?
// string nama = "mahirkoding.id";
Console.WriteLine("Nilai variabel nama setelah ditukar: {0}", nama.Replace("id", "net"));
Console.WriteLine("Nilai variabel nama setelah memanggil method Replace(): {0}", nama);
Sekarang, tambahkan dan jalankan kode program di atas. Apabila Anda mendapatkan hasil yang berbeda untuk kedua baris kode program di atas, ya memang semestinya begitu.
Mungkin yang jadi pertanyaan Anda, di baris pertama, teks “id” sudah diganti dengan teks “net”, lalu mengapa ketika variabel nama
kembali ditampilkan setelahnya, nilainya tidak berubah? Hal itu dikarenakan, tipe string
bersifat immutable atau dengan kata lain tidak bisa diubah. Sekali kita menetapkan nilai pada sebuah variabel dengan tipe data string, nilai dari variabel tersebut tidak akan berubah meskipun telah dimanipulasi sekalipun.
Ketika memanipulasi sebuah string, sebenarnya yang dimanipulasi adalah salinan dari variabel tersebut. Jadi, yang ditampilkan oleh hasil manipulasi operasi nama.Replace("id","net")
adalah salinan dari variabel nama
. Sedangkan nilai dari variabel nama
sendiri tidak berubah, yaitu tetap “mahirkoding.id”. Oleh karena itu, mekipun telah dimanipulasi, kita tetap akan mendapatkan teks asli dari variabel nama
.
Sebenarnya Immutable string merupakan hal yang bagus, namun terkadang kita perlu memanipulasi sebuah string tanpa harus menyalinnya terlebih dahulu. Oleh karena itu, kita membutuhkan string yang bisa diubah nilainya (mutable string).
Beruntung, C# menyediakan tipe data (class) yang memungkinkan sebuah nilai string diubah, yaitu StringBuilder
. Agar kita bisa menggunakan Tipe StringBuilder
, terlebih dahulu kita perlu mengimpor atau menyertakan namespace System.Text
ke dalam program kita.
Setelah mengimpor namespace yang diperlukan, Anda bisa menambahkan kode program di bawah ini ke dalam program Anda.
StringBuilder sb1 = new StringBuilder("Ini adalah sebuah string");
sb1.Append(" baru");
sb1.Append("\n");
sb1.AppendLine("String baru");
sb1.AppendLine("String ini ada pada baris baru");
Console.WriteLine(sb1.ToString());
sb1.Remove(24, 5);
Console.WriteLine(sb1.ToString());
sb1.Replace("baru", "terbaru");
Console.WriteLine(sb1.ToString());
sb1.Insert(0, "Hai, ");
Console.WriteLine(sb1.ToString());
Perhatikan bahwa kali ini, Anda selalu menampilkan variabel yang sama (sb1
) setiap kali selesai melakukan manipulasi terhadap variabel tersebut.
Jalankan kode program di atas, perhatikan apakah nilai dari sb1
selalu berubah tiap kali dimanipulasi atau selalu menampilkan nilai awalnya, yaitu “Ini adalah sebuah string”?
Interpolasi String
Sampai saat ini, kita menggunakan sebuah angka di dalam tanda kurung kurawal untuk menyisipkan nilai variabel ke dalam sebuah teks seperti di bawah ini.
Console.WriteLine("varStr = {0}", varStr);
Notasi {0} merupakan placeholder di mana sebuah variabel nantinya disisipkan ke dalam sebuah teks. Angka 0 pada kode program di atas merupakan indeks dari argumen varStr
. Apabila kita memberi lebih dari satu argumen, urutannya menjadi 0,1,2…
Console.WriteLine("Halo {0} dari departemen {1}!", namaPengguna, namaDepartemen);
Selain itu, kita tidak perlu meletakkan beberapa placeholder di dalam sebuah teks secara berurutan. Kode program di bawah ini tetap valid.
Console.WriteLine("Departemen: {1}, Nama: {0}", namaPengguna, namaDepartemen);
Terakhir, kita bisa menggunakan beberapa placeholder dengan indeks yang sama di dalam sebuah teks seperti berikut ini.
Console.WriteLine("Halo {0}, Halo {0}, Halo {0}!", namaPengguna);
Selain menggunakan interpolasi placeholder seperti pada contoh-contoh di atas, di C# Anda bisa menggunakan apa yang disebut dengan interpolasi variabel. Dengan interpolasi variabel, Anda bisa langsung menyisipkan sebuah variabel ke dalam sebuah teks tanpa menggunakan placeholder.
Tambahkan kode program di bawah ini ke program Anda, jalankan, lalu perhatikan keluaran yang Anda dapatkan.
string namaPanggilan = "Joko";
int umur = 17;
Console.WriteLine($"Halo! nama panggilan saya {namaPanggilan}, umur saya {umur} tahun");
Pada kode program di atas, kita menyisipkan variabel bertipe data string
, yaitu namaPanggilan
, dan variable bertipe data int
, yaitu umur
, langsung ke dalam sebuah teks menggunakan tanda kurung kurawal.
Penutup
Pada materi kali ini, kita telah mempelajari tentang bagaimana bekerja dengan tipe data string di C#.
Untuk memanipulasi sebuah string, kita bisa menggunakan berbagai operasi bawaan dari tipe string seperti ToUpper()
, ToLower()
, Contains()
, Remove()
, dan lain-lain.
Untuk menggabungkan beberapa string menjadi satu buah string, kita bisa menggunakan operator + atau secara eksplisit menggunakan operasi Concat()
.
Agar kita bisa menggunakan beberapa karakter yang telah digunakan oleh C# sebagai bagian dari sintaksnya, seperti (” “), (‘ ‘), dan ( \ ), kita bisa menggunakan karakter escape ( \ ) di depan karakter-karakter tersebut.
C# juga menyediakan konstruksi sintaks bernama verbatim string yang memungkinkan kita menyimpan sebuah teks yang ditulis apa adanya.
Untuk membandingkan dua buah string, kita bisa menggunakan notasi == dan != serta operasi Equals()
.
Karena nilai string sebenarnya tidak bisa berubah, maka C# menyediakan sebuah tipe yang memungkinkan nilainya untuk diubah, yaitu StringBuilder
. Untuk menggunakan tipe StringBuilder
, kita diharuskan mengimpornya terlebih dahulu dari namespace System.Text
.
Terakhir, kita mempelajari tentang interpolasi string, yaitu sebuah konstruksi sintaks yang memungkinkan sebuah atau beberapa variabel disisipkan ke dalam sebuah teks tanpa harus melakukan operasi penggabungan string.
Itu saja meteri kita kali ini. Jika Anda merasa kesulitan dalam memahami materi ini, jangan menyerah! Tulis kesulitan atau pertanyaan Anda di kolom komentar, saya akan membantu.
Selamat belajar!
Materinya lengkap banget. Thanks Kak Dian