F # - Data yang Dapat Diubah
Variabel di F # adalah immutable,yang berarti sekali variabel terikat ke nilai, itu tidak dapat diubah. Mereka sebenarnya dikompilasi sebagai properti hanya baca statis.
Contoh berikut menunjukkan hal ini.
Contoh
let x = 10
let y = 20
let z = x + y
printfn "x: %i" x
printfn "y: %i" y
printfn "z: %i" z
let x = 15
let y = 20
let z = x + y
printfn "x: %i" x
printfn "y: %i" y
printfn "z: %i" z
Ketika Anda mengkompilasi dan menjalankan program, itu menunjukkan pesan kesalahan berikut -
Duplicate definition of value 'x'
Duplicate definition of value 'Y'
Duplicate definition of value 'Z'
Variabel yang Dapat Diubah
Terkadang Anda perlu mengubah nilai yang disimpan dalam variabel. Untuk menentukan bahwa mungkin ada perubahan dalam nilai variabel yang dideklarasikan dan ditugaskan di bagian program selanjutnya, F # menyediakanmutablekata kunci. Anda dapat mendeklarasikan dan menetapkan variabel yang bisa berubah menggunakan kata kunci ini, yang nilainya akan Anda ubah.
Itu mutable kata kunci memungkinkan Anda untuk mendeklarasikan dan menetapkan nilai dalam variabel yang bisa berubah.
Anda dapat menetapkan beberapa nilai awal ke variabel yang bisa berubah menggunakan letkata kunci. Namun, untuk menetapkan nilai baru berikutnya, Anda perlu menggunakan<- operator.
Sebagai contoh,
let mutable x = 10
x <- 15
Contoh berikut akan menghapus konsep -
Contoh
let mutable x = 10
let y = 20
let mutable z = x + y
printfn "Original Values:"
printfn "x: %i" x
printfn "y: %i" y
printfn "z: %i" z
printfn "Let us change the value of x"
printfn "Value of z will change too."
x <- 15
z <- x + y
printfn "New Values:"
printfn "x: %i" x
printfn "y: %i" y
printfn "z: %i" z
Ketika Anda mengkompilasi dan menjalankan program, itu menghasilkan output berikut -
Original Values:
x: 10
y: 20
z: 30
Let us change the value of x
Value of z will change too.
New Values:
x: 15
y: 20
z: 35
Penggunaan Data yang Dapat Diubah
Data yang dapat berubah seringkali dibutuhkan dan digunakan dalam pemrosesan data, terutama dengan struktur data record. Contoh berikut menunjukkan ini -
open System
type studentData =
{ ID : int;
mutable IsRegistered : bool;
mutable RegisteredText : string; }
let getStudent id =
{ ID = id;
IsRegistered = false;
RegisteredText = null; }
let registerStudents (students : studentData list) =
students |> List.iter(fun st ->
st.IsRegistered <- true
st.RegisteredText <- sprintf "Registered %s" (DateTime.Now.ToString("hh:mm:ss"))
Threading.Thread.Sleep(1000) (* Putting thread to sleep for 1 second to simulate processing overhead. *))
let printData (students : studentData list) =
students |> List.iter (fun x -> printfn "%A" x)
let main() =
let students = List.init 3 getStudent
printfn "Before Process:"
printData students
printfn "After process:"
registerStudents students
printData students
Console.ReadKey(true) |> ignore
main()
Ketika Anda mengkompilasi dan menjalankan program, itu menghasilkan output berikut -
Before Process:
{ID = 0;
IsRegistered = false;
RegisteredText = null;}
{ID = 1;
IsRegistered = false;
RegisteredText = null;}
{ID = 2;
IsRegistered = false;
RegisteredText = null;}
After process:
{ID = 0;
IsRegistered = true;
RegisteredText = "Registered 05:39:15";}
{ID = 1;
IsRegistered = true;
RegisteredText = "Registered 05:39:16";}
{ID = 2;
IsRegistered = true;
RegisteredText = "Registered 05:39:17";}