You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fnmain(){println!("sarsa");}//Convencion snake case sarasa_sarasa_pepe
comentario 1 linea: " // "
comentario > 1:" /* */ "Asignacion:" = "Igualdad:" == "Desigualdad:" != "Mayor:" > "Menor:" < "Mayor o igual:" >= "Menor o igual:" <= "Y:" && "O:" || "Negación:" ! "Verdadero:" true "Falso:" false "
booleano:" bool "
caracter:" char "Imprimir:" println!() "
------Variables --------
// Declaración de una variable mutable
let mut variable_mutable = 42;// Declaración de una variable inmutablelet variable_inmutable = 20;
------tipos de datos --------
-str:Es un tipo de cadena de caracteres inmutable y de longitud fija.
-String:Es un tipo de cadena de caracteres que es mutable y de longitud variable.let x:u32 = 5;// Variable entera inmutablelet y:f32 = 3.5;// Variable flotante inmutablelet z:String = "saasasra";// Variable de cadena inmutableconstPI:f64 = 3.14159;// Constante//let const //diferencia cuando quiero una variable inmutable en su ambito local y constante global inmutable
parseos
//parseosfnmain(){let a:u8 = 0;let b:i32 = a asi32;// casting entre númeroslet b_u8:u8 = b asu8;// casting de i32 a u8println!("b: {}", b);// b: 0println!("b_u8: {}", b_u8);// b_u8: 0// Convertir un número a una cadenalet numero = 5;let numero_str = numero.to_string();// convierte un número a una cadenaprintln!("Número como cadena: {}", numero_str);// Numero como cadena: 5}
comportamiento de los Strings
fnmain(){
-String:Es un tipo de cadena de caracteres que es mutable y de longitud variable.
let mut a:String = String::from("pepe");//mutableprintln!("{}", a);let casa:&str = " soy mutable";//inmutable
a+= casa;//le asigno a(String mutable), una referencia de una cadena inmutableprintln!("{}", a);println!("-------------------");
-str:Es un tipo de cadena de caracteres inmutable y de longitud fija.let mut b:&str = "moni";//referencia inmutableprintln!("{}", b);
b+= " soy mutable";//error! b es inmutable es una cadena fijaprintln!("{}", b)//error!}
pedir por teclado
//siempre lo que se pide se guarda como Stringuse std::io::stdin;fnmain(){println!("Ingrese su nombre: ");letmut nombre = String::new();stdin().read_line(&mut nombre).expect("Error al leer el nombre.");println!("Hola, {}!", nombre);}//parsear entrada String -> i32use std::io;fnmain(){println!("ingrese un número entero:");letmut input = String::new();
io::stdin().read_line(&mut input).expect("Fallo al leer la línea");let numero:i32 = input.trim().parse()//trim elimina los espacios en blanco al principio y al final de la cadena.expect("ingrese un número válido");println!("Número ingresado: {}", numero);}//Parseo de un número de punto flotante (f64) parsear entrada String -> f64use std::io;fnmain(){println!("ingrese un número de punto flotante:");letmut input = String::new();
io::stdin().read_line(&mut input).expect("Fallo al leer la línea");let numero:f64 = input.trim().parse().expect("ingrese un número válido");println!("Número ingresado: {}", numero);}//Parseo de un carácter (char)use std::io;fnmain(){println!("Por favor ingrese un carácter:");letmut input = String::new();
io::stdin().read_line(&mut input).expect("Fallo al leer la línea");let caracter:char = input.trim().chars().next().expect("Por favor ingrese un carácter válido");println!("Carácter ingresado: {}", caracter);}
Longitud
Con Signo
Sin Signo
Flotante +-
8-bit
i8
u8
16-bit
i16
u16
32-bit
i32
u32
f32
64-bit
i64
u64
f64
128-bit
i128
u128
Arquitectura Cpu 32-64
isize
usize
Estructuras de control
while contador < 5{Bloque de codigo
}for numero in0..5{Bloque de codigo
}if numero < 0{println!("El número es negativo");}elseif{
bloque de codigo
}
loop {//Bucle Loop (Bucle infinito): //tiene un version con tags, cuando anidas varios loops cual queres que termine "'lopardo: loop" y "break 'lopardo"println!("Contador: {}", contador);
contador += 1;if contador >= 5{break;// Termina el bucle cuando el contador es mayor o igual a 5}}//if con declaracion letlet num:i32 = 5;let condicion_booleana:bool = num > 0;let data:i32 = if condicion_booleana{20}else{0};println!("{}", data);//20//MATCHlet number = 10;match number {3 => println!("es tres o hace algo porque es 3"),7 => println!("es siete o hace algo porque es 7"),
other => println!("hace algo porque porque no es 3 ni 7"),//si no es el buscado hace esto}//con place holderlet number = 10;match number {3 => println!("es tres o hace algo porque es 3"),7 => println!("es siete o hace algo porque es 7"),
_ => println!("hace algo porque porque no es 3 ni 7"),//si no es el buscado hace esto//_ => (), //si no es el buscado no hace nada}
Estructuras de datos
fnmain(){//tuplaletmut tupla :(String,f32,u8) = (String::from("casa"),1.0,6);
tupla.0 = "cambio valor".to_string();println!("{}", tupla.0);println!("{:?}", tupla);// {:?}permite imprimir la tupla entera de forma debug (para estructuras datos compuestas)let(hola, flotante, entero) = tupla;// DESTRUCTURACION DE LA TUPLA ,ahora "hola" tiene "cambio valor" y cada variable tiene el valor de cada elemento de la tuplaprintln!("{:?}", tupla);//tiraria error porque ya no existe tupla//arrayletmut vector:[i32;5] = [1,2,3,4,5];//[tipo,cantidad] = [elementos]
vector[0] = 6;println!("{:?}", vector);//[6, 2, 3, 4, 5]}
Ownership y Borrowing
//Ownership: propiedad de un recurso, solo puede tener un dueño a la vez, "cada variable es dueña de su valor"/* "aparece el concepto con los tipos de datos compuestos, como las cadenas de texto y los vectores etc etc." 1. Cada valor en Rust tiene un dueño. 2. Solo puede haber un dueño a la vez. 3. Cuando el dueño queda fuera del alcance, el valor se eliminará.*/fnmain(){let s1 = 10;let s2 = s1;//s1 se copia en s2, porque es un tipo primitivoprintln!("{}", s1);// no pasa naty por ser primitivos}//para que aparesca el concepto de ownership, los tipos no tienen que implementar el trait Copyfnmain(){let s1 = String::from("hola");let s2 = s1;//s1 se mueve a s2, s1 ya no es valido.. s2 le roba el valor a s1 y ahora s2 es el dueño... ahora s1 = basuraprintln!("{}", s1);//error! s1 ya no es valido}//aca aparece el conceto de borrowingfnmain(){let s1 = String::from("hola");let s2 = &s1;//s2 es una referencia a s1, s2 no es dueño de s1, s2 es un prestamo de s1println!("{}", s1);//no pasa nada.. duracion del prestamo: alcance de s1 solo en el main}Tipos implementan el traitCopy:
● Todos los enteros
● Booleanos
● Punto flotante
● Char
● Tupla que solo tengan los tipos que implementan Copy
Ownership y borrowing: funciones
//no aplica por ser un tipo de dato q implementa el trait copyfnmain(){letmut dato1= 10;mi_funcion(dato1);println!("{}", dato1);}fnmi_funcion(mutdata:i32){
data+=1;println!("muestro data en la funcion: {}", data);}//Los enteros, si o si necesitan ser desreferenciados (se pasa una direccion de memoria)fnmain(){letmut dato1= 10;mi_funcion(&mut dato1);println!("{}", dato1);}fnmi_funcion(data:&muti32){*data+=1;println!("muestro data en la funcion: {}", data);}//aca si no le paso una referencia a la funcion, no va saber que es datafnmain(){let dato1= String::from(" Seminario de: ");mi_funcion(&dato1);println!("{}", dato1);}fnmi_funcion(data:&String){println!("muestro data en la funcion: {}", data);}
Tiempo de vida
fnmain(){let string1 = String::from("Seminario de:");let string2 = "Rust!!!";let result = mas_largo(string1.as_str(), string2);println!("El mas largo es:{}", result);}fnmas_largo<'a>(x:&'a str,y:&'a str) -> &'a str{//explicito lifetime generico 'a para x e y , para el retorno tambien 'a if x.len() > y.len(){
x
}else{
y
}}&i32 // una referencia&'a i32 // una referencia con explicito lifetime&'a mut i32 // una referencia mutable con explicito lifetime
Tiempo de vida
use rand::Rng;//importo biblioteca de numeros aleatoriosfnmain(){letmut rng = rand::thread_rng();// me da un generador de números aleatorioslet random_number:u32 = rng.gen_range(0..=1);//genero un numero aleatorio entre 0 y 1println!("Número aleatorio: {}", random_number);}