summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs141
1 files changed, 141 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs
index e7a11a9..ebab809 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,3 +1,144 @@
fn main() {
println!("Hello, world!");
+ my_funtion();
+ println!("{}", with_parameters(12, 13));
+ let mut string: String = String::from("hello");
+ string.push_str(" world");
+ println!("{string}");
+ let string2 = string;
+ // This no longer works because string2 now owns it and not string
+ // let length = calculate_length(&string);
+ let length = calculate_length(&string2);
+ {
+ let _string3 = string2;
+ }
+ // This no longer works as the value shifted to _string3 and _string3 was dropped
+ // let length = calculate_length(&string2);
+ println!("{length}");
+
+ let mut _x: i32 = 5;
+ let _r: &mut i32 = &mut _x;
+ *_r += 1;
+ // This will give an error
+ // the r was a mutable reference
+ // there can only be one mutable reference
+ // so both _x and _r are mutable references to _x
+ // this gives an error
+
+ // println!("{_x}");
+ println!("{_r}");
+
+ let mut account = BankAccount {
+ owner: "Anand".to_string(),
+ balance: 10000.64,
+ };
+
+ // Immutable borrow to check balance
+ account.check_balance();
+
+ // Mutable borrow to withdraw money
+ account.withdraw(12.3);
+
+ // Immutable borrow to check balance
+ account.check_balance();
+ let hours = 3;
+ println!("{}", hours * HOURS_TO_SECONDS);
+
+ let bs = "bbbbb";
+ println!("{}", bs);
+ let bs = bs.len();
+ println!("{}", bs);
+
+ let age = 11;
+ if age >= 18 {
+ println!("You can drive");
+ } else if age >= 10 {
+ println!("That's a lie");
+ } else {
+ println!("You cannot drive");
+ }
+
+ let condition = true;
+ let inline = if condition {
+ println!("woah");
+ 15
+ } else {
+ 6
+ };
+ println!("{}", inline);
+
+ // Do not do this
+ // loop {
+ // println!("hello world");
+ // }
+
+ let mut counter = 0;
+
+ let result = loop {
+ counter += 1;
+ if counter == 10 {
+ break counter * 2;
+ }
+ };
+ println!("{}", result);
+
+ // Loops can also have labels
+ let mut count = 0;
+ 'counting_up: loop {
+ println!("count = {count}");
+ let mut remaining = 10;
+ loop {
+ println!("remaining = {remaining}");
+ if remaining == 9 {
+ break;
+ }
+ if count == 2 {
+ break 'counting_up;
+ }
+ remaining -= 1;
+ }
+ count += 1;
+ }
+
+ while count <= 10 {
+ println!("count = {count}");
+ count += 1;
+ }
+
+ let a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
+ for element in a {
+ println!("{}", element * 2);
+ }
+}
+
+const HOURS_TO_SECONDS: i32 = 60 * 60;
+
+struct BankAccount {
+ owner: String,
+ balance: f64,
+}
+
+impl BankAccount {
+ fn withdraw(&mut self, amt: f64) {
+ println!("Withdrawing {} from {}.", amt, self.owner);
+ self.balance -= amt;
+ }
+
+ fn check_balance(&self) {
+ println!(
+ "Account owned by {} has balance of {}",
+ self.owner, self.balance
+ );
+ }
+}
+
+fn my_funtion() {
+ println!("Hi there");
+}
+
+fn with_parameters(a: i32, b: i32) -> i32 {
+ a + b
+}
+fn calculate_length(s: &String) -> usize {
+ s.len()
}