Ord::clamp în Rust

Limitează o valoare la intervalul [min, max]: sub min devine min, peste max devine max.

Sintaxă
fn clamp(self, min: Self, max: Self) -> Self

Ce face Ord::clamp

x.clamp(min, max) returnează x dacă este în interval, min dacă este mai mic și max dacă este mai mare. Înlocuiește combinația x.max(min).min(max) și se citește mai ușor.

Dacă min > max, programul se oprește cu panică. Pentru f64 există metoda proprie f64::clamp, cu aceeași regulă.

Parametri

Parametru Descriere
min Limita de jos.
max Limita de sus (trebuie să fie ≥ min).

Ce returnează

Valoarea limitată, de același tip.

Exemple

Exemplul 1: Note între 1 și 10

fn main() {
    for nota in [-2, 0, 7, 10, 14] {
        println!("{nota:>3} -> {}", nota.clamp(1, 10));
    }
}

Rezultat

 -2 -> 1
  0 -> 1
  7 -> 7
 10 -> 10
 14 -> 10

Exemplul 2: Volum, pagini și litere

fn main() {
    let volum: u8 = 130;
    println!("volum: {}", volum.clamp(0, 100));

    let total_pagini = 12;
    let ceruta = 40;
    println!("pagina: {}", ceruta.clamp(1, total_pagini));

    println!("{}", 'z'.clamp('a', 'm'));
    println!("{}", 21.7_f64.clamp(18.0, 21.0));
}

Rezultat

volum: 100
pagina: 12
m
21

Greșeli frecvente

  • Inversezi limitele: x.clamp(10, 1) dă panică (min > max. min = 10, max = 1).

Comenzi înrudite

  • Ord::max: Returnează cea mai mare (max) sau cea mai mică (min) dintre două valori ale unui tip Ord.
  • Ord: Ordonare totală: orice două valori se pot compara. cmp() returnează Ordering; necesar pentru sort(), BTreeMap, max().