Rust best practices
Let's start with some basics (and maybe obvious) things.
Slices
First, a little recap; a slice is a constant view over an array, and &[T]
is the constant view of a Vec<T>
, whereas &str
is the constant view of a String
(just like Path
is the constant view of a PathBuf
and OsStr
is the constant view of an OsString
). Now that you have this in mind, let's continue!
When a function expects a constant argument of type Vec
or String
, then always write them as follows:
fn some_func(v: &[u8]) { // some code... }
Instead of:
fn some_code(v: &Vec<u8>) { // some code }
And:
fn some_func(s: &str) { // some code... }
Instead of:
fn some_func(s: &String) { // some code... }
You might be wondering why this is the case. So, let's imagine your function displays your Vec
as ASCII characters:
fn print_as_ascii(v: &[u8]) { for c in v { print!("{}", *c as char); } println!(""); }
And now you just want to print a part of your Vec...