Tuplas
Aprendemos sobre arrays no módulo básico, agora iremos falar sobre as tuplas.
Tuplas é uma "coleção" de dados de tipos diferentes, em uma tupla podemos ter um u8
, uma String
, um char
... Todos juntos, sua declaração é feita da seguinte maneira let tuple: (tipo1, tipo2, tipo3...) = (valor1, valor2, valor3...)
.
fn main() { let tuple: (u8, i32, String, char) = (10, 25, String::from("Rust4noobs"), 'a'); println!("{:?}", tuple); }
E agora, ainda utilizando o exemplo acima, como eu faço para acessar o valor i32
da tupla? Ou seja, o segundo item. Assim como no array começamos a contagem por 0
nas tuplas também fazemos isso, porém ao invés de utilizarmos os colchetes para acessar, utilizamos o .0
fn main() { //0, 1, , 2 , 3 let tuple: (u8, i32, String, char) = (10, 25, String::from("Rust4Noobs"), 'a'); println!("Valor i32: {}", tuple.1); }
Acessamos o valor i32 e escrevemos ele na saída principal.
Na parte sobre ownership utilizamos da estratégia de retornar o que foi passado por parâmetro para não perdemos a posse de memória da variável, podemos fazer isso com tuplas também.
fn main() { let texto1 = String::from("Rust"); let texto2 = String::from("4Noobs"); let (mut devolve1, mut devolve2) = printa_duas_strings(texto1, texto2); devolve1.push_str(" qualquercoisasópraterexemplo"); devolve2.push_str(" sérionaotiveideianenhuma"); println!("{}", devolve1); println!("{}", devolve2); } fn printa_duas_strings(texto1: String, texto2: String) -> (String, String) { println!("{}", texto1); println!("{}", texto2); (texto1, texto2) }
Conseguimos utilizar a mesma estratégia de retornar os parâmetros para não perder o ownership com uma tupla.