F # 7: Catatan

Jadi, kami melanjutkan perjalanan kami ke lebih banyak tipe F #. Kali ini kita akan melihat jenis-jenis Catatan.

Bagaimana cara membuat posting


Saat Anda membuat entri F # baru, ia dapat mengingatkan Anda tentang objek anonim di C #. Ini adalah bagaimana Anda membuatnya. Saya pikir mereka sangat mirip dengan objek anonim di C #, jadi jika Anda menggunakan C #, entri F # seharusnya tidak rumit.

Semuanya dimulai dengan membuat tipe baru untuk rekaman. Definisi jenis mencantumkan nama properti, serta jenis properti, seperti yang dapat dilihat di bawah ini.

Jika Anda memiliki definisi tipe catatan, Anda bisa mengaitkan instance baru dengan nilai menggunakan Let. Sekali lagi, contohnya dapat dilihat di bawah ini, di mana kami mengikat catatan baru menggunakan Biarkan mengikat, dan kami juga mencetak properti-properti dari catatan rekaman ke output konsol.

type Person = { Age : int; Sex: string; Name:string; } .... .... .... .... let sam = { Age = 12; Sex="Male"; Name ="Sam" } printfn "let sam = { Age = 12; Sex=\"Male\"; Name=\"Sam\" }" printfn "Person with Age is %i and Sex is %s and Name is %s" sam.Age sam.Sex sam.Name 

gambar

Bagaimana saya bisa mengubah / mengkloning catatan


Anda dapat mengkloning dan memodifikasi entri, yang biasanya dilakukan sebagai berikut:

 let sam = { Age = 12; Sex="Male"; Name ="Sam" } let tom = { sam with Name="Tom" } printfn "let tom = { sam with Name=\"Tom\" }" printfn "Person with Age is %i and Sex is %s and Name is %s" tom.Age tom.Sex tom.Name 

gambar

Perhatikan bagaimana kami menggunakan kata kunci with saat membuat instance Tom Person baru. Bentuk ekspresi rekaman ini disebut " salin dan perbarui ekspresi rekaman ". Opsi lain yang dapat Anda gunakan (sekali lagi, kami akan membicarakan hal ini secara lebih rinci di posting berikutnya) adalah menggunakan properti yang bisa berubah-ubah dalam jenis posting Anda. Entri tidak dapat diubah secara default; namun, Anda juga dapat secara eksplisit menentukan bidang yang dapat diubah.

Berikut ini sebuah contoh, perhatikan bagaimana saya membuat tipe baru yang memiliki properti yang bisa berubah yang disebut MutableName. Dengan mendefinisikan bidang yang bisa berubah, saya diizinkan untuk memperbarui nilai properti MutableName dari catatan, yang dapat Anda lakukan dengan menggunakan operator "<-". Yang hanya memungkinkan Anda untuk menetapkan nilai baru.

 type MutableNamePerson = { Age : int; Sex: string; mutable MutableName:string; } .... .... .... .... //create let sam = { Age = 12; Sex="Male"; MutableName ="Sam" } printfn "let sam = { Age = 12; Sex=\"Male\"; Name=\"Sam\" }" printfn "Person with Age is %i and Sex is %s and Name is %s" sam.Age sam.Sex sam.MutableName //update sam.MutableName <- "Name changed" printfn "sam.MutableName <- \"Name changed\"" printfn "Person with Age is %i and Sex is %s and Name is %s" sam.Age sam.Sex sam.MutableName 

gambar

Perbandingan Catatan


Jenis rekaman sama hanya jika SEMUA properti dianggap sama. Berikut ini sebuah contoh:

 type Person = { Age : int; Sex: string; Name:string; } .... .... .... .... let someFunction p1 p2 = printfn "p1=%A, and p2=%A, are they equal %b" p1 p2 (p1=p2) let sam = { Age = 12; Sex = "Male"; Name = "Sam" } let john = { Age = 12; Sex = "Male"; Name = "John" } let april = { Age = 35; Sex = "Female"; Name = "April" } let sam2 = { Age = 12; Sex = "Male"; Name = "Sam" } do someFunction sam john do someFunction sam april do someFunction sam sam2 

gambar

Catat Pola Perbandingan


Tentu saja, Anda dapat menggunakan pencocokan pola (diskusi hari berikutnya), yang merupakan metode F # utama, untuk mencocokkan jenis rekaman. Berikut ini sebuah contoh:

 type Person = { Age : int; Sex: string; Name:string; } ..... ..... ..... ..... let someFunction (somePerson :Person) = match somePerson with | { Name="Sam" } -> printfn "Sam is in the house" | _ -> printfn "you aint Sam, get outta here clown" let sam = { Age = 12; Sex="Male"; Name ="Sam" } let john = { Age = 12; Sex="Male"; Name ="John" } do someFunction sam do someFunction john 

gambar

Metode dan Properti


Dimungkinkan juga untuk menambahkan anggota tambahan ke entri. Berikut adalah contoh di mana kami menambahkan properti "Detail" untuk memungkinkan kami mendapatkan informasi lengkap tentang catatan menggunakan satu properti (sebanyak yang dapat kami capai dengan menimpa metode ToString (), tetapi lebih pada metode OOP nanti)

Harap dicatat bahwa jika Anda mencoba menambahkan item ke definisi tipe perekaman, seperti yang ditunjukkan pada tangkapan layar, Anda akan mendapatkan kesalahan aneh

gambar

Ini mudah untuk dipecahkan dengan hanya menempatkan definisi properti rekaman pada baris baru, dan memastikan bahwa elemen tersebut juga dimulai pada baris baru, dan mengamati lekukan ini (spasi), karena semua ini penting dalam F #:

 type Person = { Age : int; Sex: string; Name:string; } member this.Details = this.Age.ToString() + " " + this.Sex.ToString() + " " + this.Name .... .... .... .... let sam = { Age = 12; Sex = "Male"; Name = "Sam" } printfn "sam Details=%s" sam.Details 

gambar

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


All Articles