• Legume5534@lemm.ee
    link
    fedilink
    English
    arrow-up
    35
    ·
    5 days ago

    I fucking knew when I came into this thread it would just be nerds arguing over how wrong the joke is.

  • tuna@discuss.tchncs.de
    link
    fedilink
    arrow-up
    24
    ·
    5 days ago
    pub trait Gender {}
    
    // implement your own gender, and if u want, publish online! :3
    pub struct Masculine;
    impl Gender for Masculine {}
    pub struct Feminine;
    impl Gender for Feminine {}
    
    // removed old api:
    // fn two_lovers(one: Masculine, two: Feminine)
    // srry not srry for breaking backwards compat
    // new version has more flexible api!<3
    fn two_lovers(one: Box<dyn Gender>, two: Box<dyn Gender>) {
        println!("smooch~");
    }
    
    // todo: other functions!!
    
    #[cfg(test)]
    mod tests {
        use super::*;
    
        #[test]
        fn me_and_who() {
            two_lovers(Box::new(Feminine), Box::new(Feminine));
        }
    }
    
    • Nat (she/they)@lemmy.blahaj.zone
      link
      fedilink
      arrow-up
      14
      ·
      edit-2
      5 days ago

      PR: support polyamory

      This also changes the API to take a shared reference rather than ownership of the lovers :3

      pub fn lovers(partners: &[&dyn Gender]) {
          println!("smooch~");
      }
      

      Oh and while we’re at it, for our agender users:

      impl Gender for () {}
      
      • tuna@discuss.tchncs.de
        link
        fedilink
        arrow-up
        7
        ·
        5 days ago

        PR: Merged

        Good call with using a shared reference so now we can kiss our partner(s) more than once!!

        Kissing many partners with one big smooch might be hard tho, maybe we need to change the implementation to use combinatorics so that everyone kisses each of their partners at least once.

        Since there’s no way to tell who kisses who, i can cheat by printing nCr times :3

        pub fn lovers(partners: &[&dyn Gender]) {
            match partners.len() {
                0 => {
                    println!("ghost smooch~");
                }
                1 => {
                    println!("mirror smooch~");
                }
                p => {
                    // p >= 2, safe to unwrap
                    for _ in 0..ncr(p, 2).unwrap() {
                        println!("smooch~");
                    }
                }
            }
        }
        
    • The Quuuuuill@slrpnk.net
      link
      fedilink
      English
      arrow-up
      18
      ·
      6 days ago

      yeah don’t even force people into identifying their gender as empty string since it’s a social construct anyway

    • tiredofsametab@fedia.io
      link
      fedilink
      arrow-up
      9
      arrow-down
      1
      ·
      6 days ago

      Which language(s) have <type>? now? Is that a new Java thing? JS/TS thing? I’ve never seen it.

      Edit: formatting

      • Jesus_666@lemmy.world
        link
        fedilink
        English
        arrow-up
        11
        ·
        edit-2
        4 days ago

        C#. Until semi-recently it was only used for value types (as reference types are supposed to be nullable by default) but these days you can enable explicit nullables, which means that you have to explicitly specify nullability even for reference types.

        I like explicit nullables. It’s not much more work to type those question marks and it adds a safeguard against null showing up where it shouldn’t.

        I specifically inspired insisted on it for this picture because the code on the sign uses capitalized names for something that isn’t a class, which is a very C# thing to do.

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

          That sounds similar in purpose to Haskell’s ‘Maybe’ or Rust’s ‘Option’ enum, right?

          I still think that the null type was a mistake that introduces unnecessary bugs. But I’m glad to see more languages are taking measures against it

          • tuna@discuss.tchncs.de
            link
            fedilink
            arrow-up
            2
            ·
            5 days ago

            Someone can correct me if im wrong but I think nullable in C# still doesnt force you to do a null check before accessing properties or methods, however I believe it does give a type error when using a nullable type where non-nullable is expected, which is good. So it might not be 1-to-1 but it fulfills a similar purpose for sure.

            Coming from a rust background I would have sure appreciated my workplace enabling the nullable feature on our main codebase from the start. I’ve run out of patience for null errors :(