Localized V2 rewrite for this language is in progress. Showing English-first content for now.

Variáveis e Tipos

Bindings (let/var), anotações e os tipos embutidos principais.

Variáveis e Tipos

Sounio é estaticamente tipado, com inferência de tipos para a maioria dos bindings locais.

Declaração de Variáveis

Variáveis Imutáveis (let)

Por padrão, variáveis são imutáveis:

let x = 42          // Type inferred as i32
let name = "Alice"  // Type inferred as string
let pi = 3.14159    // Type inferred as f64

Variáveis Mutáveis (var)

Use var para variáveis mutáveis:

var counter = 0
counter = counter + 1  // OK

let fixed = 10
fixed = 20  // Error: cannot assign to immutable variable

Anotações de Tipo

Você pode anotar tipos explicitamente:

let x: i32 = 42
let ratio: f64 = 0.5
let flag: bool = true
let message: string = "Hello"

Tipos Primitivos

TipoDescriçãoExemplo
i8, i16, i32, i64Inteiros com sinallet x: i32 = -42
u8, u16, u32, u64Inteiros sem sinallet y: u32 = 42
f32, f64Ponto flutuantelet pi: f64 = 3.14
boolBooleanolet flag: bool = true
charCaractere Unicodelet c: char = 'A'
string / StringString de textolet s = "hello"
strFatia de string emprestadalet s: &str = "hello"

Tipos Compostos

Tuplas

let point = (10, 20)
let first = point.0  // 10
let second = point.1 // 20

Arrays

let numbers: [i32; 5] = [1, 2, 3, 4, 5]
let first = numbers[0]  // 1

Vetores (Vec<T>)

let items: Vec<i32> = [1, 2, 3, 4]
for x in items {
    // ...
}

Inferência de Tipos

Sounio infere tipos a partir do contexto:

let values = [1, 2, 3]  // Array literal
let vec_values: Vec<i32> = values

Nota da spec: unidades de medida parseiam (por exemplo, unit kg; unit g = 0.001 * kg; unit mg = 0.001 * g;), mas a checagem completa de unidades pode estar habilitada apenas em alguns modos/flags do compilador.

Tipos Epistêmicos (Knowledge<T>)

Para valores com incerteza:

let k = Knowledge { value: 42.0 }
let x: f64 = k.unwrap("accepted for demo")

Veja Knowledge Types para mais detalhes.

O que vem a seguir?