SLIDE 1
fn main() { println!("Hello, QConSP!"); println!(“My name is Elemar Júnior!"); println!(“falecom@elemarjr.co"); println!(“@elemarjr"); } main.rs
SLIDE 2
SLIDE 3
fn main() { println!("Hello, World!"); } main.rs
SLIDE 4
fn main() { println!("Hello, World!"); } $ rustc main.rs main.rs
SLIDE 5
$ cargo new hello_cargo
SLIDE 6
SLIDE 7
$ cargo run
SLIDE 8
$ cargo check
SLIDE 9
$ cargo build --release
SLIDE 10
main.rs use std::io; fn main() { println!("Please, enter a value: "); let mut value = String::new(); match io::stdin().read_line(&mut value) { Ok(n) => { println!("{} bytes read", n); println!("{}", value); } Err(error) => println!("error: {}", error) } }
SLIDE 11
[package] name = "hello_cargo" version = "0.1.0" authors = ["Elemar Jr <elemarjr@gmail.com>"] edition = "2018" [dependencies] rand = "0.6.5"
Cargo.toml
SLIDE 12
SLIDE 13 use std::io; use std::cmp::Ordering; use rand::Rng; fn main() { println!("Guess the number!"); let secret_number = rand::thread_rng().gen_range(1, 101); loop { println!("Please input your guess."); let mut guess = String::new(); io::stdin().read_line(&mut guess) .expect("Failed to read line"); let guess: u32 = match guess.trim().parse() { Ok(num) => num, Err(_) => continue, }; println!("You guessed: {}", guess); match guess.cmp(&secret_number) { Ordering::Less => println!("Too small!"), Ordering::Greater => println!("Too big!"), Ordering::Equal => { println!("You win!"); break; } } } }
main.rs
SLIDE 14
fn main() { println!("Number is {}", number()); } fn number() -> i32 { 5 } main.rs
SLIDE 15
fn main() { println!("Number is {}", number(5)); } // fn number() -> i32 { // 5 // } fn number(n: i32) -> i32 { n + 1 } main.rs
SLIDE 16
fn main() { let x = 5; let y = { let x = 2; x + 2 }; println!("X is {} and Y is {}", x, y); } main.rs
SLIDE 17
fn main() { let a = 5; let b = a; println!("A is {} and B is {}", a, b); } main.rs
SLIDE 18
fn main() { let a = String::from("Foo"); let b = a; println!("A is {} and B is {}", a, b); } main.rs
SLIDE 19
fn main() { let a = String::from("Foo"); let b = a; println!("A is {} and B is {}", a, b); } main.rs
SLIDE 20
fn main() { let a = String::from("Foo"); let b = a.clone(); println!("A is {} and B is {}", a, b); } main.rs
SLIDE 21
fn main() { let a = String::from("Foo"); print_string(a); println!("A is {}", a); } fn print_string(s: String) { println!("{}", s); } main.rs
SLIDE 22
fn main() { let a = String::from("Foo"); print_string(a); println!("A is {}", a); } fn print_string(s: String) { println!("{}", s); } main.rs
SLIDE 23
fn main() { let a = String::from("Foo"); let a = print_string(a); println!("A is {}", a); } fn print_string(s: String) -> String { println!("{}", s); s } main.rs
SLIDE 24
fn main() { let a = String::from("Foo"); let (_, length) = get_string_length(a); println!("Length of A is {}.", length); } fn get_string_length(s: String) -> (String, usize) { let length = s.len(); (s, length) } main.rs
SLIDE 25
fn main() { let a = String::from("Foo"); let (_, length) = get_string_length(a); println!("Length of A is {}.", length); } fn get_string_length(s: String) -> (String, usize) { (s, s.len()) } main.rs
SLIDE 26
fn main() { let a = String::from("Foo"); let length = get_string_length(&a); println!("Length of A is {}.", length); } fn get_string_length(s: &String) -> usize { s.len() } main.rs
SLIDE 27
fn longest(x: &str, y: &str) -> &str { if x.len() > y.len() { x } else { y } } main.rs
SLIDE 28
fn longest(x: &str, y: &str) -> &str { if x.len() > y.len() { x } else { y } } main.rs
SLIDE 29
fn main() { let r; { let x = 5; r = &x; } println!("r: {}", r); } main.rs
SLIDE 30
fn main() { let r; let s1 = String::from("Elemar"); { let s2 = String::from("Jr"); r = longest(&s1, &s2); } println!("r: {}", r); } fn longest(x: &str, y: &str) -> &str { if x.len() > y.len() { x } else { y } }” main.rs
SLIDE 31
fn main() { let r; let s1 = String::from("Elemar"); { let s2 = String::from("Junior S"); r = longest(&s1, &s2); } println!("r: {}", r); } fn longest<'a>(x: &'a str, y: &'a str) -> &'a str { if x.len() > y.len() { x } else { y } } main.rs
SLIDE 32
fn main() { let r; let s1 = String::from("Elemar"); let s2 = String::from("Junior S"); r = longest(&s1, &s2); println!("r: {}", r); } fn longest<'a>(x: &'a str, y: &'a str) -> &'a str { if x.len() > y.len() { x } else { y } } main.rs
SLIDE 33
use std::io; fn main() { let mut s1 = String::new(); let mut s2 = String::new(); io::stdin().read_line(&mut s1) .expect("Failed to read the first string"); io::stdin().read_line(&mut s2) .expect("Failed to read the second string"); match longest(&s1, &s2) { Some(x) => println!("{}", x), None => println!("Same size"), }; } fn longest<'a>(x: &'a str, y: &'a str) -> Option<&'a str> { if x.len() > y.len() { Some(x) } else if x.len() < y.len() { Some(y) } else { None } }
main.rs
SLIDE 34
fn main() { let full_name = ("Elemar", "Junior“, 39); let (_, last_name, age) = full_name; println!("{}", last_name); } main.rs
SLIDE 35
main.rs fn main() { let full_name = FullName { first_name: String::from("Elemar"), last_name: String::from("Jr"), age: 39, }; println!("{}", full_name.last_name); } struct FullName { first_name: String, last_name: String, age: u8 }
SLIDE 36
fn main() { let p = Point3 { x: 30.0, y: 40.0, z: 0.0}; print!("{}", p.length()); } struct Point3 { x: f32, y: f32, z: f32 } impl Point3 { fn length(&self) -> f32 { ( self.x * self.x + self.y * self.y + self.z * self.z ).sqrt() } fn unit(&self) -> Point3 { let l = self.length(); Point3 { x: &self.x / l, y: &self.y / l, z: &self.z / l, } } }
main.rs
SLIDE 37
impl std::fmt::Display for Point3 { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { write!(f, "({}, {}, {})", self.x, self.y, self.z) } } main.rs
SLIDE 38
fn main() { let p = Point3 { x: 30.0, y: 40.0, z: 0.0}; print!("{}", p); } impl std::fmt::Display for Point3 { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { write!(f, "({}, {}, {})", self.x, self.y, self.z) } } main.rs
SLIDE 39
mod geometry; use geometry::Point3 as Point; use std::fmt::*; fn main() { let p = Point { x: 30.0, y: 40.0, z: 0.0, }; println!("P is {} length = {}", p, p.length()); } impl Display for Point { fn fmt(&self, f: &mut Formatter) -> Result { write!(f, "({}, {}, {})", self.x, self.y, self.z) } }
main.rs
pub struct Point3 { pub x: f32, pub y: f32, pub z: f32 } impl Point3 { pub fn length(&self) -> f32 { ( self.x * self.x + self.y * self.y + self.z * self.z ).sqrt() } }
geometry.rs
SLIDE 40
use std::ops::*; pub struct Point3<T> { pub x: T, pub y: T, pub z: T } impl<T : Mul<Output = T> + Add<Output=T>> Point3<T> { pub fn new(x: T, y: T, z: T) -> Point3<T> { Point3 {x, y, z} } pub fn mult(&self, other:&Point3<T>) -> Point3<T> { Point3::new( self.x * other.x, self.y * other.y, self.z * other.z ) } pub fn add(&self, other:&Point3<T>) -> Point3<T> { Point3::new( self.x + other.x, self.y + other.y, self.z + other.z ) } }
main.rs
SLIDE 41
fn main() { let operation = Operations::plus; } enum Operations { plus, minus, } main.rs
SLIDE 42
main.rs enum Command { Quit, Move { x: i32, y: i32 }, Write(String), ChangeColor(i32, i32, i32), }
SLIDE 43
fn main() { fn add_one(v : i32) -> i32 { v + 1 } println!("{}", add_one(4)); } main.rs
SLIDE 44
fn main() { fn add_one(v : i32) -> i32 { v + 1 } println!("{}", add_one(4)); } main.rs
SLIDE 45
fn main() { let x = 5; fn add_x(v : i32) -> i32 { v + x } println!("{}", add_x(4)); } main.rs
SLIDE 46
main.rs fn main() { let x = 5; let add_x = |v| v + x; println!("{}", add_x(4)); }
SLIDE 47
fn main() { panic!(“Smart pointers!"); panic!(“Concurrency!"); panic!(“Unit Tests"); panic!(“Iterators"); panic!(“Unsafe"); panic!(“Object Oriented"); panic!(“WASM"); panic!(“Macros"); } main.rs
SLIDE 48
fn main() { println!(“Thank you!"); println!(“Your friend, Elemar Júnior!"); println!(“falecom@elemarjr.co"); println!(“@elemarjr"); } main.rs