F # 3: Pemformatan Teks

Saat bekerja dengan bahasa apa pun, kemungkinan besar Anda perlu memformat teks, dan F # tidak berbeda.

Karena F # adalah bahasa .NET, kami selalu dapat menggunakan Console.WriteLine (..) dan String.Format (..), di mana kami dapat menggunakan pemformat biasa yang Anda gunakan dalam kode .NET biasa.

Namun, F # juga mendukung metode C yang lebih mirip sintaksis, yang tersedia dalam modul Core.Printf. Satu fungsi di dalamnya dapat digunakan alih-alih menggunakan Console.WriteLine (..) .NET class.

Fungsi setara F # yang harus digunakan untuk menulis ke keluaran standar adalah printfn, yang sebenarnya merupakan metode yang disukai ketika bekerja dengan pemformatan teks dalam F #.

Mengapa printfn lebih disukai daripada Console.WriteLine (..)?


Ada beberapa alasan mengapa printfn lebih disukai, beberapa alasan utama diberikan di bawah ini:

  • Pengecekan tipe statis. Ini berarti bahwa jika kita melewatkan nilai int di mana string diharapkan, kita akan diperingatkan tentang ini
  • Karena printfn adalah fungsi F # asli, ia berfungsi sama seperti fungsi F # lainnya.

Pertimbangkan cuplikan kode berikut

//   printfn "should be a decimal value %d" "cat" // printfn "should be a decimal value %d" 42 //  ,   Console.WriteLine("should be a decimal value {0}" , "cat") //     printfn "this only expected 1 arg of type decimal %d" 42 "dog" //    ,   Console.WriteLine("this only expected 1 arg of type decimal {0}" , 42, "dog") // ,   printfn "this only expected 2 args of type decimal %d and string %s" 42 "dog" 

Jika sekarang kita melihat tangkapan layar dari kode ini di Visual Studio IDE, kita benar-benar melihat bahwa garis yang kita harapkan gagal jelas ditampilkan sebagai salah:

gambar

Bagaimana cara menggunakan printfn?


Mungkin yang terbaik adalah mulai dengan melihat beberapa formatters standar yang tersedia untuk bekerja dengan nilai-nilai. Tabel MSDN berikut ini menunjukkan operator standar yang tersedia untuk Anda: msdn.microsoft.com/en-us/library/ee370560.aspx

Jadi bagaimana dengan membuat pemformatan yang bagus selain standar?


Jadi, sekarang kita melihat bagaimana menulis output terformat ke output standar (printfn melakukan ini), tetapi bagaimana jika kita ingin menggunakan baris yang diformat di tempat lain? Bagaimana jika kita ingin mengaitkan nilai string dengan string yang diformat indah yang kami buat menggunakan beberapa alat format di atas, atau bahkan ingin menulis ke StringBuilder atau TextWriter, apakah F # membuatnya mudah?

Ya, sebenarnya, Anda akan menemukan banyak fitur berguna lainnya dalam modul Core.Printf. Daftar lengkap pada saat penulisan ini adalah sebagai berikut:

Daftar
bprintf Cetak ke StringBuilder.
eprintf Mencetak output yang diformat ke stderr.
eprintfn Mencetak output yang diformat ke stderr dengan menambahkan baris baru.
failwithf Mencetak ke buffer string dan melempar pengecualian dengan hasil yang diberikan. Printer sekunder harus mengembalikan string.
fprintf Mencetak ke penulis teks.
fprintfn Mencetak ke penulis teks dengan menambahkan baris baru.
kbprintf Mirip dengan bprintf, tetapi ia memanggil fungsi yang ditentukan untuk menghasilkan hasilnya. Lihat kprintf.
kfprintf Mirip dengan fprintf, tetapi ia memanggil fungsi yang ditentukan untuk menghasilkan hasilnya. Lihat kprintf.
kprintf Suka printf, tetapi memanggil fungsi yang ditentukan untuk menghasilkan hasilnya. Misalnya, mereka memungkinkan pencetakan diatur ulang secara paksa setelah semua output dimasukkan ke dalam saluran, tetapi tidak sebelumnya.
kspintf Suka sprintf, tetapi memanggil fungsi yang ditentukan untuk menghasilkan hasilnya. Lihat kprintf.
printf Mencetak keluaran yang diformat ke keluaran standar.
printfn Mencetak output yang diformat ke output standar dengan menambahkan baris baru.
sprintf Mencetak ke string menggunakan buffer string internal, dan mengembalikan hasilnya sebagai string. Printer sekunder harus mengembalikan string.

Saya tidak akan membahas semua ini, tetapi saya akan mempertimbangkan yang paling umum:

bprintf


Mencetak ke StringBuilder.

 let builder = new StringBuilder(524288) Printf.bprintf builder "This will be a string line : %s\r\n" "cat" Printf.bprintf builder "This will be a bool line : %b\r\n" true Printf.bprintf builder "This will be a int line : %u\r\n" 42 Printf.bprintf builder "This will be a hex line : %X\r\n" 255 printfn "%s" (builder.ToString()) 

Ini akan memberikan output ini dalam aplikasi konsol F #

fprintf


Mencetak dalam penulis teks.

 use sw = new StreamWriter(@"c:\temp\fprintfFile.txt") fprintf sw "This is a string line %s\r\n" "cat" fprintf sw "This is a int line %i" 10 sw.Close() 

Ini akan menyebabkan file dibuat dalam temp

gambar

sprintf


 let result = Printf.sprintf "This will return a formatted string : %s\r\n" "cat" printfn "%s" result 

gambar

Source: https://habr.com/ru/post/id470037/


All Articles