본문 바로가기
Language/Rust

변수

by y.j 2021. 10. 4.
728x90

출력 형식

o: 8진수
x: 소문자 16진수
X: 대문자 16진수
p: 포인터
b: 2진수
e: 소문자 지수 표기
E: 대문자 지수 표기
?: 디버깅 목적으로 사용
u: unsigned integer

타입선언

let n: i32;

전역 변수

static MAX_SIZE: i32 = 32;
static MAX_NAME: &'static str = "HELLO WORLD";

fn main() {
    println!("{}", MAX_NAME);
}

변경 가능한 변수

기본적으로 rust는 변수를 변경 할 수 없다. mut을 선언해주어야 가능하다.

let mut fuel = 34;
fuel = 60;

변수의 scope

기존 C++, JAVA등과 크게 차이가 없어 보인다. 외부 블록의 변수를 내부 블록에서 사용 할 수 있지만, 내부 블록의 변수는 블록이 끝나면 메모리에서 해제된다.

let outer = 42;
{
    let inner = 3.14;
    println!("block variable: {}", inner);
    let outer = 99;
    println!("block variable outer: {}", outer);
}  // outer 99는 메모리에서 사라지고 42가 반환됨.
println!("outer variable: {}", outer);

String operation

let player1 = "Rob";
let player2 = "Jane";
let player3 = player1 + player2; // 에러발생
let player4 = format!("{} {}", player1, player2);

타입 Cast

다른 언어와는 다르게 interger, floating point간의 덧셈이 안되어 casting 후 진행해주어야 한다.

let points = 10i32; // int형 숫자 10
let mut saved_points: u32 = 0;
saved_points = points as u32;
let points = 10i32;
let f2 = 3.14;
let saved_points = points as f2 + f2;

에일리어싱

C/C++ typedef과 비슷하다

type MagicPower = u16;

fn main() {
    let run: MagicPower = 7800;
}

표현식

러스트는 코드 대부분이 표현식이라는 표현 지향적인 언어이다.

let a = 2;  // a는 2를 바인딩한다.
let b = 5;  // b는 5를 바인딩한다.
let n = a + b;  // n은 7을 바인딩한다.
let mut a = 5;
let mut b = 6;
let n = 7;
a = b = n; // 불가능


let mut n = 0;
let mut n = 1;
let t = m; m = n; n = t; // 가능
println!("{} {} {}", n, m, t);  // 1 0 1을 출력한다.
let n1 = {
    let a = 2;
    let b = 5;
    a + b
};

println!("n1 is: {}", n1);

let n2 = {
    let a = 2;
    let b = 5;
    a + b; // ; 이 있으면 반환 값을 무시하여 아무런 값도 반환하지 않는다.
};

println!("n2 is: {:?}", n2);

포인터

C/C++과 같이 포인터 개념이 존재한다.

let tricks = 10;
let reftricks = &mut tricks

let mut score = 0;
let score2 = &score;
*score2 = 5; // error : 바꿀수 없음

let mut score = 0;
let score3 = &mut score;
*score3 = 5;  // 변경가능

let socre4 = &mut score; // error : 변수하나당 참조자는 한개씩만 가능
728x90

'Language > Rust' 카테고리의 다른 글

고차원 함수와 매개변수화를 통한 코드 일반화  (0) 2021.10.09
패턴매칭  (0) 2021.10.08
데이터 구조화  (0) 2021.10.06
함수와 제어문  (0) 2021.10.06
Rust의 장점 및 특징  (0) 2021.10.04

댓글