Tipos customizados

Em SkyL, você pode criar seus próprios tipos para representar coisas do mundo real de forma organizada e clara. Esses tipos são chamados de tipos customizados e funcionam como estruturas que agrupam vários dados relacionados.


Declarando um tipo customizado

Para criar um tipo customizado, use a palavra-chave type seguida do nome do tipo e as suas propriedades entre chaves. Por exemplo, um tipo Person com nome e idade:

#![allow(unused)]
fn main() {
type Person {
    name: str,
    age: int
}
}

Aqui, Person tem dois campos: name que é uma string, e age que é um número inteiro.


Criando instâncias

Para criar um valor desse tipo, você usa o nome do tipo como se fosse uma função, passando os valores dos campos na ordem correta:

let p = Person("Skyer", 20);

Agora p é uma pessoa com nome "Skyer" e idade 20.


Acessando os campos

Você pode acessar os dados dentro do seu tipo usando o ponto (.), assim como em outras linguagens:

println(p.name); // Saída: Skyer  
println(p.age);  // Saída: 20  
println(p);      // Saída: [Skyer, 20]

Imprimir o objeto inteiro mostra os valores entre colchetes.


Usando tipos customizados como parâmetros

Se você quiser passar esses tipos para funções, basta declarar o parâmetro com o tipo customizado esperado:

def is_adult(p: Person) -> bool {
    return p.age >= 18;
}

def main() -> void {
    let p = Person("Skyer", 20);

    if is_adult(p) {
        print(p.name);
        println(" é adulto.");
    } else {
        print(p.name);
        println(" não é adulto.");
    }
}

Funções internas (métodos) em tipos customizados

Você também pode definir funções que "pertencem" a um tipo customizado, chamadas de funções internas ou métodos. Para isso, use a palavra-chave internal e receba o objeto atual como self:

internal def is_adult(self: Person) -> bool {
    return self.age >= 18;
}

def main() -> void {
    let p = Person("Skyer", 20);

    if p.is_adult() {
        print(p.name);
        println(" é adulto.");
    } else {
        print(p.name);
        println(" não é adulto.");
    }
}

Recapitulando

  • Tipos customizados organizam dados relacionados em uma única estrutura.
  • Você cria instâncias usando o nome do tipo como função.
  • Campos são acessados com obj.campo.
  • Tipos customizados podem ser usados em parâmetros de funções.
  • Funções internas (internal) podem ser associadas a tipos para adicionar comportamento.

Com tipos customizados, você ganha mais controle e clareza para modelar o que seu programa precisa!

Vamos em frente e explorar ainda mais funcionalidades de SkyL!