κ°μ
Rustμμμ λͺ¨λ κ°μ νΉμ μλ£νμ κ°μ§λ€. μ΄λ Rustμκ² μ΄λ€ μ’ λ₯μ λ°μ΄ν°κ° μ§μ λμλμ§λ₯Ό μλ €μ£Όλ©°, κ·Έ λ°μ΄ν°λ₯Ό μ΄λ»κ² λ€λ£¨μ΄μΌ ν μ§ κ²°μ ν μ μκ² ν΄μ€λ€. μ΄ κΈμμλ μ¬λ¬ μ’ λ₯μ μ€μΉΌλΌμ λ³΅ν© νμ μ λν΄ μμλ³Ό κ²μ΄λ€.
Rustλ μ μ νμ
μΈμ΄μ΄λ€. μ΄λ μ»΄νμΌ μκ°μ λͺ¨λ λ³μμ νμ
μ μ»΄νμΌλ¬κ° μκ³ μμ΄μΌ νλ€λ μλ―Έμ΄λ€. μ»΄νμΌλ¬λ λ³μμ ν λΉλ κ°κ³Ό κ·Έ κ°μ μ¬μ© λ°©λ²μ ν΅ν΄ νμ
μ μΆλ‘ ν μ μλ€. κ·Έλ¬λ μ¬λ¬ κ°μ§ νμ
μ΄ μ¬ μ μλ μν©μμλ(String
μ μ«μλ‘ λ°κΎΈλ(parse
) λ±μ κ²½μ°), νμ
μ λͺ
νν μ§μ ν΄μ£Όμ΄μΌ νλ€:
1
let guess: u32 = "42".parse().expect("μ«μκ° μλλλ€!");
λ§μ½ μ°λ¦¬κ° μ μ½λμμ : u32
λΌλ νμ
μ΄λ
Έν
μ΄μ
μ μΆκ°νμ§ μλλ€λ©΄ Rustλ μλμ κ°μ μλ¬ λ©μμ§λ₯Ό μΆλ ₯ν κ²μ΄λ€. μ΄ λ©μμ§λ μ»΄νμΌλ¬κ° μ°λ¦¬κ° μ¬μ©ν νμ
μ λν λ³΄λ€ κ΅¬μ²΄μ μΈ μ 보λ₯Ό νμλ‘ νλ€λ κ²μ λνλΈλ€.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ cargo build
Compiling no_type_annotations v0.1.0 (file:///projects/no_type_annotations)
error[E0282]: type annotations needed
--> src/main.rs:2:9
|
2 | let guess = "42".parse().expect("Not a number!");
| ^^^^^
|
help: consider giving `guess` an explicit type
|
2 | let guess: _ = "42".parse().expect("Not a number!");
| +++
For more information about this error, try `rustc --explain E0282`.
error: could not compile `no_type_annotations` due to previous error
μ€μΉΌλΌ νμ
μ€μΉΌλΌ νμ μ λ¨μΌ κ°μ λνλΈλ€. Rustμλ λ€ κ°μ§ κΈ°λ³Έ μ€μΉΌλΌ νμ μ΄ μλ€: μ μ, λΆλ μμμ μ«μ, λΆλ¦¬μΈ, κ·Έλ¦¬κ³ λ¬Έμμ΄λ€.
μ΄μ μ΄ νμ λ€μ΄ μ΄λ»κ² μλνλμ§ μ΄ν΄λ³΄λλ‘ νμ.
μ μ νμ
μ μλ μμμ μ΄ μλ μ«μλ₯Ό μλ―Ένλ€. μ°λ¦¬λ μ΄μ μ₯μμ u32
μ κ°μ μ μ νμ
μ μ¬μ©νμλ€. μ΄ νμ
μ μΈμ λ°μΈλ©λ κ°μ΄ 32λΉνΈμ 곡κ°μ μ°¨μ§νλ λΆνΈ μλ μ μμ¬μΌ ν¨μ μ§μνλ€(λΆνΈκ° μλ μ μ νμ
μ u
λμ i
λ‘ μμνλ€). μλ νμ Rustμμ μ¬μ©ν μ μλ μ μ νμ
μ΄ λμ΄λμ΄ μλ€. μ°λ¦¬λ μλ μ€ νλλ₯Ό μ¬μ©νμ¬ μ μ νμ
μ μ μΈν μ μλ€.
Rustμ μ μ νμ
κΈΈμ΄ | λΆνΈ μμ | λΆνΈ μμ |
---|---|---|
8λΉνΈ | i8 | u8 |
16λΉνΈ | i16 | u16 |
32λΉνΈ | i32 | u32 |
64λΉνΈ | i64 | u64 |
128λΉνΈ | i128 | u128 |
μν€ν μ² | isize | usize |
κ° νμ μ λΆνΈκ° μκ±°λ μμ μ μμΌλ©°, λͺ μμ μΈ ν¬κΈ°λ₯Ό κ°μ§κ³ μλ€. λΆνΈ μμκ³Ό λΆνΈ μμμ μ«μκ° μμμΈμ§ μ¬λΆλ₯Ό λνλ΄λ©°, μ«μμ λΆνΈκ° νμνμ§(λΆνΈ μμ), μλλ©΄ νμ μμμ΄λ―λ‘ λΆνΈ μμ΄ ννν μ μλμ§(λΆνΈ μμ)λ₯Ό μλ―Ένλ€. μ΄λ μ«μλ₯Ό μ’ μ΄μ μ°λ κ²κ³Ό λΉμ·νλ€. λΆνΈκ° μ€μν κ²½μ°, μ«μλ νλ¬μ€ λλ λ§μ΄λμ€ κΈ°νΈμ ν¨κ» μμ±νμ§λ§, μ«μκ° μμλΌκ³ κ°μ ν μ μλ κ²½μ°μλ λΆνΈ μμ΄ μμ±νλ€. λΆνΈ μλ μ«μλ 2μ 보μλ²μ μ¬μ©νμ¬ λ©λͺ¨λ¦¬μ μ μ₯λλ€.
λΆνΈ μλ νμ
μ κ°κ° $-(2^{n-1})$μμ $2^{n-1} - 1$(ν¬ν¨) μ¬μ΄μ μ«μλ₯Ό μ μ₯ν μ μλ€. μ¬κΈ°μ $n$μ νμ
μ΄ μ¬μ©νλ λΉνΈ μμ΄λ€. κ·Έλ¬λ―λ‘, i8
μ $-128$λΆν° $127$κΉμ§μ μ«μ, μ¦ $-(2^7)$λΆν° $2^7 - 1$κΉμ§λ₯Ό μ μ₯ν μ μλ€. λ°λ©΄ u8
μ $0$λΆν° $255$, μ¦ $0$λΆν° $2^8 - 1$ μ¬μ΄μ μ«μλ₯Ό μ μ₯ν μ μλ€.
λν isize
μ usize
νμ
μ νλ‘κ·Έλ¨μ΄ μ€νλλ μ»΄ν¨ν°μ μν€ν
μ²μ μμ‘΄νλλ°, μ΄λ νμ βμν€ν
μ²βλ‘ λͺ
μλμ΄ μλ€. 64λΉνΈ μν€ν
μ²μμλ 64λΉνΈ, 32λΉνΈ μν€ν
μ²μμλ 32λΉνΈλ₯Ό μ¬μ©νλ€.
μ μ 리ν°λ΄μ μλ νμ μ μλ λ€μν νμμΌλ‘ μμ±ν μ μλ€. λ€μν νμ
μΌλ‘ ν΄μλ μ μλ μ«μ 리ν°λ΄μλ νμ
μ μ§μ νλ μ λ―Έμ¬λ₯Ό λΆμΌ μλ μλ€. μλ₯Ό λ€μ΄ 57u8
κ³Ό κ°μ ννλ‘ μ¬μ©ν μ μλ€. λν μ«μ 리ν°λ΄μμλ κ°λ
μ±μ μν΄ _
λ₯Ό μ¬μ©ν μ μλ€. μ¦, 1_000
μ 1000
κ³Ό κ°μ κ°μ΄λ€.
Rustμμμ μ μ 리ν°λ΄
μ«μ 리ν°λ΄ | μμ |
---|---|
10μ§λ² | 98_222 |
16μ§λ² | 0xff |
8μ§λ² | 0o77 |
2μ§λ² | 0b1111_0000 |
λ°μ΄νΈ(u8 μ μ©) | b'A' |
μ μ νμ
μ κ²°μ νλ κ²μ΄ μ΄λ €μ΄ κ²½μ°, Rustκ° μ 곡νλ κΈ°λ³Έκ°μ λ°λ₯΄λ κ²μ μΆμ²νλ€. Rustλ νΉλ³ν μ§μ μ΄ μλ κ²½μ° i32
λ₯Ό μ μμ κΈ°λ³Έ νμ
μΌλ‘ νλ€. μ΄λ λλΆλΆμ μν©μμ μ μ ν μ±λ₯κ³Ό λ©λͺ¨λ¦¬ μ¬μ©λμ μ 곡νκΈ° λλ¬Έμ΄λ€.
κ·Έλ¬λ isize
λ usize
νμ
μ νΉλ³ν κ²½μ°μ μ¬μ©λκ³€ νλ€. μ΄ νμ
λ€μ μ£Όλ‘ μ»¬λ μ
μ μΈλ±μ±μ μ¬μ©λλ€. 컬λ μ
μ ν¬κΈ°λ νλ‘κ·Έλ¨μ΄ μ€νλλ μμ€ν
μ μν€ν
μ²μ μμ‘΄μ μ΄κΈ° λλ¬Έμ, μ΄ νμ
λ€μ ν΄λΉ μμ€ν
μμ κ°μ₯ ν¨μ¨μ μΈ λ©λͺ¨λ¦¬ μ¬μ©μ κ°λ₯νκ² νλ€. λ°λΌμ, λ°°μ΄κ³Ό κ°μ 컬λ μ
μ μΈλ±μ€λ‘ μ¬μ©λ λ, isize
λ usize
λ ν΄λΉ νλ«νΌμ λ§λ μΈλ±μ€ ν¬κΈ°λ₯Ό μλμΌλ‘ μ‘°μ νλ€.
μ μ μ€λ²νλ‘μ°
μ°λ¦¬κ°
u8
νμ μ λ³μλ₯Ό κ°μ§κ³ μλ€κ³ ν΄λ³΄μ. μ΄ λ³μλ $0$μμ $255$ μ¬μ΄μ κ°μ λ΄μ μ μλ€. μ΄ λ³μμ $256$ κ°μ΄ λ²μλ₯Ό λ²μ΄λ κ°μ ν λΉνλ €κ³ νλ©΄ μ μ μ€λ²νλ‘μ°κ° λ°μνλ©°, λ κ°μ§ λ°μμ μ λ°ν μ μλ€. λλ²κ·Έ λͺ¨λμμ μ»΄νμΌν λ, Rustλ μ μ μ€λ²νλ‘μ°λ₯Ό νμΈνλ κ²μ¬λ₯Ό ν¬ν¨νμ¬ νλ‘κ·Έλ¨μ΄ λ°νμ μκ°μ ν¨λ μνμ λΉ μ§λλ‘ νλ€. Rustλ νλ‘κ·Έλ¨μ΄ μλ¬λ‘ μΈν΄ μ’ λ£λ λ ν¨λ!(panic!
)μ΄λΌλ μ©μ΄λ₯Ό μ¬μ©νλ€.
--release
νλκ·Έλ₯Ό ν΅ν΄ λ¦΄λ¦¬μ¦ λͺ¨λλ‘ μ»΄νμΌν λ, Rustλ ν¨λμ μΌμΌν¬ μ μλ μ μ μ€λ²νλ‘μ° κ²μ¬λ₯Ό ν¬ν¨νμ§ μλλ€. λμ μ€λ²νλ‘μ°κ° λ°μνλ©΄, Rustλ 2μ 보μ λνμ μ€ννλ€. κ°λ¨ν λ§ν΄μ, νμ μ΄ μ μ₯ν μ μλ μ΅λκ°μ μ΄κ³Όνλ κ°μ βμνβνμ¬ νμ μ΄ μ μ₯ν μ μλ μ΅μκ°μ΄ λλ€.u8
μ κ²½μ°, $256$μ $0$μ΄ λκ³ , $257$μ $1$μ΄ λλ λ°©μμ΄λ€. μ΄ κ²½μ° νλ‘κ·Έλ¨μ ν¨λ μνμ λΉ μ§μ§ μμ§λ§, λ³μλ μμμΉ λͺ»ν κ°μ κ°μ§κ² λ κ²μ΄λ€. μ¦, μ μ μ€λ²νλ‘μ°μ λν λμμ μμ‘΄νλ κ²μ μλ¬λ‘ κ°μ£Όλλ€.μ€λ²νλ‘μ°μ κ°λ₯μ±μ λͺ νν μ²λ¦¬νκ³ μ ν λλ, μμ μ«μ νμ λ€μ λν΄ νμ€ λΌμ΄λΈλ¬λ¦¬μμ μ 곡νλ λͺ κ°μ§ λ©μλ μ§ν©μ μ¬μ©ν μ μλ€:
- λͺ¨λ λͺ¨λμμμ λνμ μ²λ¦¬νλ
wrapping_*
λ©μλ (μμ:wrapping_add
)- μ€λ²νλ‘μ°κ° μμ κ²½μ°
None
κ°μ λ°ννλchecked_*
λ©μλ- μ€λ²νλ‘μ° μ¬λΆλ₯Ό λνλ΄λ λΆλ¦¬μΈκ³Ό ν¨κ» κ°μ λ°ννλ
overflowing_*
λ©μλ- κ°μ΄ μ΅μ λλ μ΅λ κ°μ λλ¬νμ λ κ°μ κ³ μ νλ
saturating_*
λ©μλ
λΆλ μμμ νμ
Rustλ μμμ μ ν¬ν¨ν μ«μ, μ¦ λΆλ μμμ μ«μλ₯Ό μ²λ¦¬νκΈ° μν΄ λ κ°μ§ κΈ°λ³Έ νμ
μ μ 곡νλ€. Rustμ λΆλ μμμ νμ
μλ f32
μ f64
κ° μμΌλ©°, μ΄λ κ°κ° 32λΉνΈμ 64λΉνΈμ ν¬κΈ°λ₯Ό κ°μ§λ€. Rustμλ f64
κ° κΈ°λ³Έ νμ
μΌλ‘ μ§μ λμ΄ μλλ°, μ΄λ νλμ CPUκ° f32
μ λΉμ·ν μλλ‘ λ μ λ°ν κ³μ°μ ν μ μκΈ° λλ¬Έμ΄λ€. λͺ¨λ λΆλ μμμ νμ
μ λΆνΈλ₯Ό κ°μ§λ€.
λ€μμ λΆλ μμμ μ«μλ₯Ό μ¬μ©νλ μμμ΄λ€.
1
2
3
4
5
fn main() {
let x = 2.0; // f64
let y: f32 = 3.0; // f32
}
λΆλ μμμ μ«μλ IEEE-754 νμ€μ λ°λ₯Έλ€. f32
νμ
μ λ¨μ λ°λ(float)λ₯Ό μλ―Ένλ©°, f64
νμ
μ λ°°μ λ°λ(double)λ₯Ό λνλΈλ€.
μ«μ μ°μ°
Rustλ λ€μν μ«μ νμ
μ λν΄ κΈ°λ³Έμ μΈ μ«μ μ°μ°μ μ§μνλ€. μ°μ°μλ λ§μ
, λΊμ
, κ³±μ
, λλμ
, κ·Έλ¦¬κ³ λλ¨Έμ§ μ°μ°μ΄ ν¬ν¨λλ€. μ μ λλμ
μ°μ°μ, κ²°κ³Όκ° 0μ κ°κΉμ΄ μͺ½μΌλ‘ λ΄λ¦Όλ μ μ κ°μ΄ λλ€. λ€μ μμλ let
ꡬ문μ μ΄μ©νμ¬ κ° μ«μ μ°μ°μ μ΄λ»κ² μ¬μ©νλμ§ λ³΄μ¬μ€λ€.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
fn main() {
// λ§μ
let sum = 5 + 10;
// λΊμ
let difference = 95.5 - 4.3;
// κ³±μ
let product = 4 * 30;
// λλμ
let quotient = 56.7 / 32.2;
let truncated = -5 / 3; // κ²°κ³Όλ -1
// λλ¨Έμ§
let remainder = 43 % 5;
}
μ μ½λμμ, κ°κ°μ ννμμ μ°μ°μλ₯Ό μ¬μ©νμ¬ λ¨μΌ κ°μΌλ‘ νκ°λκ³ , μ°μ°μ κ²°κ³Ό κ°μ λ³μμ λ°μΈλ©νλ€.
λΆλ¦¬μΈ νμ
Rustμμ λΆλ¦¬μΈ νμ
μ true
μ false
λ κ°λ§μ κ°μ§λ€. λΆλ¦¬μΈμ ν¬κΈ°λ ν λ°μ΄νΈμ΄λ€. Rustμμλ bool
μ΄λΌλ ν€μλλ‘ λΆλ¦¬μΈ νμ
μ νννλ€. μλ₯Ό λ€λ©΄:
1
2
3
4
5
fn main() {
let t = true;
let f: bool = false; // λͺ
μμ νμ
μ΄λ
Έν
μ΄μ
κ³Ό ν¨κ»
}
λΆλ¦¬μΈ κ°μ μ£Όλ‘ μ‘°κ±΄λ¬Έμμ μ¬μ©λλ€. νΉν if
쑰건문 λ±μμ μμ£Ό λ³Ό μ μλ€.
λ¬Έμ νμ
Rustμ char
νμ
μ λ€μν λ¬Έμλ₯Ό ννν μ μλ€. μλμ char
νμ
μ μ¬μ© μκ° μλ€.
1
2
3
4
5
fn main() {
let c = 'z';
let z: char = 'β€'; // λͺ
μμ νμ
μ΄λ
Έν
μ΄μ
κ³Ό ν¨κ»
let heart_eyed_cat = 'π»';
}
Rustμμμ char
λ 4λ°μ΄νΈ ν¬κΈ°μ΄κ³ , μ λμ½λ μ€μΉΌλΌ κ°μ νννλ€. μ΄λ ASCII λ¬Έμλ§μ νννλ κ²μ΄ μλλΌ, μ
μΌνΈ λ¬Έμ, νκ΅μ΄, μ€κ΅μ΄, μΌλ³Έμ΄ λ¬Έμ, μ΄λͺ¨ν°μ½ λ±λ ν¬ν¨ν μ μλ€. μλ₯Ό λ€μ΄, π»
λ β€
λ λͺ¨λ μ ν¨ν char
κ°μ΄λ€. νμ§λ§, μ λμ½λμ βλ¬Έμβ κ°λ
μ μ¬λμ΄ μκ°νλ μΌλ°μ μΈ βλ¬Έμβ κ°λ
κ³Ό λ€λ₯Ό μ μλ€. Rustμ char
κ° νμ μ°λ¦¬μ μ§κ΄μ μ΄ν΄μ μΌμΉνλ€κ³ 보μ₯ν μλ μλ€.
λ³΅ν© νμ
λ³΅ν© νμ μ λ€μμ κ°λ€μ νλμ νμ μμ λ¬Άλ κ²μ κ°λ₯νκ² νλ€. Rustμμλ ννκ³Ό λ°°μ΄μ΄λΌλ λ μ’ λ₯μ λ³΅ν© νμ μ μ 곡νλ€.
νν νμ
ννμ μλ‘ λ€λ₯Έ νμ μ κ°μ§ μ¬λ¬ κ°λ€λ‘ ꡬμ±λ λ³΅ν© νμ μ΄λ€. ννμ κ³ μ λ κΈΈμ΄λ₯Ό κ°μ§λ©°, ν λ² μ μΈλλ©΄ ν¬κΈ°λ₯Ό λ리거λ μ€μΌ μ μλ€.
ννμ κ΄νΈ μμ μ½€λ§λ‘ ꡬλΆλ κ°μ λμ΄νμ¬ λ§λ λ€. ννμ κ° μμλ κ³ μ ν νμ μ κ°μ§λ©°, κ° μμλΌλ¦¬ κΌ νμ μ΄ κ°μ νμλ μλ€. μλ μ½λμμλ μ€λͺ μ μν΄ νμ μ΄λ Έν μ΄μ μ μΆκ°νμλ€:
1
2
3
fn main() {
let tup: (i32, f64, u8) = (500, 6.4, 1);
}
λ³μ tup
μ μ 체 ννμ λ°μΈλ©λλ€. ννμ΄ νλμ λ³΅ν© μμλ‘ κ°μ£ΌλκΈ° λλ¬Έμ΄λ€. νν λ΄μ κ°λ³ κ°μ μ κ·ΌνκΈ° μν΄μλ, λ€μ μ½λμ κ°μ΄ let
μ ν΅ν΄ ννμ ꡬ쑰 λΆν΄ν μ μλ€:
1
2
3
4
5
6
7
fn main() {
let tup = (500, 6.4, 1);
let (x, y, z) = tup;
println!("The value of y is: {}", y);
}
μ΄ μ½λλ λ¨Όμ ννμ μμ±νκ³ tup
μ΄λΌλ λ³μμ λ°μΈλ©νλ€. μ΄ν let
μ μ¬μ©ν ν¨ν΄μΌλ‘ tup
μ μΈ κ°μ λ³μ x
, y
, z
λ‘ λΆν΄νλ€. μ΄ κ³Όμ μ ꡬ쑰 λΆν΄λΌ λΆλ₯΄λ©°, λ¨μΌ ννμ μΈ λΆλΆμΌλ‘ λλλ€. λ§μ§λ§μΌλ‘, νλ‘κ·Έλ¨μ y
μ κ°μ μΆλ ₯νλ©°, μ΄ κ°μ 6.4
μ΄λ€.
ννμ μμμ μ§μ μ κ·Όνλ €λ©΄ μ (.
) λ€μμ μΈλ±μ€ λ²νΈλ₯Ό μ¬μ©νλ€. μλ₯Ό λ€μ΄:
1
2
3
4
5
6
7
8
9
fn main() {
let x: (i32, f64, u8) = (500, 6.4, 1);
let five_hundred = x.0;
let six_point_four = x.1;
let one = x.2;
}
μ μ½λλ x
λΌλ ννμ μμ±νκ³ ννμ κ° μμμ ν΄λΉνλ μΈλ±μ€λ₯Ό μ¬μ©νμ¬ μ κ·Όνλ€. μ¬κΈ°μ ννμ 첫 λ²μ§Έ μμλ μΈλ±μ€ 0μ κ°μ§λ€.
κ·Έλ¦¬κ³ νΉλ³ν κ²½μ°λ‘, κ°μ΄ μλ ννλ μλλ°, μ΄λ₯Ό μ λ(unit)μ΄λΌκ³ νλ€. μ λ κ°κ³Ό μ λ νμ
μ ()
λ‘ ννλλ©°, μ΄λ κ°μ κ°μ§μ§ μλλ€λ κ²μ μλ―Ένλ€. μ΄λ€ ννμμ΄ κ°μ λ°ννμ§ μμ λλ μ λ κ°μ΄ μμμ μΌλ‘ μ¬μ©λλ€.
λ°°μ΄ νμ
μ¬λ¬ κ°μ κ·Έλ£Ήννλ λ λ€λ₯Έ λ°©λ²μ λ°°μ΄μ μ¬μ©νλ κ²μ΄λ€. λ°°μ΄μ λͺ¨λ μμκ° λμΌν νμ μ κ°μ ΈμΌ νλ€λ μ μμ ννκ³Ό μ°¨μ΄κ° μμΌλ©°, Rustμ λ°°μ΄μ κ³ μ λ ν¬κΈ°λ₯Ό κ°μ§κ³ μλ€λ νΉμ§μ΄ μλ€.
λ°°μ΄μ λκ΄νΈ μμ κ°λ€μ μΌνλ‘ κ΅¬λΆμ§μ΄ μμ±ν μ μλ€:
1
2
3
fn main() {
let a = [1, 2, 3, 4, 5];
}
λ°°μ΄μ μ€νμ λ°μ΄ν°λ₯Ό ν λΉνκ³ μ ν λλ κ³ μ λ μμ μμλ₯Ό κ°μ§κ³ μμ΄μΌ ν λ μ μ©νλ€. νμ§λ§, λ°°μ΄μ ν¬κΈ°κ° κ°λ³μ μΈ λ²‘ν° νμ μ²λΌ μ μ°νμ§ μλ€. λ°°μ΄κ³Ό λ²‘ν° μ€ λ¬΄μμ μ νν΄μΌ ν μ§ νμ μ΄ λ€μ§ μλλ€λ©΄, 벑ν°λ₯Ό μ¬μ©νλ κ²μ΄ μ’λ€.
λ°λ©΄ μμμ κ°μκ° λ³νμ§ μμμΌ νλ μν©μμλ λ°°μ΄μ΄ λ μ ν©νλ€. μλ₯Ό λ€μ΄, νλ‘κ·Έλ¨μμ μμΌμ μ΄λ¦μ λ€λ£¬λ€λ©΄, νμ 7κ°μ μμλ§μ μ μ§νκΈ° λλ¬Έμ 벑ν°λ³΄λ€λ λ°°μ΄μ μ¬μ©νλ κ²μ΄ μ’λ€.
1
let days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
λ°°μ΄μ νμ μ μμμ νμ κ³Ό λ°°μ΄μ κΈΈμ΄λ₯Ό λκ΄νΈ μμ μΈλ―Έμ½λ‘ κ³Ό ν¨κ» λͺ μν¨μΌλ‘μ¨ ννν μ μλ€:
1
let a: [i32; 5] = [1, 2, 3, 4, 5];
μ¬κΈ°μ i32
λ κ° μμμ νμ
μ λνλ΄κ³ , μΈλ―Έμ½λ‘ λ€μμ 5
λ λ°°μ΄μ΄ 5κ°μ μμλ₯Ό ν¬ν¨νλ€λ κ²μ μλ―Ένλ€.
λν, λ°°μ΄μ λͺ¨λ μμκ° λμΌν κ°μ κ°μ§κΈΈ μνλ€λ©΄ μ΄κΈ°κ° νλμ λ°°μ΄μ κΈΈμ΄λ₯Ό μΈλ―Έμ½λ‘ μΌλ‘ ꡬλΆνμ¬ λκ΄νΈ μμ μμ±νλ©΄ λλ€:
1
let a = [3; 5];
μ΄ κ²½μ° a
λΌλ μ΄λ¦μ λ°°μ΄μ μ΄κΈ°μ 3
μ΄λΌλ κ°μΌλ‘ μ€μ λ 5
κ°μ μμλ₯Ό ν¬ν¨νκ² λλ€. μ΄ λ°©μμ let a = [3, 3, 3, 3, 3];
μ μμ±νλ κ²κ³Ό λμΌν κ²°κ³Όλ₯Ό λνλ΄μ§λ§, λ κ°κ²°ν νν λ°©λ²μ΄λ€.
λ°°μ΄ μμμ μ κ·ΌνκΈ°
λ°°μ΄μ 미리 μ ν΄μ§ ν¬κΈ°μ λ©λͺ¨λ¦¬ λΈλ‘μ μ€νμ ν λΉνλ€. μ°λ¦¬λ μΈλ±μ±μ μ¬μ©νμ¬ λ°°μ΄ λ΄μ νΉμ μμμ μ κ·Όν μ μλ€. μλ μ½λλ₯Ό 보μ:
1
2
3
4
5
6
fn main() {
let a = [1, 2, 3, 4, 5];
let first = a[0];
let second = a[1];
}
μ μ½λμμ first
λ λ°°μ΄ a
μ 첫 λ²μ§Έ μμμΈ 1
μ, second
λ λ λ²μ§Έ μμμΈ 2
λ₯Ό μ°Έμ‘°νλ€.
μλͺ»λ λ°°μ΄ μμ μ κ·Ό
λ°°μ΄ λ²μλ₯Ό λ²μ΄λ μΈλ±μ€λ‘ λ°°μ΄μ μ κ·Όνλ €κ³ νλ©΄ λ¬Έμ κ° λ°μνλ€. βμ μ μκ² λ°°μ΄μ μΈλ±μ€λ₯Ό μ λ ₯λ°μ ν΄λΉ μμμ μ κ·Όνλβ μλ μ½λλ₯Ό μ΄ν΄λ³΄μ:
μλ μ½λλ ν¨λμ μ λ°ν μ μλ€.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use std::io;
fn main() {
let a = [1, 2, 3, 4, 5];
println!("λ°°μ΄μ μΈλ±μ€λ₯Ό μ
λ ₯ν΄μ£ΌμΈμ.");
let mut index = String::new();
io::stdin()
.read_line(&mut index)
.expect("μ€μ μ½λ λ° μ€ν¨νμ΅λλ€.");
let index: usize = index
.trim()
.parse()
.expect("μ
λ ₯ν μΈλ±μ€κ° μ«μκ° μλλλ€.");
let element = a[index];
println!("μΈλ±μ€ {index}μ μλ μμμ κ°μ λ€μκ³Ό κ°μ΅λλ€: {element}");
}
μ μ½λλ μ±κ³΅μ μΌλ‘ μ»΄νμΌλλ€. cargo run
μΌλ‘ μ½λλ₯Ό μ€ννκ³ , 0
, 1
, 2
, 3
, λλ 4
λ₯Ό μ
λ ₯νλ©΄ νλ‘κ·Έλ¨μ λ°°μ΄μμ ν΄λΉ μΈλ±μ€μ κ°μ μΆλ ₯νλ€. κ·Έλ¬λ λ§μ½ λ°°μ΄μ λ²μλ₯Ό λμ΄μλ μ«μμΈ 10
κ³Ό κ°μ μλ₯Ό μ
λ ₯νλ€λ©΄ λ€μκ³Ό κ°μ λ©μμ§λ₯Ό λ³΄κ² λ κ²μ΄λ€:
1
2
thread 'main' panicked at 'index out of bounds: the len is 5 but the index is 10', src/main.rs:19:19
note: run with 'RUST_BACKTRACE=1' environment variable to display a backtrace
μ΄ λ©μμ§λ μΈλ±μ± μμ
μ€ μλͺ»λ κ° μ¬μ©μΌλ‘ λ°μν λ°νμ μλ¬λ₯Ό λνλΈλ€. νλ‘κ·Έλ¨μ μλ¬ λ©μμ§λ₯Ό μΆλ ₯νκ³ μ’
λ£λλ€. μ¬κΈ°μ λ§μ§λ§ println!
λͺ
λ Ήμ μ€νλμ§ μλλ€. μμμ μ κ·ΌνκΈ° μν΄ μΈλ±μ±μ μλν λ Rustλ μ§μ ν μΈλ±μ€κ° λ°°μ΄μ κΈΈμ΄λ³΄λ€ μμμ§ νμΈνλ€. λ§μ½ μΈλ±μ€κ° κΈΈμ΄μ κ°κ±°λ ν° κ²½μ°, Rustλ ν¨λνλ€. μ΄ κ²μ¬λ λ°νμ μκ°μ μνλμ΄μΌ νλ€. μλνλ©΄, μ»΄νμΌλ¬λ μ μ κ° μ΄λ€ κ°μ μ
λ ₯ν μ§ μμΈ‘ν μ μκΈ° λλ¬Έμ΄λ€.
μ΄ μν©μ Rustμ λ©λͺ¨λ¦¬ μμ μ± μμΉμ 보μ¬μ£Όλ μ¬λ‘μ΄λ€. λ€μμ μ μμ€ μΈμ΄μμλ μ΄λ¬ν μ’ λ₯μ κ²μ¬κ° μνλμ§ μμ, μ μ κ° λΆμ μ ν μΈλ±μ€λ₯Ό μ 곡ν κ²½μ° μλͺ»λ λ©λͺ¨λ¦¬ μμμ μ κ·Όνλ λ¬Έμ κ° λ°μν μ μλ€. Rustλ μ΄λ¬ν μλ¬λ₯Ό λ°©μ§νκΈ° μν΄ μλͺ»λ λ©λͺ¨λ¦¬ μ κ·Όμ νμ©νλ μν© λμ μ, νλ‘κ·Έλ¨μ μ¦κ°μ μΌλ‘ μ’ λ£ν¨μΌλ‘μ¨ μ μ λ₯Ό 보νΈνλ€.
μΆμ²: rust-lang book