Funções internas: Superpoderes dos tipos ✨
Em SkyL, os tipos não são apenas caixinhas de valores — eles vêm cheios de superpoderes! 🦸♂️
Esses superpoderes são chamados de funções internas (ou métodos), e permitem que você use operações diretamente nos valores, como se estivesse conversando com eles.
Explorando funções internas em inteiros (int)
Vamos começar com os inteiros. Eles vêm com várias funções úteis! Por exemplo:
let x = -10;
println(x.abs()); // Saída: 10
// Também podemos aplicar diretamente no valor
println((-10).abs()); // Saída: 10
Aqui estão algumas funções disponíveis para inteiros:
- .abs() → valor absoluto
- .is_even() → retorna se o número é par
- .is_odd() → retorna se o número é ímpar
- .sign() → retorna o sinal (-1, 0, ou 1)
- .max(outro) → retorna o maior entre dois valores
- .min(outro) → retorna o menor entre dois valores
- .clamp(min, max) → limita o número a um intervalo
- .sqrt() → raiz quadrada
- .pow(exp) → potência
- .to_float() → converte para float
- .to_string() → converte para string
Exemplos:
let x = 7;
println(x.is_even()); // false
println(x.pow(2)); // 49
println(x.clamp(0, 5)); // 5
Funções internas em strings (str)
As strings também têm várias habilidades poderosas:
- .length() → tamanho da string
- .find(sub) → posição de uma substring
- .contains(sub) → verifica se uma substring está presente
- .sub_string(i,f) → fatia a string
- .to_upper() → tudo em maiúsculas
- .to_lower() → tudo em minúsculas
- .starts_with(sub) → começa com?
- .ends_with(sub) → termina com?
- .concat(outra) → junta com outra string
- .replace(alvo, novo) → substitui partes da string
Exemplo divertido:
let msg = "SkyL é legal";
if msg.contains("SkyL") {
println("Contém SkyL");
}
println(msg.to_upper()); // SKYL É LEGAL
Criando suas próprias funções internas!
Agora vem a parte mais mágica: você pode ensinar novos truques aos tipos existentes! 🔮
Basta usar a palavra-chave internal
, e o primeiro parâmetro será o próprio valor, com o nome self
.
Por exemplo, vamos criar uma função negate
para booleanos (bool):
internal def negate(self: bool) -> bool {
return not self;
}
Agora podemos usar assim:
let x = true;
println(x.negate()); // false
println(false.negate()); // true
Mesmo que já tenhamos o operador not
, é incrível poder adicionar comportamentos novos assim!
Resumo mágico 🪄
- Tipos em SkyL já vêm com várias funções úteis embutidas.
- Você pode chamar essas funções com a sintaxe
valor.função()
. - E melhor ainda: você pode adicionar novas funções a tipos existentes!
Isso torna a linguagem poderosa e expressiva, como se você pudesse conversar com seus valores.
E o melhor: é você quem escreve o vocabulário!
Continue explorando — quem sabe o que mais seus tipos vão aprender? 😄