OPTIONALS

 OPTIONALS

  • Option in rust can be either be Some or None. (ie, a value or no value)
  • The below codes shows basic optional usage
  • fn main(){
      let value: Option<i32> = 32;
      let value2: Option<&str> = None;
    }
  • You can unwrap the value of option safely like below:
  • match value2{
      Some(name: &str) => println!("{}",name),
      _ => println!("No name")
    }
  • Or you can unsafely unwrap it like below:
  • let name: &str = value.expect(msg:"No name found");
    println!("{}", name);
  • Or like below:
  • let name: &str = value.unwrap();
    println!("{}", name);
  • You can change the value of option like below:
  • let mut age: Option<i32> = Some(40);
    match age.as_mut(){
      Some(age: &mut i32) => *age += 4,
      None => {}
    }
    println!("Age is {}", age);
  • You can unwrap multiple option like below:
  • let age1: Option<i32> = Some(40);
    let age2: Option<i32> = Some(50);
    let age3: Option<i32> = Some(60);
    if let (Some(age1: i32), Some(age2: i32), Some(age3: i32)) = (age1, age2, age3){
      println!("Age is {}, {}, {}", age1, age2, age3);
    }
  • You can unwrap with default value like below:
  • let fruit: Option<&str> = None;
    let unwrapped: &str = fruit.unwrap_or(default:"Grapes");
    println!("{}", unwrapped);
  • You can unwrap with function like below:
  • let fruit: Option<&str> = None;
    let unwrapped: &str = fruit.unwrap_or_else(||{
    "Grapes"
    });
    println!("{}", unwrapped);
  • You can check if option is some or None like below:
  • let fruit: Option<&str> = None;
    if name.is_some(){
     println!("Value is present");
    }
  • You can unwrap with default value like below:
  • fn main(){
      let age: Option<i32> = None;
      let age: i32 = age.unwrap_or_default();
      println!("Age {}", age);
    }
  • You can perform map on option like below:
  • fn main(){
      let age: Option<i32> = None;
      let double_age: Option<i32> = age.map(|x| x*2);
      println!("Age {}", double_age.unwrap_or_default);
    }

Comments