سلام درود خدمت همراهان همیشگی سایت پی وی لرن . با آموزش زبان برنامه نویسی #F همراهتون هستیم. ما با استفاده از کلیدواژه mutable می توانیم داده های قابل تغییر تعریف نماییم .پس در این قسمت از آموزش به داده های قابل تغییر در #F و استفاده از داده های mutable در #F می پردازیم.
متغیرها در #F تغییری نمی کنند یا immutable هستند، یعنی هنگامی که متغیر به یک مقدار محدود می شود، نمی توان آن را تغییر داد. آن ها در واقع به عنوان خواص فقط خواندنی استاتیک کامپایل می شوند.
مثال زیر این موضوع را نشان می دهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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 |
هنگامی که برنامه را کامپایل و اجرا می کنید، پیام خطای زیر را نشان می دهد.
1 2 3 | Duplicate definition of value 'x' Duplicate definition of value 'Y' Duplicate definition of value 'Z' |
در بعضی موارد شما نیاز به تغییر مقادیر ذخیره شده در یک متغیر دارید. این مشخص می کند که می تواند مقدار یک متغیر اعلام شده و یا اختصاص داده شده را در بخش بعدی یک برنامه تغییر دهد، #F کلیدواژه mutable را فراهم می کند.
شما می توانید متغیرهای قابل تغییر را با استفاده از این کلمه کلیدی mutable اعلام کنید و آنها را تعیین کنید تا ارزش آن ها تغییر کنند.
کلیدواژه mutable اجازه می دهد تا شما مقادیر را در یک متغیر mutable اعلان کنید و اختصاص دهید.
شما می توانید مقادیر اولیه را به یک متغیر mutable با استفاده از کلید واژه let اختصاص دهید.
با این حال، برای اختصاص ارزش جدید بعدی به آن، شما باید از اپراتور <- استفاده کنید.
مثلا
1 2 | let mutable x = 10 x <- 15 |
مثال زیر این مفهوم را روشن می کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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 |
هنگامی که شما برنامه را کامپایل و اجرا می کنید، خروجی زیر را تولید می کند.
1 2 3 4 5 6 7 8 9 10 | 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 |
داده های متداول اغلب در پردازش داده ها مورد نیاز است، به ویژه با ساختار داده های record استفاده می شوند.
مثال زیر این را نشان می دهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | 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() When you compile and execute the program, it yields the following output − 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";} |
در این قسمت از آموزش به داده های قابل تغییر در #F و استفاده از داده های mutable در #F پرداختیم و
با استفاده از کلیدواژه mutable و let توانستیم داده های قابل تغییر تعریف نماییم .