1fn overflow(n: i32, max: i32) -> Option<i32> {
2 if n > max {
3 Some(n - max)
4 } else {
5 None
6 }
7}
8
9fn main() {
10 let n = 15;
11 // instead of this
12 match overflow(n, 10) {
13 Some(overflow) => println!("The input value has gone {overflow} over the maximum"),
14 _ => {}
15 }
16 // do this
17 if let Some(overflow) = overflow(n, 10) {
18 println!("The input value has gone {overflow} over the maximum")
19 }
20}
1enum ReadingError {
2 OutOfBounds,
3 InvalidBuffer
4}
5
6trait InsteadOfThis {
7 fn next_char() -> Result<u8, ReadingError>;
8 fn next_line() -> Result<String, ReadingError>;
9 fn char_at(pos: usize) -> Result<u8, ReadingError>;
10}
11
12// new result declaring the error just once
13type ReadingResult<T> = Result<T, ReadingError>;
14
15trait YouCanDoThis {
16 fn next_char() -> ReadingResult<u8>;
17 fn next_line() -> ReadingResult<String>;
18 fn char_at(pos: usize) -> ReadingResult<u8>;
19}
20
21fn get_first(buffer: &[u8]) -> ReadingResult<String> {
22 if buffer.len() > 0 {
23 Ok(buffer[0].to_string())
24 } else {
25 Err(ReadingError::OutOfBounds)
26 }
27}
28
29fn main() {
30 if let Ok(first) = get_first(&"foo".as_bytes()) {
31 println!("The first char is {}", first)
32 }
33}
1const TOKEN_AS_STR: &'static str = include_str!("./token.txt");
2const TOKEN_AS_BYTES: &[u8] = include_bytes!("./token.txt");
3
4fn main() {
5 assert_eq!("HelLoWoRLd", TOKEN_AS_STR);
6 assert_eq!("HelLoWoRLd".as_bytes(), TOKEN_AS_BYTES);
7}
1fn main() {
2 let vec = vec!["f", "o", "o"];
3 // instead of this
4 for i in 0..vec.len() {
5 println!("The character at {i} is {}", vec[i]);
6 }
7 // you can use this
8 for (i, char) in vec.iter().enumerate() {
9 println!("The character at {i} is {char}");
10 }
11}
1struct Foo {
2 bar: i32
3}
4
5impl Foo {
6 fn instead_of_this() -> Foo {
7 Foo { bar: 0 }
8 }
9
10 fn you_can_use_this() -> Self {
11 Self { bar: 0 }
12 }
13}
14
15fn main() {
16 let a = Foo::instead_of_this();
17 let b = Foo::you_can_use_this();
18 assert_eq!(a.bar, b.bar);
19}
1fn instead_of_this(chars: &Vec<u8>) -> Option<&u8> {
2 chars.iter().find(|&&x| x == b"\n"[0])
3}
4
5fn do_this(chars: &[u8]) -> Option<&u8> {
6 chars.iter().find(|&&x| x == b"\n"[0])
7}
8
9fn main() {
10 let vec: Vec<u8> = vec![77, 78, 2];
11 let arr: &[u8] = b"ab\n";
12 let str: &str = "ab\n";
13
14 let _ok = instead_of_this(&vec);
15 //let mismatched_types = instead_of_this(&arr);
16 //let mismatched_types = instead_of_this(str.as_bytes());
17
18 let _from_vec = do_this(&vec);
19 let _from_arr = do_this(arr);
20 let _from_str = do_this(str.as_bytes());
21}
https://betterprogramming.pub/rust-beginner-tips-8ecc2503517e