You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
patterns/idioms/temporary-mutability.md

46 lines
890 B
Markdown

# Temporary mutability
## Description
Often it is necessary to prepare and process some data, but after that data are
only inspected and never modified. The intention can be made explicit by redefining
the mutable variable as immutable.
It can be done either by processing data within nested block or by redefining
variable.
## Example
Say, vector must be sorted before usage.
Using nested block:
```rust,ignore
let data = {
let mut data = get_vec();
data.sort();
data
};
// Here `data` is immutable.
```
Using variable rebinding:
```rust,ignore
let mut data = get_vec();
data.sort();
let data = data;
// Here `data` is immutable.
```
## Advantages
Compiler ensures that you don't accidentally mutate data after some point.
## Disadvantages
Nested block requires additional indentation of block body.
One more line to return data from block or redefine variable.