Rust - from Mozilla

Caratteri            

Rust prevede l'esistenza del tipo carattere, ovvero un singolo elemento che potremmo genericamente individuare come valore scalare Unicode. Esso è rappresentato sempre tramite 4 bytes, il che garantisce la corretta raprpresentazione di un'ampia gamma di simboli. Come da documentazione ufficiale, il range di caratteri è delimitato in questi intervalli: [0x0,0xD7FF] e [0xE000,0x10FFFF] estremi inclusi. Da un punto di vista pratico un carattere è rappresentato all'intero di una coppia di singoli apici.

  Esempio 4.1
1
2
3
4
5
6
fn main()
{
  let c1 = 'a';
  let c2 = 'b';
  println!("{} {}",c1,c2);
}

E' possibile convertire in maniera sicura un carattere in un u32 ma non viceversa, almeno in maniera sicura, per via delle limitazioni di range. L'esempio di seguito mostra il semplice procedimento nei due sensi utilizzando un cast ma vedremo anche delle funzioni apposite tra breve:

  Esempio 4.2
1
2
3
4
5
6
fn main()
{
  let c1 = 'a';
  println!("{}", c1 as u32);
  println!("{}", 97 as char);
}

I caratteri in Rust dispongono di alcune costanti:

MAX - che banalmente equivale a '\u{10ffff}'

REPLACEMENT_CHARACTER e UNICODE_VERSION che sono attualmente instabili

e di alcune funzioni:

Funzione Utilizzo


from_digit converte da una cifra a quella corrispondente in una data base specificata dal secondo parametro:

use std::char;
fn main()
{
  let c1 = char::from_digit(15, 16);
  match c1 {
    Some(x) => println!("{}", x),
    None => (println!("Fuori scala...")),
  }
}


from_u32 Converte da u32 a Option quindi permettendo di verificare se l'input è corretto per effettuare la conversione:

use std::char;
fn main()
{
  let c1 = char::from_u32(113);
  match c1 {
    Some(x) => println!("{}", x),
    None => (println!("Wrong way...")),
  }
}


from_u32_unchecked Converte da u32 in maniera "classica" senza verifica alcuna sulla congruità dei valori inseriti. Questa feature, a quanto pare, al momento in cui scrivo non è ancora approvata nelle distribuzioni per produzione per quanto ne so.
   

infine troviamo vari metodi:, l'elenco è qui, di seguito un esempio:

  Esempio 4.3
1
2
3
4
5
6
7
8
9
fn main()
{
  let c1 = '9';
  println!("{}", c1.is_digit(10));
  println!("{}", c1.is_digit(8));
  let c2 = 'A';
  println!("{}", c2.is_uppercase());
  println!("{}", c2.is_lowercase());
}