Защото винаги оттам се почва:
fn main() {
println!("Hello, world!");
}
$ rustc hello.rs $ ./hello Hello, world!
$ cargo new hello --bin $ cargo run Hello, world!
$ rustup install stable
$ rustup doc
Length | Rust | C/C++ | ||
---|---|---|---|---|
Signed | Unsigned | Signed | Unsigned | |
8-bit | i8 |
u8 |
char |
unsigned char |
16-bit | i16 |
u16 |
short |
unsigned short |
32-bit | i32 |
u32 |
int |
unsigned int |
64-bit | i64 |
u64 |
long long |
unsigned long long |
arch | isize |
usize |
long |
unsigned long / size_t |
Типа u8
и типа char
са напълно различни!
42
42u32
133_587
42_u32
1_0_0_0
1_____________________________________________________4
0xDEADBEEF
0o77
0b1010011010
Length | Rust | C/C++ |
---|---|---|
32-bit | f32 | float |
64-bit | f64 | double |
3.14
// f64
3.14_f32
// f32true
false
&&
, ||
, &
, |
, ^
, !
&&
и ||
са мързеливиRust | C/C++ |
---|---|
() | void |
let pi: f64 = 3.14;
let pi = 3.14;
let pi: f32 = 3.14;
let pi = 3.14_f32;
Не може да се декларират множество променливи с едно let
твърдение
let x = 5, y = 3; // грешка
fn main() {
let 😀 = 123;
println!("{:?}", 😀);
}
error: unknown start of token: \u{1f600} --> src/main.rs:2:7 | 2 | let 😀 = 123; | ^ error: Could not compile `playground`.
let x = 10;
let x = x + 10;
let x = x * 3;
// the rest of the code
let x1 = 10;
let x2 = x1 + 10;
let x3 = x2 * 3;
// the rest of the code
let x = 10;
{
let x = x + 10;
{
let x = x * 3;
// the rest of the code
}
}
let x = 5;
x += 1; // грешка
let mut x = 5;
x += 1;
mut
Едноредов коментар
// So we’re doing something complicated here, long enough that we need
// multiple lines of comments to do it! Whew! Hopefully, this comment will
// explain what’s going on.
Rust поддържа и блокови коментари /* ... */
, но се предпочита използването на //
/*
So we’re doing something complicated here, long enough that we need
multiple lines of comments to do it! Whew! Hopefully, this comment will
explain what’s going on.
*/
Ключовата дума as
.
let one = true as u8;
let two_hundred = -56i8 as u8;
let three = 3.14 as u32;
Конвертиране от по-голям тип към по-малък може да доведе до загуба на данни
let x = 0b11111111_00000001_u16;
let y = x as u8;
println!("{}", y); // ??
let sum = 5 + 10; // събиране
let difference = 95.5 - 4.3; // изваждане
let product = 4 * 30; // умножение
let quotient = 56.7 / 32.2; // делене
let remainder = 43 % 5; // остатък
Не може да прилагаме аритметичните операции върху числа от различни типове
let x = 4_u32 - 1_u8; // грешка
let y = 1.2_f64 / 0.8_f32; // грешка
Aритметични операции хвърлят грешка при препълванe (integer overflow / underflow)
let x = 255_u8;
let y = x + 1; // 💥
sum += 100;
difference -= 4.0;
product *= 1;
quotient /= 1.2;
remainder %= 2;
Няма оператори ++
и --
x += 1;
x -= 1;
2 > 1
x < 95
3 >= 3
-10 <= 1
a == a
5 != 1000
Всички оператори за сравнение връщат резултат от тип bool
.
0b0010 & 0b0001
x | 0x5F
0b0011 ^ 0b1001
0b0001 << 3
0b1000 >> 2
!x
Операторът за побитово отрицание е !
if bool_expression {
// твърдения или изрази
} else if another_bool_expression {
// твърдения или изрази
} else {
// твърдения или изрази
}
if 2 > 1 {
// твърдения или изрази
} else if 5 != 2 {
// твърдения или изрази
} else {
// твърдения или изрази
}
while bool_expression {
// твърдения или изрази
}
loop {
// твърдения или изрази
}
loop
e същото като while true
, но по-четимо
for in
работи с итератори'outer: loop {
'inner: loop {
break 'outer;
}
println!("John Cena");
}
'outer
и 'inner
се наричат етикети (labels)
fn main() {
println!("Hello, world!");
another_function();
}
fn another_function() {
println!("Another function.");
}
fn name(param1: Type1, param2: Type2) -> ResultType {
// тяло
}
fn add(a: u32, b: u32) -> u32 {
// note no semicolon
a + b
}
return
return
на последния ред от тялото на функция се счита за лоша практикаlet x = (let y = 10); // грешка
let x = 10;
return 25;
1
(2 + 3) * 4
add(5, 6)
let
if-else конструкцията е израз (expression)
let x = if true {
5
} else {
3
};
Rust няма тернарен оператор по тази причина
let x = if true { 5 } else { 3 };
let x = loop {
break 5;
};
loop
е израз
!
след името
println!
print!
let x = 5;
let y = 10;
println!("x = {} and y = {}", x, y);
{}
placeholders