Fsharp-structures
提供:Dev Guides
F#-構造
F#の構造体は、値型のデータ型です。 単一の変数を作成し、さまざまなデータ型の関連データを保持するのに役立ちます。 struct キーワードは、構造の作成に使用されます。
構文
構造を定義するための構文は次のとおりです-
[ attributes ]
type [accessibility-modifier] type-name =
struct
type-definition-elements
end
//or
[ attributes ]
[<StructAttribute>]
type [accessibility-modifier] type-name =
type-definition-elements
2つの構文があります。 struct および end キーワードを使用する場合、 StructAttribute 属性を省略できるため、最初の構文が主に使用されます。
構造定義要素が提供します-
- メンバーの宣言と定義。
- コンストラクター、可変および不変フィールド。 *メンバーとインターフェースの実装。
クラスとは異なり、構造体は継承できず、letまたはdoバインディングを含めることはできません。 構造体にはletバインディングがありません。* val *キーワードを使用して、構造体でフィールドを宣言する必要があります。
*val* キーワードを使用してフィールドとそのタイプを定義する場合、フィールド値を初期化することはできず、代わりにゼロまたはnullに初期化されます。 したがって、暗黙のコンストラクターを持つ構造体の場合、 *val* 宣言には *DefaultValue* 属性で注釈が付けられます。
例
次のプログラムは、コンストラクタとともにライン構造を作成します。 プログラムは、構造を使用して行の長さを計算します-
type Line = struct
val X1 : float
val Y1 : float
val X2 : float
val Y2 : float
new (x1, y1, x2, y2) =
{X1 = x1; Y1 = y1; X2 = x2; Y2 = y2;}
end
let calcLength(a : Line)=
let sqr a = a * a
sqrt(sqr(a.X1 - a.X2) + sqr(a.Y1 - a.Y2) )
let aLine = new Line(1.0, 1.0, 4.0, 5.0)
let length = calcLength aLine
printfn "Length of the Line: %g " length
あなたがプログラムをコンパイルして実行すると、次の出力が得られます-
Length of the Line: 5