Hello,

I learned about struct in Rust, so I just wanted to share what I have learned.

what is struct in Rust? It’s the same as what’s in C language. eg,

struct Point {
    x: i32,
    y: i32,
}

that’s it this is how we define a struct. we can create all sort of struct with different data types. ( here I have used only i32 but you can use any data type you want)

now Rust also have which we find in OOPs languages like Java. it’s called method. here is how we can define methods for a specific struct in Rust.

impl Point {
    fn print_point(&self) {
        println!("x: {} y: {}", self.x, self.y);
    }
}

see it’s that easy. tell me if I forgot about something I should include about struct in Rust.

  • Ephera@lemmy.ml
    link
    fedilink
    English
    arrow-up
    15
    ·
    2 days ago

    Maybe one thing to add, in addition to methods, you can also have associated functions, by leaving out the &self parameter:

    impl Point {
        fn new(x: i32, y: i32) -> Point {
            Point { x, y }
        }
    }
    

    You call this function like so: Point::new(3, 5)

    The example is quite deliberate. Most of the time, these associated functions are used for constructing the type itself, especially if you need to do more complex things for that than just initialize the struct. At that point, you don’t have an object yet, so you couldn’t be taking it as &self anyways. 🙃

    • TehPers@beehaw.org
      link
      fedilink
      English
      arrow-up
      1
      ·
      2 days ago

      In other languages, these are usually called static methods. Rust just uses these instead of constructor methods. That way you never have to work with a partially initialized value - you just create the value in your new function once you’ve initialized all its fields.

  • 404
    link
    fedilink
    English
    arrow-up
    8
    ·
    2 days ago

    You can implement Display for custom structs, to print them in the regular manner:

    use std::fmt;
    
    struct Point {
        x: i32,
        y: i32,
    }
    
    impl fmt::Display for Point {
        fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
            write!(f, "({}, {})", self.x, self.y)
        }
    }
    
    fn main() {
        let point = Point { x: 10, y: 20 };
        println!("{}", point); // using standard println!
    }
    

    You can also implement things like Add, Sub, AddAssign (point_a += point_b)… :)

  • nous@programming.dev
    link
    fedilink
    English
    arrow-up
    6
    ·
    2 days ago

    Structs are the AND data type in rust (ie it contains all the fields defined). As opposed to Enums which are the OR type (which can only be one of the variants defined). You also have ananomous data types like tuples or arrays.

    The point about methods applies to any type in rust, structs are not unique or special there. Rust does not revolve around the struct type like other languages revolve around the class type.

  • itslilith@lemmy.blahaj.zone
    link
    fedilink
    arrow-up
    5
    ·
    2 days ago

    You put the basics pretty succinctly, I don’t think I have anything to add! Take a look at traits next, and have your mind blown c: