F # - Estruturas

Uma estrutura em F # é um tipo de dados de tipo de valor. Ajuda você a criar uma única variável, manter dados relacionados de vários tipos de dados. ostruct palavra-chave é usada para criar uma estrutura.

Sintaxe

A sintaxe para definir uma estrutura é a seguinte -

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

Existem duas sintaxes. A primeira sintaxe é mais usada, porque, se você usar ostruct e end palavras-chave, você pode omitir o StructAttribute atributo.

Os elementos de definição de estrutura fornecem -

  • Declarações e definições dos membros.
  • Construtores e campos mutáveis ​​e imutáveis.
  • Membros e implementações de interface.

Ao contrário das classes, as estruturas não podem ser herdadas e não podem conter let ou do bindings. Desde então, as estruturas não têm ligações let; você deve declarar campos em estruturas usando oval palavra-chave.

Quando você define um campo e seu tipo usando valpalavra-chave, você não pode inicializar o valor do campo, em vez disso, eles são inicializados para zero ou nulo. Portanto, para uma estrutura com um construtor implícito, oval declarações sejam anotadas com o DefaultValue atributo.

Exemplo

O programa a seguir cria uma estrutura de linha junto com um construtor. O programa calcula o comprimento de uma linha usando a estrutura -

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

Quando você compila e executa o programa, ele produz a seguinte saída -

Length of the Line: 5