String terinterpolasi

String terinterpolasi adalah string yang memungkinkan Anda untuk menyematkan ekspresi F# ke dalamnya. String tersebut sangat membantu dalam berbagai skenario yang nilai stringnya dapat berubah berdasarkan hasil nilai atau ekspresi.

Sintaks

$"string-text {expr}"
$"string-text %format-specifier{expr}"
$"""string-text {"embedded string literal"}"""
$$"""string-text %%format-specifier{{expr}}"""

Keterangan

String terinterpolasi memungkinkan Anda menulis kode di "lubang" di dalam string harfiah. Berikut ini contoh dasarnya:

let name = "Phillip"
let age = 30
printfn $"Name: {name}, Age: {age}"

printfn $"I think {3.0 + 0.14} is close to {System.Math.PI}!"

Isi di antara setiap pasangan kurung kurawal {} dapat berupa ekspresi F# apa pun.

Untuk menghindari pasangan kurung kurawal {}, tulis dua di antaranya seperti ini:

let str = $"A pair of braces: {{}}"
// "A pair of braces: {}"

String terinterpolasi yang diketik

String terinterpolasi juga dapat memiliki penentu format F# untuk memberlakukan keamanan jenis.

let name = "Phillip"
let age = 30

printfn $"Name: %s{name}, Age: %d{age}"

// Error: type mismatch
printfn $"Name: %s{age}, Age: %d{name}"

Pada contoh sebelumnya, kode salah meneruskan nilai age di mana name seharusnya, dan sebaliknya. Karena string terinterpolasi menggunakan penentu format, ini adalah kesalahan kompilasi sebagai ganti dari bug runtime kurang terlihat.

String terinterpolasi verbatim

F# mendukung string terinterpolasi verbatim dengan tanda kutip tiga sehingga Anda dapat menyematkan harfiah string.

let age = 30

printfn $"""Name: {"Phillip"}, Age: %d{age}"""

Penentu format

Penentu format dapat berupa gaya printf atau gaya .NET. Penentu gaya printf adalah penentu yang tercakup dalam pemformatan teks biasa, ditempatkan sebelum tanda kurung kurawal. Misalnya:

let pi = $"%0.3f{System.Math.PI}"  // "3.142"
let code = $"0x%08x{43962}"  // "0x0000abba"

Penentu format %A sangat berguna untuk menghasilkan output diagnostik dari data F# terstruktur.

let data = [0..4]
let output = $"The data is %A{data}"  // "The data is [0; 1; 2; 3; 4]"

Penentu gaya .NET adalah yang dapat digunakan dengan String.Format, ditempatkan setelah : di dalam kurung kurawal. Misalnya:

let pi = $"{System.Math.PI:N4}"  // "3.1416"
let now = $"{System.DateTime.UtcNow:``yyyyMMdd``}" // e.g. "20220210"

Jika penentu gaya .NET berisi karakter yang tidak biasa, maka karakter tersebut dapat dilewati menggunakan double-backticks:

let nowDashes = $"{System.DateTime.UtcNow:``yyyy-MM-dd``}" // e.g. "2022-02-10"

Meratakan ekspresi dalam string terinterpolasi

Anda dapat meratakan kiri atau meratakan kanan ekspresi di dalam string terinterpolasi dengan | dan spesifikasi berapa banyak spasi. String terinterpolasi berikut meratakan ekspresi kiri dan kanan ke kiri dan kanan, masing-masing, dengan tujuh spasi.

printfn $"""|{"Left",-7}|{"Right",7}|"""
// |Left   |  Right|

String terinterpolasi dan pemformatan FormattableString

Anda juga dapat menerapkan pemformatan yang mematuhi aturan untuk FormattableString:

let speedOfLight = 299792.458
printfn $"The speed of light is {speedOfLight:N3} km/s."
// "The speed of light is 299,792.458 km/s."

Selain itu, string terinterpolasi juga dapat diperiksa jenisnya sebagai FormattableString melalui anotasi jenis:

let frmtStr = $"The speed of light is {speedOfLight:N3} km/s." : FormattableString
// Type: FormattableString
// The speed of light is 299,792.458 km/s.

Perhatikan bahwa anotasi jenis harus pada ekspresi string terinterpolasi itu sendiri. F# tidak secara implisit mengonversi string terinterpolasi menjadi FormattableString.

Sintaks yang diperluas untuk interpolasi string

Dimulai dengan F# 8, ketika Anda bekerja dengan teks yang berisi beberapa {karakter , } atau % sudah, Anda dapat menggunakan sintaks interpolasi string yang diperluas untuk menghapus kebutuhan untuk melarikan diri.

Literal string kutipan tiga kali dapat dimulai dengan beberapa $ karakter, yang mengubah berapa banyak kurung kurawal yang diperlukan untuk membuka dan menutup interpolasi. Dalam literal string ini, { dan } karakter tidak perlu diloloskan:

let str = $$"""A string containing some {curly braces} and an {{"F#" + " " + "expression"}}."""
// "A string containing some {curly braces} and an F# expression."
let another = $$$"""A string with pairs of {{ and }} characters and {{{ "an F# expression" }}}."""
// "A string with pairs of {{ and }} characters and an F# expression."""

Jumlah karakter yang % diperlukan untuk penentu format dipengaruhi dengan cara yang sama:

let percent = $$"""50% of 20 is %%.1f{{20m * 0.5m}}"""
// "50% of 20 is 10.0"

Lihat juga