# prefer-slice-pattern

Prefer slice patterns over indexing after a length guard

A length guard followed by fixed indexing separates a sequence's required shape from its extracted values.
Instead, you SHOULD use a slice pattern to check and bind the elements together.

- Category: style
- Level: warning
- Fix: none
- Scope: module

## Reported

```ds title="main.ds"
function firstPair(values: int32[]): int32 | undefined {
    if (values.length >= 2) {
        return values[0] + values[1];
    }

    return undefined;
}
```

## Accepted

```ds title="main.ds"
function firstPair(values: int32[]): int32 | undefined {
    if (const [first, second, ...] = values) {
        return first + second;
    }

    return undefined;
}
```

## Prior art

- [Clippy · index_refutable_slice](https://rust-lang.github.io/rust-clippy/master/index.html#index_refutable_slice)

[language/linter/src/rules/style/prefer_slice_pattern.rs:9](https://github.com/destack-sh/destack/blob/main/language/linter/src/rules/style/prefer_slice_pattern.rs#L9)
