1~3장 정리(재상)

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