주니어 JS 개발자가 배우는 Rust -(3)
일반 프로그래밍 개념
변수
let
, const
키워드를 이용하며 두 키워드 모두 기본적으로 불변성을 갖고 있다.
다만 mut
를 붙이거나 shadowing
을 이용하면 값을 변경 가능하다.
let vs const
let
과 const
는 둘다 불변성을 갖고 있지만,
const
는 mut
키워드를 쓸 수 없고, 선언시 타입을 지정해줘야 한다.
또한, const
변수는 대문자와 밑줄_
을 이용하는 것이 국룰이다.
ex)
const MAX_POINTS: u32 = 1000_000;
/// 밑줄은 숫자 가독성 높일 때도 사용할 수 있음 (오?)
mut vs Shadowing
일단 Shadowing이 뭔지부터 보자
fn main() {
let x = 5;
let x = x + 1;
let x = x * 2;
println!("x is {}", x); // x is 12
}
x 값을 이용해, let
으로 새로 선언한 x 위에 덮어쓰기를 하고 있는 모습이다.
그럼 mut
이랑 뭐가 다른걸까?
일단 let
키워드로 새로 선언한다는 것도 다르고 무엇보다...
타입에 구애받지 않는다.
let spaces = " ";
let spaces = spaces.len(); // 3
let mut spaces = " ";
spaces = spaces.len(); // compile error!
데이터 타입
스칼라
러스트에서 다음 네 가지 종류의 스칼라 타입을 정의하고 있다.
- integer
- floating point number
- Bolleans
- charaters
먼저 정수 타입부터 보자
정수 타입은 u8
, u16
, u32
, u64
와 i8
, i16
, i32
, i64
가 있다.
저장할 수 있는 범위는 u는 0 ~ 2^(n)-1
, i는 -2^(n-1) ~ 2^(n-1)-1
이다.
즉 u8
은 0~255, u16
은 0~65535, u32
는 0~4294967295,
u64
는 매우 큰 범위까지 커버 가능하다.
러스트는 기본적으로 u32
타입을 default로 사용하고, 웬만한 경우는 얘로 하자
그 다음은 소수점 타입
f32
와 f64
가 있는데 러스트는 f64
를 기본으로 사용함
bolleans는 패스하고.. 문자열 같은 경우는
영어는 물론, 한국어와 일본어, 심지어는 이모티콘까지도 저장 가능하다.
컴파운드
컴파운드 타입은 여러 개 값의 그륩 타입이라고 보면 된다.
기본적으로 러스트에서 지원하는 컴파운드 타입은 튜플과 배열이다.
기본적으로 다른 언어와 비슷하지만,
길이가 정해져있고 삭제하거나 추가할 것이 거의 없지 않는 한
배열보다는 벡터를 쓰는 것이 좋다. (이는 추후에 또 알아보자)
fn main() {
let tup: (i32, f64, u8) = (500, 6.4, 1);
let (x, y, z) = tup;
println!("x : {}", tup.0); // 500
println!("y : {}", y); // 6.4
let a: [i32; 3] = [1,2,3]; // 타입 지정은 이렇게
let b = [3;5]; // [3,3,3,3,3]
}
참고로 배열에서 유효하지 않은 요소에 접근하면,
컴파일은 가능하지만 실행 시에 에러가 발생한다
함수
함수명은 스네이크 케이스 ( ex. process_mint)
함수 매겨변수는 타입을 꼭 명시해줘야 한다.
중요! 구문 vs 표현식
구문은 값의 리턴이 없고, 표현식은 최종 결과값으로 리턴이 있다.
함수의 리턴 값은 이름을 부여하진 않지만, 타입은 꼭 정해줘야 됨
fn main() {
let y = 6; // 구문
let x = (let y = 6); // let y = 6는 구문이라 return이 없어서 error
let x = 5;
// 코드 블록 또한 표현식이다. 즉 표현식과 리턴값이 있다는건데
// 바로 x + 1 와 같이 세미클론이 붙지 않은 저 친구가 표현식임
let y = {
let x = 3;
x + 1 // 세미클론 없는 것에 주목
}
}
물론 return을 붙이면 다른 언어와 비슷하게 작성되나
러스트는 그냥 함수 마지막의 표현식 값을 함수의 리턴값으로 써도 무방하다.
즉, 아래의 두 함수 모두 정상적으로 작동한다.
fn five() -> u32 {
return 5;
}
fn six() -> u32 {
6
}
흐름 제어
if문
여타 다른 언어와 동일
다만 표현식을 이용해 다음과 같은 변수 초기화가 가능
let x = if condition {
5
} else {
6
};
대신 표현식이 return하는 타입이 서로 같아야 한다.
반복문
러스트는 loop, while, for 이 세 가지 종류의 반복문을 제공한다.
loop은 기본적으로 조건없이 무한 반복을 실행하는데
break와 함께 return할 표현식을 작성하는 방법으로 중단할 수 있다.
fn main() {
let mut counter = 0;
let rsult = loop {
counter += 1;
if counter == 10 {
break counter * 2; // 20
}
};
}
또한 for..in
구문도 작성 가능함
이터레이션 많이 사용한다고 하니 그거 이용하자.
Author And Source
이 문제에 관하여(주니어 JS 개발자가 배우는 Rust -(3)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@leedc0101/주니어-JS-개발자가-배우는-Rust-3저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)