Yapılar

Yapılar, alan ve değerlerden oluşan kullanıcı tanımlı koleksiyonlardır. Örneğin,

{
  Field_01: 5,
  Field_02: 3.14158,
  Field_03: [1.56, 3.27],
}

Bir yapı içindeki alan değerlerine erişmek için nokta (.) işlecini kullanın:

var MyStruct = {
  Field_01: 5,
  Field_02: 3.14158,
  Field_03: [1.56, 3.27],
}

var AlmostPi: number = MyStruct.Field_02

İpucu

Mürekkep oluşturma, bir yapının son alanında asılı virgülleri destekler.

Yapı değişmez değerleri

Mürekkep oluşturma, bir veya daha fazla alan bildiriminin virgülle ayrılmış listesini çevreleyen küme ayraçlarıyla yapı değişmez değerlerini belirtir. Her alan tanımı, iki nokta üst üste ile ayrılmış bir ad ve değer (ifade) içerir.

{
  Pi: Math.Pi,
  Radius: 50,
  Area: Math.Pi * (50 ** 2)
}

Yapı türleri

Yapı türleri oluşturma sırasında alan tanımlarıyla başlatılmalıdır, bu nedenle Mürekkep Oluşturma açık bir yapı türü adı sağlamaz. type Kullanıcı tanımlı yapı türünü bildirmek için anahtar sözcüğünü ve alan tanımları kümesini kullanın. Örneğin,

type SimState {
  # Ball X,Y position
  Ball_X: number<-12 .. 12>,
  Ball_Y: number<-12 .. 12>,

  # Ball X,Y velocity
  BallVelocity_X: number<-100 .. 100>,
  BallVelocity_Y: number<-100 .. 100>,
}

Ayrıca, daha esnek hale getirmek için sabitleri ve değişkenleri kullanarak alan kısıtlamaları tanımlayabilirsiniz. Örneğin:

type SimState {
  # Ball X,Y position
  Ball_X: number<-RadiusOfPlate .. RadiusOfPlate>,
  Ball_Y: number<-RadiusOfPlate .. RadiusOfPlate>,

  # Ball X,Y velocity
  BallVelocity_X: number<-MaxVelocity .. MaxVelocity>,
  BallVelocity_Y: number<-MaxVelocity .. MaxVelocity>,
}

Yapı türlerini genişletme

Var olan bir türe alan ekleyerek bir yapı türü tanımlamak için anahtar sözcüğünü extends kullanın:

type ObservableState {
    x: number,
    y: number,
}

# Make a type with fields x,y,z
type SimState extends ObservableState {
    z: number
}

Tür denkliği ve atama

Denk -lik

Yapı türü X , şu durumda yapı türüne Y eşdeğerdir:

  • ve Y arasındaki X tüm alan adları eşleşsin.
  • ve Y içindeki X alan adları aynı sırada tanımlanır.
  • ile arasında XY aynı adlı alanların türü eşdeğerdir.

Denklik örnekleri

Alanlar aynı sırada tanımlanmadığından , alan adları aynı olsa bile aşağıdaki türler eşdeğer değildir:

type SimState_01 {
MathConstant: number,
Radius: number,
Area: number<0 .. (Math.Pi * (50 ** 2))>
}
type SimState_02 {
Radius: number,
MathConstant: number,
Area: number<0 .. (Math.Pi * (50 ** 2))>
}

Ortak alanlar aynı türde olmadığından , alan adları aynı olsa bile aşağıdaki türler eşdeğer değildir:

type SimState_01 {
MathConstant: number,
Radius: string,
Area: number<0 .. (Math.Pi * (50 ** 2))>
}
type SimState_02 {
MathConstant: number,
Radius: number,
Area: number<0 .. (Math.Pi * (50 ** 2))>
}

Atama

Yapı türü X , şu durumda yapı türüne Y dönüştürülebilir:

  • Y içinde Xbulunan tüm alanları içerir.
  • Aynı adlı tüm alanların türleri atanabilir.

Örneğin, aşağıdaki türler göz önünde bulundurulduğunda:

type Polygon = { Sides: Number.UInt8<1 .. 8>, DisplayName: string, ShapeName: string }
type Square = { Sides: 4, DisplayName: string }

var Shape1: Polygon = { Sides:4, DisplayName:"Icon", ShapeName:"Square" }
var Shape2: Square = { Sides:4, DisplayName:"Icon"}

içindeki tüm bilgiler Shape2 içindeki alanlara Shape1atanabileceğinden aşağıdaki ifade geçerlidir:

Shape1 = Shape2

Ancak bu ifade, 'den Shape1 içine Shape2bilgi kopyalanırken bilgilerin (Shape1.ShapeName) kaybolmasından kaynaklanmaz:

Shape2 = Shape1