Kursus Pemula .Net: Format String

Setelah artikel tentang penggabungan, kita telah melihat bahwa sangat penting untuk menggunakan StringBuilder demi kinerja. Di sini kita akan melihat bagaimana memformat sebuah string, sebuah kalimat, format ini sering digunakan.

Kenapa String Format?

Saya tidak akan mengatakan bahwa ini lebih efisien, sebaliknya string.Format() memerlukan beberapa milidetik lebih lama menurut sebuah tes sederhana dibandingkan dengan kalimat yang digabungkan:

string nom = "Dupont";
string prenom = "Julie";
string adresse = "Rue de l'étoile";
string numero = "10";
string codePostal = "75000";
string ville = "Paris";

//Saya menggunakan Stopwatch untuk mengukur waktu kode saya
Stopwatch s = new Stopwatch();
//Saya memulai Stopwatch
s.Restart();
for(int i=0; i < 100000; i++)
{
string monMessage = string.Format("Bonjour {0} {1}, je vous écris pour vous demander de m'envoyez mon colis à {2}, {3} - {4} {5}",
                                   nom, prenom, adresse, numero, codePostal, ville);
}
//Saya menghentikan Stopwatch
s.Stop();
//Saya menampilkan hasilnya
Console.WriteLine(String.Format("Temps: {0}", s.Elapsed));
s.Restart();
for(int i=0; i < 100000; i++)
{
string monMessage = "Bonjour " + nom + " " + prenom + ", je vous écris pour vous demander de m'envoyer mon colis à " +
                     adresse + ", " + numero + " - " + codePostal + " " + ville;
}
s.Stop();
Console.WriteLine(String.Format("Temps: {0}", s.Elapsed));

//Hasil:
//string.format -> Temps: 00:00:00.0378547
//penggabungan -> Temps: 00:00:00.0134245

Bagian kedua dari kode ini kurang terbaca dibandingkan dengan bagian pertama, apakah Anda memperhatikan bahwa kita menggunakan string.Format() alih-alih menggabungkan variabel (dengan +)?

string.Format() adalah kebiasaan baik yang harus diambil, ini jauh lebih terbaca, tetapi Anda akan melihat lebih lanjut bahwa kita dapat mengatur format keluaran dari string.

Seperti yang dapat kita lihat, cukup dengan menempatkan di antara kurung kurawal (atau tanda siku) {x} indeks dari nilai yang akan diganti, perhatian ini:

int i = 0;
int x = 100;
string.Format("Ma Valeur est {0}, par contre x est égale à {1}", i, x);

//Hasil:
//Ma Valeur est 0, par contre x est égale à 100

//Tidak sama dengan ini:

string.Format("Ma Valeur est {1}, par contre x est égale à {0}", i, x);
//Hasil:
//Ma Valeur est 100, par contre x est égale à 0

Dalam contoh di atas, pada baris kedua, indeks pertama adalah {1}, jadi tidak akan mengambil i, karena i berada di posisi nol (dan ya dalam komputer, kita selalu mulai dari nol dan bukan dari 1), posisi di {1} adalah x, sedangkan indeks {0} adalah nilai dari posisi nol yaitu i.

Apakah Anda mengerti?

Saya ringkas, kita harus menghindari penggabungan seperti ini:

string nom = "Dupont";
string prenom = "Julie";
string adresse = "Rue de l'étoile";
string numero = "10";
string codePostal = "75000";
string ville = "Paris";
string monMessage = "Bonjour " + nom + " " + prenom + ", je vous écris pour vous demander de m'envoyer mon colis à " +
                                      adresse + ", " + numero + " - " + codePostal + " " + ville;
Console.WriteLine(monMessage);

//Hasil:
//Bonjour Dupont Julie, je vous écris pour vous demander de m'envoyer mon colis à Rue de l'étoile, 10 - 75000 Paris

Tetapi lebih baik:

string nom = "Dupont";
string prenom = "Julie";
string adresse = "Rue de l'étoile";
string numero = "10";
string codePostal = "75000";
string ville = "Paris";
string monMessage = string.Format("Bonjour {0} {1}, je vous écris pour vous demander de m'envoyez mon colis à {2}, {3} - {4} {5}",
                                    nom, prenom, adresse, numero, codePostal, ville);
Console.WriteLine(monMessage);

//Hasil:
//Bonjour Dupont Julie, je vous écris pour vous demander de m'envoyer mon colis à Rue de l'étoile, 10 - 75000 Paris

Keuntungan lain

Di sini mulai menjadi lebih menarik, berkat string.Format(), kita dapat langsung memformat sebuah nilai, seperti ini:

int salaire = 1000;
int heureDeTravail = 16;
string monMessage = string.Format("Mon patron me paye {0:0.00}€ par mois pour {1:0#} h de travail par jour.", salaire, heureDeTravail);
Console.WriteLine(monMessage);
//Mon patron me paye 1000,00€ par mois pour 16 h de travail par jour.

heureDeTravail = 1;
monMessage = string.Format("Mon patron me paye {0:0####.00}€ par mois pour {1:0#} h de travail par jour.", salaire, heureDeTravail);
Console.WriteLine(monMessage);
//Mon patron me paye 01000,00€ par mois pour 01 h de travail par jour.

monMessage = string.Format("Nous sommes le {0}", DateTime.Now);
Console.WriteLine(monMessage);
//Nous sommes le 23-04-19 16:53:54

monMessage = string.Format("Nous sommes le {0:dd-MM-yyyy}", DateTime.Now);
Console.WriteLine(monMessage);
//Nous sommes le 23-04-2019

Seperti yang dapat kita lihat, kita dapat langsung memformat nilai sesuai keinginan kita, yang akan lebih lama saat melakukan penggabungan.

Keuntungan lain adalah ketika Anda mengambil sebuah kalimat dari basis data atau dari file sumber, tetapi kalimat ini harus selalu berisi nilai yang berbeda, Anda cukup memformatnya seperti ini:

//Di sini kita mengambil sebuah kalimat dari file sumber atau bahkan dari basis data
//tidak peduli dari mana kalimat itu berasal, ini hanya contoh
string.Format(resource.GetString("MaPhraseDansMonFichierDeRessource"), alamat, kodePos, kota);

//MaPhraseDansMonFichierDeRessource = "Saya tinggal di {0}, kode pos {1}, kota {2}"

Varian pendek

Ada versi yang bahkan lebih pendek dari string.Format() di C# 6 (Roslyn) mulai dari Visual Studio 2015 (Anda perlu menambahkan paket Microsoft.Net.Compilers untuk menggunakan fitur baru C#):

string pesanSaya = string.Format("Hari ini adalah {0:dd-MM-yyyy}", DateTime.Now);
Console.WriteLine(pesanSaya);
//Hasil: Hari ini adalah 23-04-2019

pesanSaya = $"Hari ini adalah {DateTime.Now:dd-MM-yyyy}";
Console.WriteLine(pesanSaya);
//Hasil: Hari ini adalah 23-04-2019

Baris ke-2 memperkenalkan string.Format() yang sedikit berbeda, kita mulai dengan tanda $ (dolar) dan kemudian indeks yang sebelumnya nol langsung diganti dan ditempatkan di antara kurung kurawal.

Spesifikator format Deskripsi Contoh Hasil
C atau c Mata uang string s = $"{2.5:C}";

string s = $"{-2.5:C}";
$2.50

($2.50)
D atau d Desimal string s = $"{25:D5}"; 00025
E atau e Eksponensial string s = $"{250000:E2}"; 2.50E+005
F atau f Titik tetap string s = $"{2.5:F2}";

string s = $"{2.5:F0}";
2.50

3
G atau g Umum string s = $"{2.5:G}"; 2.5
N atau n Numerik string s = $"{2500000:N}"; 2.500.000,00
P atau p Persentase string s = $"{0.25:P}"; 25,00%
R atau r Bolak-balik string s = $"{2.5:R}"; 2.5
X atau x Heksadesimal string s = $"{250:X}";

string s = $"{0xffff:X}";
FA

FFFF

Dan masih banyak lagi!

Untuk informasi lebih lanjut tentang string.Format(), berikut adalah dokumentasi di situs Microsoft: https://docs.microsoft.com/fr-FR/dotnet/api/system.string.format?redirectedfrom=MSDN&view=netframework-4.8#System_String_Format_System_String_System_Object_

Pada saat kompilasi, itu tidak mengubah apa pun, tanda dolar diubah menjadi string.Format(), ini hanya masalah kebiasaan, tetapi saya menemukan ini lebih mudah dibaca!

Aucun commentaire pour le moment.

Une erreur s'est produite. Cette application peut ne plus répondre jusqu'à ce qu'elle soit rechargée.Veuillez contacter l'auteur. Reload 🗙