Rust

Variables and Mutability

eddie0329 2022. 1. 31. 21:25
반응형

목차

  • let
  • let mut
  • const
  • const vs let
  • Shadowing
  • 참고

let

기본적인 variable의 let을 한번 살펴볼까요?

fn main() {
  let x = 10;
  println!("The value x is: {}", x);
  x = 20; // ⭐️ 에러!
  println!("The value x is: {}", x);
}

네 rust는 기본적으로 immutalbe을 지향하기 떄문에 에러가 나게 됩니다. 응? const도 있고 let도 있는데 그럼 어떻게...?

let mut

mutable을 지원하기 위해 mut 키워드를 붙여주면 됩니다.

fn main() {
  let mut x = 10;
  println!("The value x is: {}", x);
  x = 20;
  println!("The value x is: {}", x);
}

const

그럼 한번 const를 알아볼까요? const는 이름에서 유추할수 있다 싶이 constant를 선언하게 됩니다.

fn main() {
  const temp: i32 = 1000;
  println!("The value temp is: {}", temp);
}

그렇다면 도대체 let과 const의 차이점은 무엇일까요?

const vs let

눈치채신분도 있겠지만 let과 const의 차이는 data type을 붙여주느냐 아니냐의 차이입니다.
또한 mut 키워드를 붙일 수 없습니다.

Shadow

Shadow란 전에 사용했던 똑같은 변수를 또 사용할 수 있습니다.

fn main() {
  let x = 5;
  let x = x + 1;
  {
    let x = x * 2;
    println!("Inner: {}", x); // 12
  }
  println!("Outer: {}", x); // 6
}

와 정말 신기하네요. 그럼 다른 예제를 볼까요?

  let spaces = "   ";
  let spaces = spaces.len();
  println!("Spaces: {}", spaces); // 3

그럼 만약에 mut 키워드를 붙이면 어떻게 될까요?

  let mut spaces = "   ";
  spaces = spaces.len(); // 🚨 error!
  println!("Spaces: {}", spaces); // 3

왜 에러가 날까요? variable type이 바뀌었기 때문입니다.

참고

반응형