F # - Structures

Une structure en F # est un type de données de type valeur. Il vous aide à créer une seule variable, contenant des données liées de différents types de données. lestruct Le mot-clé est utilisé pour créer une structure.

Syntaxe

La syntaxe pour définir une structure est la suivante -

[ attributes ]
type [accessibility-modifier] type-name =
   struct
      type-definition-elements
   end
// or
[ attributes ]
[<StructAttribute>]
type [accessibility-modifier] type-name =
   type-definition-elements

Il existe deux syntaxes. La première syntaxe est principalement utilisée, car si vous utilisez lestruct et end mots-clés, vous pouvez omettre StructAttribute attribut.

Les éléments de définition de structure fournissent -

  • Déclarations et définitions des membres.
  • Constructeurs et champs mutables et immuables.
  • Membres et implémentations d'interface.

Contrairement aux classes, les structures ne peuvent pas être héritées et ne peuvent pas contenir de liaisons let ou do. Depuis, les structures n'ont pas de liaisons let; vous devez déclarer les champs dans les structures en utilisant leval mot-clé.

Lorsque vous définissez un champ et son type à l'aide de valmot clé, vous ne pouvez pas initialiser la valeur du champ, à la place, ils sont initialisés à zéro ou à null. Donc, pour une structure ayant un constructeur implicite, leval les déclarations soient annotées avec le DefaultValue attribut.

Exemple

Le programme suivant crée une structure de ligne avec un constructeur. Le programme calcule la longueur d'une ligne en utilisant la structure -

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

Lorsque vous compilez et exécutez le programme, il produit la sortie suivante -

Length of the Line: 5