Fsharp-records
提供:Dev Guides
F#-レコード
- レコード*はタプルに似ていますが、名前付きフィールドが含まれています。 例えば、
type website =
{ title : string;
url : string }
レコードの定義
レコードは type キーワードを使用してタイプとして定義され、レコードのフィールドはセミコロンで区切られたリストとして定義されます。
レコードを定義するための構文は-
type recordName =
{ [ fieldName : dataType ] + }
レコードを作成する
レコードのフィールドを指定して、レコードを作成できます。 たとえば、_homepage_という名前の_website_レコードを作成します-
let homepage = { Title = "finddevguides"; Url = "www.finddevguides.com" }
次の例では、概念を説明します-
例1
このプログラムは、websiteという名前のレコードタイプを定義します。 次に、Webサイトタイプのレコードを作成し、そのレコードを印刷します。
( *defining a record type named website* )
type website =
{ Title : string;
Url : string }
( *creating some records* )
let homepage = { Title = "finddevguides"; Url = "www.finddevguides.com" }
let cpage = { Title = "Learn C"; Url = "www.finddevguides.com/cprogramming/index" }
let fsharppage = { Title = "Learn F#"; Url = "www.finddevguides.com/fsharp/index" }
let csharppage = { Title = "Learn C#"; Url = "www.finddevguides.com/csharp/index" }
(*printing records *)
(printfn "Home Page: Title: %A \n \t URL: %A") homepage.Title homepage.Url
(printfn "C Page: Title: %A \n \t URL: %A") cpage.Title cpage.Url
(printfn "F# Page: Title: %A \n \t URL: %A") fsharppage.Title fsharppage.Url
(printfn "C# Page: Title: %A \n \t URL: %A") csharppage.Title csharppage.Url
あなたがプログラムをコンパイルして実行すると、次の出力が得られます-
Home Page: Title: "finddevguides"
URL: "www.finddevguides.com"
C Page: Title: "Learn C"
URL: "www.finddevguides.com/cprogramming/index"
F# Page: Title: "Learn F#"
URL: "www.finddevguides.com/fsharp/index"
C# Page: Title: "Learn C#"
URL: "www.finddevguides.com/csharp/index"
例2
type student =
{ Name : string;
ID : int;
RegistrationText : string;
IsRegistered : bool }
let getStudent name id =
{ Name = name; ID = id; RegistrationText = null; IsRegistered = false }
let registerStudent st =
{ st with
RegistrationText = "Registered";
IsRegistered = true }
let printStudent msg st =
printfn "%s: %A" msg st
let main() =
let preRegisteredStudent = getStudent "Zara" 10
let postRegisteredStudent = registerStudent preRegisteredStudent
printStudent "Before Registration: " preRegisteredStudent
printStudent "After Registration: " postRegisteredStudent
main()
あなたがプログラムをコンパイルして実行すると、次の出力が得られます-
Before Registration: : {Name = "Zara";
ID = 10;
RegistrationText = null;
IsRegistered = false;}
After Registration: : {Name = "Zara";
ID = 10;
RegistrationText = "Registered";
IsRegistered = true;}