SPECTRALANG_

// DOCS NAVIGATION

Records_

SOURCE: content/docs/reference/03-tipos-compostos.md03 Tipos Compostos / 4. Records

Declaração / Declaration

PT-BR:
Records são tipos de dados com campos nomeados e tipados. São declarados no nível superior do módulo.

EN-US:
Records are data types with named, typed fields. They are declared at the module top-level.

module structs

// Record simples / Simple record
record Ponto {
    x: int,
    y: int
}

// Record com vários tipos / Record with multiple types
record Pessoa {
    nome: string,
    idade: int,
    altura: float,
    ativo: bool
}

// Record aninhado / Nested record
record Retangulo {
    canto_superior_esquerdo: Ponto,
    largura: int,
    altura: int
}

Instanciação / Instantiation

public func main() {
    // Instanciação de record / Record instantiation
    let p = Ponto { x: 10, y: 20 }
    let x = 5
    let y = 8
    let p2 = Ponto { x, y }
 // shorthand: x == x: x, y == y: y
    let pessoa = Pessoa {
        nome: "Alice",
        idade: 30,
        altura: 1.65,
        ativo: true
    }

    // Record aninhado / Nested record
    let rect = Retangulo {
        canto_superior_esquerdo: Ponto { x: 0, y: 0 },
        largura: 100,
        altura: 50
    }
}

Acesso a Campos / Field Access

let p = Ponto { x: 10, y: 20 }

let coord_x = p.x
    // 10
let coord_y = p.y
    // 20

// Acesso aninhado / Nested access
let rect = Retangulo {
    canto_superior_esquerdo: Ponto { x: 5, y: 10 },
    largura: 200,
    altura: 100
}

let x_do_canto = rect.canto_superior_esquerdo.x
    // 5
let area = rect.largura * rect.altura
              // 20000

Structs Genéricas / Generic Structs

PT-BR:
Structs podem ter parâmetros de tipo genéricos, tornando-as reutilizáveis para diferentes tipos de dados.

EN-US:
Structs can have generic type parameters, making them reusable for different data types.

record Par<T> {
    primeiro: T,
    segundo: T
}

record Mapa<K, V> {
    chave: K,
    valor: V
}

public func main() {
    let par_int = Par { primeiro: 1, segundo: 2 }
    let par_str = Par { primeiro: "a", segundo: "b" }

    let mapa = Mapa { chave: "nome", valor: "Alice" }
}