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";}