1~3장 정리(재상)
- 코딩 컨벤션:
snake_case
로 변수, 함수 선언, SCREAMING_SNAKE_CASE
로 상수 선언
- 타입 선언:
let
으로 시작, 변수 이름 옆에 type이 없으면 자동 추론
- 변수의 불변성:
let
뒤에 mut
가 붙으면 가변, 없으면 기본적으로 불변
- 타입: tuple = 간단한 구조체 (여러 타입을 순서에 따라 묶음, 엄밀히 구조체랑은 다른듯), arrays = 같은 타입, 고정 길이 배열, slices = 가변 길이 배열
- 상수에 타입 한정은 상수 값 바로 뒤에 타입 선언 (ex.
13u8
)
- 타입 캐스팅은
as
로 명시적 변환 필요
- 배열 선언은
[type; len]
방식으로 선언, 순서에 대한 요소 접근은 [index]
- 함수는
fn function_name(arg1: type, arg2: type) -> (ret1_type, ret2_type)
식으로 선언
- 함수에서 명시적으로
return
하지 않으면 가장 마지막 expression의 결과를 암묵적으로 반환함
- 함수에서 여러 값을 반환하는 것은 사실 tuple로, tuple의 element 순서 접근은
tuple.index
식으로 접근 (ex. result.0
)
- 길이가 0인 tuple은
()
으로 표현, void 역할과 비슷, 함수 return에서 생략 가능
if
, else if
, else
로 조건 검사, 조건문은 ()
로 감싸지 않아도 됨
- 무한반복 (
while(1)
)은 loop
키워드 활용, break
로 탈출, break
를 return처럼 써서 loop의 결과를 받을 수 있음
- while 생략
for i in start..end
식으로 [start, end) 까지 반복, start..=end
식으로 [start, end] 까지 반복
해당 조건에 맞는 i
값을 생성하는 것이라 중간에 수정해서 생략, 재시도가 불가능함
match
로 기존 switch, if문을 혼합해서 쓸 수 있음, pascal 식이라 break 불필요
- 변수 값 초기화에
if-else
, match
를 inlining 할 수 있음. return문 표기하지 않는 것과 비슷하게 하면 됨
- tuple과 달리 명시적으로
struct
로 타입 선언 가능
- method 호출 방식은 C++과 동일
- 메모리 영역을 3개로 구분하는데, 예제에서 말하는 data memory가 data segment와 code segment의 혼합인거같음
나머지는 stack, heap memory. 자명해서 생략
- string을 상수가 아니라 변수 형태로 생성하고 싶으면
String::from("")
으로 접근할 것,
string struct 자체는 stack에 있지만, 문자열의 메모리 저장 공간은 heap에 있다고 함.
- struct 타입 옆에 member 선언을 tuple 식으로 하면 named tuple 식으로 사용됨.
struct 타입 옆에 member 선언을 하지 않으면 empty tuple, 멤버가 없는 struct가 되며, unit-like struct라 함.
- enum 사용 가능, element 접근은
::
으로 해야 함.
enum에 naming이 아닌, type을 넣어서 tagged union처럼 사용 가능 (코드 더러워지기 딱 좋아보임)