| # Primitives |
| |
| Rust provides access to a wide variety of `primitives`. A sample includes: |
| |
| ### Scalar Types |
| |
| * Signed integers: `i8`, `i16`, `i32`, `i64`, `i128` and `isize` (pointer size) |
| * Unsigned integers: `u8`, `u16`, `u32`, `u64`, `u128` and `usize` (pointer |
| size) |
| * Floating point: `f32`, `f64` |
| * `char` Unicode scalar values like `'a'`, `'α'` and `'∞'` (4 bytes each) |
| * `bool` either `true` or `false` |
| * The unit type `()`, whose only possible value is an empty tuple: `()` |
| |
| Despite the value of a unit type being a tuple, it is not considered a compound |
| type because it does not contain multiple values. |
| |
| ### Compound Types |
| |
| * Arrays like `[1, 2, 3]` |
| * Tuples like `(1, true)` |
| |
| Variables can always be *type annotated*. Numbers may additionally be annotated |
| via a *suffix* or *by default*. Integers default to `i32` and floats to `f64`. |
| Note that Rust can also infer types from context. |
| |
| ```rust,editable,ignore,mdbook-runnable |
| fn main() { |
| // Variables can be type annotated. |
| let logical: bool = true; |
| |
| let a_float: f64 = 1.0; // Regular annotation |
| let an_integer = 5i32; // Suffix annotation |
| |
| // Or a default will be used. |
| let default_float = 3.0; // `f64` |
| let default_integer = 7; // `i32` |
| |
| // A type can also be inferred from context. |
| let mut inferred_type = 12; // Type i64 is inferred from another line. |
| inferred_type = 4294967296i64; |
| |
| // A mutable variable's value can be changed. |
| let mut mutable = 12; // Mutable `i32` |
| mutable = 21; |
| |
| // Error! The type of a variable can't be changed. |
| mutable = true; |
| |
| // Variables can be overwritten with shadowing. |
| let mutable = true; |
| |
| /* Compound types - Array and Tuple */ |
| |
| // Array signature consists of Type T and length as [T; length]. |
| let my_array: [i32; 5] = [1, 2, 3, 4, 5]; |
| |
| // Tuple is a collection of values of different types |
| // and is constructed using parentheses (). |
| let my_tuple = (5u32, 1u8, true, -5.04f32); |
| } |
| ``` |
| |
| ### See also: |
| |
| [the `std` library][std], [`mut`][mut], [`inference`][inference], and |
| [`shadowing`][shadowing] |
| |
| [std]: https://doc.rust-lang.org/std/ |
| [mut]: variable_bindings/mut.md |
| [inference]: types/inference.md |
| [shadowing]: variable_bindings/scope.md |