diff --git a/book.toml b/book.toml index 7e6e1558b442..f36dfa4354d5 100644 --- a/book.toml +++ b/book.toml @@ -74,6 +74,7 @@ use-boolean-and = true # # Please keep the table sorted and avoid multi-step redirects. [output.html.redirect] +"tuples-and-arrays/tuples-and-arrays.html" = "tuples.html" "async/concurrency/channels.html" = "../channels.html" "async/pitfall/async-traits.html" = "../pitfalls/async-traits.html" "basic-syntax.html" = "control-flow-basics.html" diff --git a/src/SUMMARY.md b/src/SUMMARY.md index ae2662650f9a..ed5148219245 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -47,7 +47,8 @@ - [Welcome](welcome-day-1-afternoon.md) - [Tuples and Arrays](tuples-and-arrays.md) - - [Tuples and Arrays](tuples-and-arrays/tuples-and-arrays.md) + - [Arrays](tuples-and-arrays/arrays.md) + - [Tuples](tuples-and-arrays/tuples.md) - [Array Iteration](tuples-and-arrays/iteration.md) - [Patterns and Destructuring](tuples-and-arrays/destructuring.md) - [Exercise: Nested Arrays](tuples-and-arrays/exercise.md) diff --git a/src/tuples-and-arrays/arrays.md b/src/tuples-and-arrays/arrays.md new file mode 100644 index 000000000000..c9d49016173e --- /dev/null +++ b/src/tuples-and-arrays/arrays.md @@ -0,0 +1,39 @@ +--- +minutes: 5 +--- + +# Arrays + + + +```rust,editable +fn main() { + let mut a: [i8; 10] = [42; 10]; + a[5] = 0; + println!("a: {a:?}"); +} +``` + +
+ +- A value of the array type `[T; N]` holds `N` (a compile-time constant) + elements of the same type `T`. Note that the length of the array is _part of + its type_, which means that `[u8; 3]` and `[u8; 4]` are considered two + different types. Slices, which have a size determined at runtime, are covered + later. + +- Try accessing an out-of-bounds array element. Array accesses are checked at + runtime. Rust can usually optimize these checks away, and they can be avoided + using unsafe Rust. + +- We can use literals to assign values to arrays. + +- The `println!` macro asks for the debug implementation with the `?` format + parameter: `{}` gives the default output, `{:?}` gives the debug output. Types + such as integers and strings implement the default output, but arrays only + implement the debug output. This means that we must use debug output here. + +- Adding `#`, eg `{a:#?}`, invokes a "pretty printing" format, which can be + easier to read. + +
diff --git a/src/tuples-and-arrays/tuples-and-arrays.md b/src/tuples-and-arrays/tuples-and-arrays.md deleted file mode 100644 index e5c828d56977..000000000000 --- a/src/tuples-and-arrays/tuples-and-arrays.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -minutes: 10 ---- - -# Tuples and Arrays - -Tuples and arrays are the first "compound" types we have seen. All elements of -an array have the same type, while tuples can accommodate different types. Both -types have a size fixed at compile time. - -| | Types | Literals | -| ------ | ----------------------------- | --------------------------------- | -| Arrays | `[T; N]` | `[20, 30, 40]`, `[0; 3]` | -| Tuples | `()`, `(T,)`, `(T1, T2)`, ... | `()`, `('x',)`, `('x', 1.2)`, ... | - -Array assignment and access: - - - -```rust,editable -fn main() { - let mut a: [i8; 10] = [42; 10]; - a[5] = 0; - println!("a: {a:?}"); -} -``` - -Tuple assignment and access: - - - -```rust,editable -fn main() { - let t: (i8, bool) = (7, true); - println!("t.0: {}", t.0); - println!("t.1: {}", t.1); -} -``` - -
- -Key points: - -Arrays: - -- A value of the array type `[T; N]` holds `N` (a compile-time constant) - elements of the same type `T`. Note that the length of the array is _part of - its type_, which means that `[u8; 3]` and `[u8; 4]` are considered two - different types. Slices, which have a size determined at runtime, are covered - later. - -- Try accessing an out-of-bounds array element. Array accesses are checked at - runtime. Rust can usually optimize these checks away, and they can be avoided - using unsafe Rust. - -- We can use literals to assign values to arrays. - -- The `println!` macro asks for the debug implementation with the `?` format - parameter: `{}` gives the default output, `{:?}` gives the debug output. Types - such as integers and strings implement the default output, but arrays only - implement the debug output. This means that we must use debug output here. - -- Adding `#`, eg `{a:#?}`, invokes a "pretty printing" format, which can be - easier to read. - -Tuples: - -- Like arrays, tuples have a fixed length. - -- Tuples group together values of different types into a compound type. - -- Fields of a tuple can be accessed by the period and the index of the value, - e.g. `t.0`, `t.1`. - -- The empty tuple `()` is also known as the "unit type". It is both a type, and - the only valid value of that type --- that is to say both the type and its - value are expressed as `()`. It is used to indicate, for example, that a - function or expression has no return value, as we'll see in a future slide. - - You can think of it as `void` that can be familiar to you from other - programming languages. - -
diff --git a/src/tuples-and-arrays/tuples.md b/src/tuples-and-arrays/tuples.md new file mode 100644 index 000000000000..4ff74847b6a9 --- /dev/null +++ b/src/tuples-and-arrays/tuples.md @@ -0,0 +1,29 @@ +--- +minutes: 5 +--- + +# Tuples + + + +```rust,editable +fn main() { + let t: (i8, bool) = (7, true); + println!("t.0: {}", t.0); + println!("t.1: {}", t.1); +} +``` + +
+ +- Like arrays, tuples have a fixed length. + +- Tuples group together values of different types into a compound type. + +- Fields of a tuple can be accessed by the period and the index of the value, + e.g. `t.0`, `t.1`. + +- The empty tuple `()` is referred to as the "unit type" and signifies absence + of a return value, akin to `void` in other languages. + +