day 2 (240428)
This commit is contained in:
parent
e10cc55479
commit
5d58a96682
123
src/main.rs
123
src/main.rs
|
|
@ -1,3 +1,5 @@
|
|||
use std::thread;
|
||||
|
||||
fn main() {
|
||||
let i8_var_i8: u128 = 123;
|
||||
println!("Hello, {}!", i8_var_i8);
|
||||
|
|
@ -46,7 +48,7 @@ fn main() {
|
|||
}
|
||||
|
||||
let struct_var = StructName {
|
||||
field1: 1,
|
||||
field1: 42,
|
||||
field2: 5.757,
|
||||
};
|
||||
|
||||
|
|
@ -181,6 +183,123 @@ fn main() {
|
|||
let mut return_var = function_print("Naber la");
|
||||
return_var.push_str(" geldin mi?");
|
||||
println!("{}", return_var);
|
||||
println!("-----");
|
||||
|
||||
// Copy (fixed size)
|
||||
let fs_var1 = 42;
|
||||
let mut fs_var2 = fs_var1;
|
||||
fs_var2 = 123;
|
||||
println!("fs_var1: {}", fs_var1);
|
||||
println!("fs_var2: {}", fs_var2);
|
||||
println!("-----");
|
||||
|
||||
// Move (non-fixed size)
|
||||
let nfs_var1 = "Değişken".to_string();
|
||||
let mut nfs_var2 = nfs_var1;
|
||||
// At this moment, nfs_var1 has lost the ownership, so we can no longer use it
|
||||
// println!("nfs_var1: {}", nfs_var1); // ERROR
|
||||
println!("nfs_var2: {}", nfs_var2);
|
||||
println!("-----");
|
||||
|
||||
// Clone (non-fixed size)
|
||||
let mut nfs_var3 = nfs_var2.clone();
|
||||
nfs_var3.push_str(" Değişir");
|
||||
println!("nfs_var2: {}", nfs_var2);
|
||||
println!("nfs_var3: {}", nfs_var3);
|
||||
println!("-----");
|
||||
|
||||
// Immutable borrowing/shared reference (1:N)
|
||||
let borrowing1 = &nfs_var2;
|
||||
println!("nfs_var2: {}", nfs_var2);
|
||||
println!("borrowing1: {}", borrowing1);
|
||||
println!("-----");
|
||||
|
||||
// Mutable borrowing (1:1)
|
||||
let borrowing2 = &mut nfs_var2;
|
||||
// println!("nfs_var2: {}", nfs_var2); // This takes the reference back and ERROR
|
||||
println!("borrowing2: {}", borrowing2);
|
||||
// println!("nfs_var2: {}", nfs_var2); // This takes the reference back and ERROR
|
||||
println!("borrowing2: {}", borrowing2);
|
||||
println!("nfs_var2: {}", nfs_var2); // This takes the reference back
|
||||
println!("-----");
|
||||
|
||||
// Traits
|
||||
// OOP -> inject method
|
||||
// Struct yapısını daha class gibi kullanmamıza olanak sağlar
|
||||
// Idioms ~= best practices
|
||||
|
||||
trait DenemeTrait {
|
||||
fn default_method(&self) {
|
||||
println!("== Default method ==");
|
||||
}
|
||||
|
||||
fn print_all(&self);
|
||||
}
|
||||
|
||||
impl DenemeTrait for StructName {
|
||||
fn print_all(&self) {
|
||||
println!("== field 1: {}, field 2: {} ==", self.field1, self.field2);
|
||||
}
|
||||
|
||||
fn default_method(&self) {
|
||||
println!("== Default method override ==");
|
||||
}
|
||||
}
|
||||
|
||||
struct_var.print_all();
|
||||
struct_var.default_method();
|
||||
|
||||
let student3 = Student {
|
||||
name: "Yaşar".to_string(),
|
||||
surname: String::from("Güzel"),
|
||||
department: Department::ComputerEngineering(vec!["Unity".to_string()]),
|
||||
score: 100,
|
||||
};
|
||||
let student3 = Student {
|
||||
name: "Yaşar".to_string(),
|
||||
surname: String::from("Güzel"),
|
||||
department: Department::ComputerEngineering(vec!["Unity".to_string()]),
|
||||
score: 100,
|
||||
};
|
||||
impl Student {
|
||||
fn print_all(&self) {
|
||||
println!("{} {}, notu {}.", self.name, self.surname, self.score);
|
||||
}
|
||||
}
|
||||
let student4 = Student {
|
||||
name: "Fatih".to_string(),
|
||||
surname: "Ballı".to_string(),
|
||||
department: Department::Science,
|
||||
score: 99,
|
||||
};
|
||||
student3.print_all();
|
||||
student4.print_all();
|
||||
|
||||
// Threads, concurrency, parallelism, channel
|
||||
|
||||
let thread1 = thread::spawn(|| {
|
||||
for i in 1..10 {
|
||||
println!("Thread says: {}", i);
|
||||
}
|
||||
});
|
||||
println!("Thread start");
|
||||
// let result = thread1.join()?;
|
||||
thread1.join().unwrap();
|
||||
println!("Thread end");
|
||||
|
||||
println!("Thread_local start");
|
||||
use std::cell::RefCell;
|
||||
thread_local! {
|
||||
pub static FOO: RefCell<i32> = RefCell::new(10);
|
||||
}
|
||||
FOO.with_borrow(|v| {
|
||||
println!("Thread_local says: {}", v);
|
||||
});
|
||||
println!("Thread_local end");
|
||||
|
||||
// Smart pointer, Box, RefCell, Rc, Arc
|
||||
|
||||
drop(struct_var);
|
||||
}
|
||||
|
||||
fn function_print(s: &str) -> String {
|
||||
|
|
@ -188,5 +307,3 @@ fn function_print(s: &str) -> String {
|
|||
// return String::from(s);
|
||||
String::from(s)
|
||||
}
|
||||
|
||||
// Tomorrow: trait, thread, canister
|
||||
|
|
|
|||
Loading…
Reference in New Issue