day 2 (240428)

This commit is contained in:
osmannyildiz 2024-04-29 14:42:55 +03:00
parent e10cc55479
commit 5d58a96682
1 changed files with 120 additions and 3 deletions

View File

@ -1,3 +1,5 @@
use std::thread;
fn main() { fn main() {
let i8_var_i8: u128 = 123; let i8_var_i8: u128 = 123;
println!("Hello, {}!", i8_var_i8); println!("Hello, {}!", i8_var_i8);
@ -46,7 +48,7 @@ fn main() {
} }
let struct_var = StructName { let struct_var = StructName {
field1: 1, field1: 42,
field2: 5.757, field2: 5.757,
}; };
@ -181,6 +183,123 @@ fn main() {
let mut return_var = function_print("Naber la"); let mut return_var = function_print("Naber la");
return_var.push_str(" geldin mi?"); return_var.push_str(" geldin mi?");
println!("{}", return_var); 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 { fn function_print(s: &str) -> String {
@ -188,5 +307,3 @@ fn function_print(s: &str) -> String {
// return String::from(s); // return String::from(s);
String::from(s) String::from(s)
} }
// Tomorrow: trait, thread, canister