728x90
문자열
러스트는 두가지 유형의 문자열로 구성되어 있다.
&str : 문자열 슬라이스 타입 ; 불변하며 고정된 크기를 갖는다.
let magician1 = "Merlin";
let greeting = "Hello, !";
&'static str: 문자열이 정적으로 할당되었음을 의미
프로그램이 끝날 때까지 존재(정적 수명 - static lifetime - )
let magician2: &'static str = "Gandalf";
동적 문자열 만드는 방법
&[..] : 리소스를 소모하지 않음
to_string() : 힙 메모리를 할당함
let mut str1 = String::new();
let mut str2 = String::with_capacity(25);
let mut str3 = magician1.to_string();
let sl1 = &str3;
let sl2 = &[..]
배열
정의
let aliens = ["Cherfer", "Fynock", "Shirack", "Zuxu"]
let zuxus = ["Zuxu"; 3] // 배열 초기화 방법
let mut empty: [i32; 0] = []; // 빈배열
배열의 반복문
for ix in 0..aliens.len()
for a in aliens.iter()
for a in &aliens
벡터
정의
let mut numbers: Vec<i32> = Vec::new();
let mut magic_numbers = vec![7i32, 42, 47, 45, 54];
let mut ids: Vec<i32> = Vec::with_capacity(25); // 메모리 할당
let rgec: Vec<u32> = (0..7).collect();
반복문
let values = vec![1,2,3];
for n in values {
println!("{}", n);
}
슬라이스
벡터나 배열의 일부만을 취하는 것
let slc = &magic_numbers[1..4]; // 마지막 4는 제외된다.
- 제네릭이고 T 타입에 대해 &[T]타입을 갖는다.
- 컴파일 타임에 크기를 알 수 없다.
문자열과 배열
Vec와 Vec(&str)을 잘 구별 할 필요가 있다.
let magician = "Merlin";
let mut chars: Vec<char> = magician.chars().collect();
chars.sort();
let v: Vec(&str) = "The wizard of 0z".split(' ').collect();
let v: Vec(&str) = "abc1def2ghi".split(|c.: char| c.is_numeric()).collect();
튜플
서로 다른 타입을 갖는 타입
let thor = ("Thor", true, 3500u32);
println!("{:?}", thor);
데이터 불러오기
println!("{} - {} - {}", thor.0, thor.1, thor.2);
튜플형으로 함수 return
fn increase_power(name: &str, power: u32) -> (&str, u32) {
if power > 1000 {
return (name, power * 3);
}
else {
return (name, power *2 );
}
}
let (god, strength) = increase_power(thor.0, thor.2);
구조체
정의 : 구조체의 인스턴스는 캐멀케이스로 시작하여야 한다.
struct Player {
nname: &'static str,
health: i32,
level: u8
}
let mur pl1 = Player{ nname: "Dzenan", health: 73, level: 2 };
let ps = &Player{ nname: "John", health: 95, level: 1 };
println!("{} == {}", ps.nname, (*ps).name);
fn main () {
// 튜플 구조체
struct Kilograms(u32); // 오직 하나의 필드를 갖는 구조체 : 튜플 구조체
struct Score(i32, u8); // 정의하는 방법
let score1 = Score(73, 2);
let Score(h, l) = score1; // 변수로 해체 하는 방법
println!("Health {} - Level {}", h, l);
}
열거체
정의 : 내용물이 제한된 개수를 가질 때, 이중 오직 하나만 할당해야 한다.
enum Compass {
North, South, East, West
}
let direction = Compass::West;
예제
use PlanetaryMonster::MarsMonster;
type species = &'static str;
enum PlanetaryMonster {
VenusMonster(species, i32),
MarsMonster(species, i32)
}
fn main () {
let martian = MarsMonster("Chela", 42);
}
결과 : 무언가가 실행될 때마다 사용한다.
- 성공할 경우 특정타입 T의 Ok값이 반환된다.
- 오류가 발생할 경우 E의 Err값이 반환된다.
enum Result<T, E> {
Ok(T),
Err(E)
}
옵션 : 값의 존재 유뮤를 확인할 때 사용
- 값이 존재하는 경우 Some이다.
- 값이 없는 경우 None이다.
enum Option<T> { Some(T), None }
728x90
'Language > Rust' 카테고리의 다른 글
고차원 함수와 매개변수화를 통한 코드 일반화 (0) | 2021.10.09 |
---|---|
패턴매칭 (0) | 2021.10.08 |
함수와 제어문 (0) | 2021.10.06 |
변수 (0) | 2021.10.04 |
Rust의 장점 및 특징 (0) | 2021.10.04 |
댓글