Rust: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
|||
Line 97: | Line 97: | ||
= Control Flow = | = Control Flow = | ||
== if statement == | |||
Same as C++ except no brackets | |||
<syntaxhighlight lang="rust"> | |||
if temp > 30 | |||
{ | |||
println!("Blah"); | |||
} | |||
else if temp < 10 | |||
{ | |||
println!("Blah"); | |||
} | |||
else | |||
{ | |||
println!("Blah"); | |||
} | |||
</syntaxhighlight> | |||
Elvis is like | |||
<syntaxhighlight lang="rust"> | |||
let a = if temp > 30 {"sunny"} else {"cloud"} | |||
</syntaxhighlight> | |||
== While and Loop == | |||
=== While === | |||
Same as C++ except no brackets | |||
<syntaxhighlight lang="rust"> | |||
while x < 1000 | |||
{ | |||
} | |||
</syntaxhighlight> | |||
There is support for continue and break | |||
=== Loop === | |||
Loop is while true | |||
<syntaxhighlight lang="rust"> | |||
loop | |||
{ | |||
if y == 1 << 10 { break; } | |||
} | |||
</syntaxhighlight> | |||
== For Loop == | |||
A bit like kotlin loops (I think) | |||
<syntaxhighlight lang="rust"> | |||
for x in 1..11 | |||
{ | |||
println!("x = {}",x); | |||
} | |||
</syntaxhighlight> | |||
You can get position in series as well | |||
<syntaxhighlight lang="rust"> | |||
for (pos,x) in (1..11).enumerate() | |||
{ | |||
println!("x = {}, pos = {}",x, pos); | |||
} | |||
</syntaxhighlight> | |||
== Match == | |||
Match can be used like case | |||
<syntaxhighlight lang="rust"> | |||
let country = match country_code | |||
{ | |||
44 => "uk", | |||
46 => "sweden", | |||
7 => "russia" | |||
1...999 => "unknown" // other triple dot inclusive | |||
_ => "invalid" // invalid | |||
}; | |||
</syntaxhighlight> | |||
= Data Structures = | |||
<syntaxhighlight lang="rust"> | |||
</syntaxhighlight> |
Revision as of 03:52, 22 June 2020
Sample program
fn main() {
println!("Hello, world!");
}
Cargo
Sample file
[package]
name = "hello_world"
version = "0.0.1"
authors = [ "Iain Wiseman iwiseman@bibble.co.nz" ]
Sample commands
cargo new hello_world --bin cargo build cargo run
Types and Variables
Fundamental Data Types
Primitive types
Cam declare with size of type
let a:u8 = 123; // unsigned int 8 bits number immutable let a:i8 = 123; // signed int 8 bits number immutable let mut a:u8 = 123; // unsigned int 8 bits number mutable
Or without e.g.
let mut c = 123456789 // 32-bit signed i32 println!("c = {}", c);
Now variable based on OS e.g.
let z:isize = 123 // signed 64 bit if on 64 bit OS
Decimal
let e:f64 = 2.5 // double-precision, 8 bytes or 64-bits
Char
let x:char = 'x' // Note 4 bytes unicode
boolean
let g:bool = false; // Note 4 bytes unicode
Operators
Does not support -- and ++ but does support
a -= 2;
Remainder can be calculated using
a%3
Bitwise
let c = 1 | 2 // | OR
Shift
let two_to_10 = 1 << 10; // 1024
Logical of standard e.g.
let pi_less_4 = std::f64::consts::PI < 4.0; // true
Scope and shadowing
Curly braces keep scope
fn test()
{
{
let a = 5;
}
println!("Broken {a}");
}
Shadowing is fine though
fn test()
{
let a = 5;
{
let a = 10;
println!("10 {a}");
}
println!("5 {a}");
}
Constants
Standard const
const MEANING_OF_LIFE:u8 = 42;
Static const
static Z:i32 = 123;
Stack and Heap
Same a c++ i.e.
let y = Box::new(10);
println!("y = {}", *y);
Control Flow
if statement
Same as C++ except no brackets
if temp > 30
{
println!("Blah");
}
else if temp < 10
{
println!("Blah");
}
else
{
println!("Blah");
}
Elvis is like
let a = if temp > 30 {"sunny"} else {"cloud"}
While and Loop
While
Same as C++ except no brackets
while x < 1000
{
}
There is support for continue and break
Loop
Loop is while true
loop
{
if y == 1 << 10 { break; }
}
For Loop
A bit like kotlin loops (I think)
for x in 1..11
{
println!("x = {}",x);
}
You can get position in series as well
for (pos,x) in (1..11).enumerate()
{
println!("x = {}, pos = {}",x, pos);
}
Match
Match can be used like case
let country = match country_code
{
44 => "uk",
46 => "sweden",
7 => "russia"
1...999 => "unknown" // other triple dot inclusive
_ => "invalid" // invalid
};