rs-4. 기본 문법 1

김주윤·2023년 3월 13일
0

rs-study

목록 보기
5/8

https://doc.rust-lang.org/beta/book/ch03-01-variables-and-mutability.html


문서볼때 이 친구가 있으면 컴파일 안되는게 정상이다.
문서를 읽다보면 가장 많이 보이는 이미지다.*(1)
(https://doc.rust-lang.org/beta/book/ch00-00-introduction.html#ferris)

이 친구가 없는데도 컴파일이 안된다면 사용하던 lib 버전이 달라지며 생긴 문제다.

변수 사용법 (변수와 가변성)

따라해보자

"Cannot ... variable" 는 변경 할 수 없는 변수에 2번째로 값을 할당 할 수 없다는 뜻이다.

fn main() {
    let mut x = 5;
    println!("The value of x is: {x}");
    x = 6;
    println!("The value of x is: {x}");
}

let x = 5; 에서 let 뒤에 mut 를 넣으면
변수가 mutable(가변) 이 된다.

rust 가 사용하는 변수는 default 로 immutable(불변)이라는 점을 알 수 있다.

Fp 스럽지 않은가?

Shadowing (그림자)

https://doc.rust-lang.org/beta/book/ch03-01-variables-and-mutability.html#shadowing

fn main() {
    let x = 5;

    let x = x + 1; // let x = 5; 가 가려지고 새로운 x 는 6이 된다.

    {
        let x = x * 2; // 위와 같은 개념으로 6 * 2 값을 가진 x 가 {} 안에서 할당된다.
        println!("The value of x in the inner scope is: {x}");
    }
	// 바로 위의 {} 를 벗어나며 x 는 기존 6 으로 존재한다.
    println!("The value of x is: {x}");
}

// 결과
// The value of x in the inner scope is: 12
// The value of x is: 6

섀도잉은 {} 범위 내에서 같은 이름의 변수를 만들며 기존 변수를 감춘다.
mut 를 굳이 안써도 되는 상황에 대체하기 좋은 방법이다.

mut 를 반드시 써야할때는

  • 변수가 fn 를 통해 변경되어야 함
  • 반복문을 통해 변수가 만들어진 후, 변경되어야함.

정도 되지 않을까?*(2)

위 경우에도 섀도잉으로 짤 수는 있지만 가독성을 위해 mut 를 쓸 경우도 있어보인다.

데이터 타입

https://doc.rust-lang.org/beta/book/ch03-02-data-types.html#data-types

Rust 언어는 정적인 구조("동적"의 반대)가 빠르다.
이는 데이터 타입도 정적일때 빠르다는 것을 말한다.

하지만 변수의 데이터 타입이 동적으로 할당되는 경우가 필요할 수 있다.
(입력 받은 string 배열 개수는 예측하지 않고 싶은 경우 등)

이런 경우, run-time 중에 메모리를 할당해야 하므로 정적인 구조(예측 가능한 수의 할당) 보다 느릴 수 밖에 없다.

개발자는 여러 요인을 생각하며 mut 나 동적 타입을 도입해야한다.

Functions

https://doc.rust-lang.org/beta/book/ch03-03-how-functions-work.html#functions

함수는 작성하기 쉽다.

// 반환 없음
fn 함수이름(파라미터이름: 타입) {
	...;
}
// 반환 있음
fn 함수이름(파라미터이름: 타입) -> 리턴타입 {
	...;
	리턴변수	// 세미콜론이 없다.
}

위 형태다.

세미콜론이 없는 마지막 라인은 반환할 변수이다.

fn main() {
    let x = plus_one(5);

    println!("The value of x is: {x}");
}

fn plus_one(x: i32) -> i32 {
    x + 1	// 여기 뒤에 ; 붙이고 실행하면 i32를 return 안했다고 error 가 뜬다.
}

실행해보면 잘 나온다.

주석

주석을 이미 보여줬는데. 해당 line 뒤에 // 를 붙이면 된다.


*(1) rust 는 다른 언어보다 error 가 발생할 경우가 많다.
*(2) 진짜 추측이다. 정확히 모른다.

profile
rust 블로거입니다.

0개의 댓글