Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo

agnos.is Forums

  1. Home
  2. Programmer Humor
  3. True crime

True crime

Scheduled Pinned Locked Moved Programmer Humor
programmerhumor
71 Posts 33 Posters 2 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • exu@feditown.comE [email protected]

    Common JavaScript L

    L This user is from outside of this forum
    L This user is from outside of this forum
    [email protected]
    wrote last edited by
    #30

    Not wrong, but funnily enough, it's a linting rule win. I'd go nuts if I didn't have my type checks and my linters. My current L, though, is setting up the projects initially and dealing with the configuration files if I raw dog it, but that's a problem with ESLint configs and the ecosystem as a whole having to deal with those headaches. So in the end, the JS devs got clever and shifted the blame to the tooling. 😅

    1 Reply Last reply
    0
    • D [email protected]

      This is quite reasonable, aside from the variable name which should be isAdmin. A user either is an admin, or isn't. Unless we don't know, then it's null. You are correct this is bad if the point was to represent roles, but it's not supposed to.

      O This user is from outside of this forum
      O This user is from outside of this forum
      [email protected]
      wrote last edited by
      #31

      Admin is a role though, was my point. And besides, if you check for three different states, and you decide to go with a boolean to represent that, I really find it hard to believe anyone would think it reasonable. It’s valid and it’s practical, but can you really say it’s reasonable?

      I don’t do typescript, but wouldn’t a union of a null and a bool be just more resource intensive than simply using an unsigned byte-sized integer? I struggle to find reasons to ever go for that over something more reasonable and appropriate for what it attempts to represent (3 distinct states as it stands, and likely in future more than just 3 when they have a need for more granularity, as you’d often do with anything you’d need an admin role distinction in the first place), but likely I’m just not familiar with ts conventions. Happy to hear the reasoning for this though.

      D S 2 Replies Last reply
      0
      • O [email protected]

        Admin is a role though, was my point. And besides, if you check for three different states, and you decide to go with a boolean to represent that, I really find it hard to believe anyone would think it reasonable. It’s valid and it’s practical, but can you really say it’s reasonable?

        I don’t do typescript, but wouldn’t a union of a null and a bool be just more resource intensive than simply using an unsigned byte-sized integer? I struggle to find reasons to ever go for that over something more reasonable and appropriate for what it attempts to represent (3 distinct states as it stands, and likely in future more than just 3 when they have a need for more granularity, as you’d often do with anything you’d need an admin role distinction in the first place), but likely I’m just not familiar with ts conventions. Happy to hear the reasoning for this though.

        D This user is from outside of this forum
        D This user is from outside of this forum
        [email protected]
        wrote last edited by [email protected]
        #32

        So in a language with nullable types, are you against a boolean ever being nullable? Null means "empty, missing info". Let's say we have role variable with a enum type of possible roles. It could still reasonably be nullable, because in some scenarios you don't know the role yet, like before log in.

        In any use case where we need to store some boolean, it's a common occurrence that we don't have the data and it's null. It would be overkill to use an enum with True, False, NoData for these cases, where there is already a language feature made just for that, nullable values.

        I've never used TypeScript, just writing from experience in other languages.

        O 1 Reply Last reply
        0
        • T [email protected]
          This post did not contain any content.
          U This user is from outside of this forum
          U This user is from outside of this forum
          [email protected]
          wrote last edited by
          #33

          Same as ?

          std::optional<bool> role;
          
          if (role.value())
          { std::cerr ("User is admin");}
          else if (!role.value())
          { std::cerr ("User is not admin");}
          else if (!role.has_value())
          { std::cerr ("User is not logged in");}
          

          Here has_value() should have been checked first, but the JS seems kinda fine.
          Which is it?

          S 1 Reply Last reply
          2
          • D [email protected]

            So in a language with nullable types, are you against a boolean ever being nullable? Null means "empty, missing info". Let's say we have role variable with a enum type of possible roles. It could still reasonably be nullable, because in some scenarios you don't know the role yet, like before log in.

            In any use case where we need to store some boolean, it's a common occurrence that we don't have the data and it's null. It would be overkill to use an enum with True, False, NoData for these cases, where there is already a language feature made just for that, nullable values.

            I've never used TypeScript, just writing from experience in other languages.

            O This user is from outside of this forum
            O This user is from outside of this forum
            [email protected]
            wrote last edited by [email protected]
            #34

            Yeah, but if it is about being an admin or not, hence the bool, it’d be idiomatic and reasonable to assume it to be false if we have no data. Unless we want to try and allow admin access based on no data. Having three states for a simple binary state is weird. And if it is not about just being an admin or not, the bool is inherently a too limited choice for representation.

            D 1 Reply Last reply
            1
            • dohpaz42@lemmy.worldD [email protected]

              I mean aside of the variable name, this is not entirely unreasonable.

              grrgyle@slrpnk.netG This user is from outside of this forum
              grrgyle@slrpnk.netG This user is from outside of this forum
              [email protected]
              wrote last edited by
              #35

              The variable name is 90% why this is so unreasonable. Code is for humans to read, so names matter.

              1 Reply Last reply
              5
              • N [email protected]

                Product manager: "I want a new role for users that can only do x,y,z"

                Developer: "uh.. yeah. About that... Give me a few days."

                grrgyle@slrpnk.netG This user is from outside of this forum
                grrgyle@slrpnk.netG This user is from outside of this forum
                [email protected]
                wrote last edited by
                #36

                Hmmm I need a datatype with three states... Should I use a named enum? No, no that's too obvious...

                1 Reply Last reply
                4
                • U [email protected]

                  Same as ?

                  std::optional<bool> role;
                  
                  if (role.value())
                  { std::cerr ("User is admin");}
                  else if (!role.value())
                  { std::cerr ("User is not admin");}
                  else if (!role.has_value())
                  { std::cerr ("User is not logged in");}
                  

                  Here has_value() should have been checked first, but the JS seems kinda fine.
                  Which is it?

                  S This user is from outside of this forum
                  S This user is from outside of this forum
                  [email protected]
                  wrote last edited by
                  #37

                  a === b returns true if a and b have the same type and are considered equal, and false otherwise. If a is null and b is a boolean, it will simply return false.

                  U 1 Reply Last reply
                  3
                  • S [email protected]

                    I would certainly rather see this than {isAdmin: bool; isLoggedIn: bool}. With boolean | null, at least illegal states are unrepresentable... even if the legal states are represented in an... interesting way.

                    N This user is from outside of this forum
                    N This user is from outside of this forum
                    [email protected]
                    wrote last edited by
                    #38

                    Admin false LoggedIn false doesn't feel illegal to me, more redundant if anything

                    S 1 Reply Last reply
                    1
                    • O [email protected]

                      Admin is a role though, was my point. And besides, if you check for three different states, and you decide to go with a boolean to represent that, I really find it hard to believe anyone would think it reasonable. It’s valid and it’s practical, but can you really say it’s reasonable?

                      I don’t do typescript, but wouldn’t a union of a null and a bool be just more resource intensive than simply using an unsigned byte-sized integer? I struggle to find reasons to ever go for that over something more reasonable and appropriate for what it attempts to represent (3 distinct states as it stands, and likely in future more than just 3 when they have a need for more granularity, as you’d often do with anything you’d need an admin role distinction in the first place), but likely I’m just not familiar with ts conventions. Happy to hear the reasoning for this though.

                      S This user is from outside of this forum
                      S This user is from outside of this forum
                      [email protected]
                      wrote last edited by
                      #39

                      My preferred way of modelling this would probably be something like
                      role: "admin" | "regular" | "logged-out"
                      or
                      type Role = "admin" | "regular";
                      role: Role | null
                      depending on whether being logged out is a state on the same level as being a logged-in (non-)admin. In a language like Rust,
                      enum Role {Admin, Regular}
                      instead of just using strings.

                      I wouldn't consider performance here unless it clearly mattered, certainly not enough to use
                      role: number,
                      which is just about the least type-safe solution possible. Perhaps
                      role: typeof ADMIN | typeof REGULAR | typeof LOGGED_OUT
                      with appropriately defined constants might be okay, though.

                      Disclaimer: neither a professional programmer nor someone who regularly writes TypeScript as of now.

                      O 1 Reply Last reply
                      0
                      • N [email protected]

                        Admin false LoggedIn false doesn't feel illegal to me, more redundant if anything

                        S This user is from outside of this forum
                        S This user is from outside of this forum
                        [email protected]
                        wrote last edited by [email protected]
                        #40

                        I was thinking of the three legal states as:

                        • not logged in (null or {isAdmin: false, isLoggedIn: false})
                        • logged in as non-admin (false or {isAdmin: false, isLoggedIn: true})
                        • logged in as admin (true or {isAdmin: true, isLoggedIn: true})

                        which leaves {isAdmin: true, isLoggedIn: false} as an invalid, nonsensical state. (How would you know the user's an admin if they're not logged in?) Of course, in a different context, all four states could potentially be distinctly meaningful.

                        N C 2 Replies Last reply
                        7
                        • T [email protected]
                          This post did not contain any content.
                          B This user is from outside of this forum
                          B This user is from outside of this forum
                          [email protected]
                          wrote last edited by
                          #41

                          You could make it even dumber by using weak comparisons.

                          1 Reply Last reply
                          2
                          • O [email protected]

                            Yeah, but if it is about being an admin or not, hence the bool, it’d be idiomatic and reasonable to assume it to be false if we have no data. Unless we want to try and allow admin access based on no data. Having three states for a simple binary state is weird. And if it is not about just being an admin or not, the bool is inherently a too limited choice for representation.

                            D This user is from outside of this forum
                            D This user is from outside of this forum
                            [email protected]
                            wrote last edited by [email protected]
                            #42

                            Depends on your requirements.

                            If the admin status needs to be checked in a database, but most actions don't require authentication at all, it's pointless to waste resources checking and it would be left null until the first action that needs the information checks it and fills it in as true or false.

                            O 1 Reply Last reply
                            0
                            • bjoern_tantau@swg-empire.deB [email protected]

                              Ackshually three equal signs check for type as well. So mere truthiness is not enough. It has to be exactly true.

                              Also, everyone knows FILE_NOT_FOUND isn't a string but a boolean value.

                              foxglove@lazysoci.alF This user is from outside of this forum
                              foxglove@lazysoci.alF This user is from outside of this forum
                              [email protected]
                              wrote last edited by
                              #43

                              yeah, it's funny how my brain collapsed the boolean check into if (role) rather than if (role === true) - that's tricky

                              what is FILE_NOT_FOUND? I can't find much on it ...

                              bjoern_tantau@swg-empire.deB 1 Reply Last reply
                              1
                              • S [email protected]

                                I was thinking of the three legal states as:

                                • not logged in (null or {isAdmin: false, isLoggedIn: false})
                                • logged in as non-admin (false or {isAdmin: false, isLoggedIn: true})
                                • logged in as admin (true or {isAdmin: true, isLoggedIn: true})

                                which leaves {isAdmin: true, isLoggedIn: false} as an invalid, nonsensical state. (How would you know the user's an admin if they're not logged in?) Of course, in a different context, all four states could potentially be distinctly meaningful.

                                N This user is from outside of this forum
                                N This user is from outside of this forum
                                [email protected]
                                wrote last edited by
                                #44

                                ah you are right! i am so dumb.

                                1 Reply Last reply
                                3
                                • foxglove@lazysoci.alF [email protected]

                                  yeah, it's funny how my brain collapsed the boolean check into if (role) rather than if (role === true) - that's tricky

                                  what is FILE_NOT_FOUND? I can't find much on it ...

                                  bjoern_tantau@swg-empire.deB This user is from outside of this forum
                                  bjoern_tantau@swg-empire.deB This user is from outside of this forum
                                  [email protected]
                                  wrote last edited by
                                  #45

                                  FILE_NOT_FOUND is from an old story on thedailywtf.com. Someone created a boolean enum with TRUE, FALSE and FILE_NOT_FOUND, if I recall correctly. It's been a recurring running joke.

                                  foxglove@lazysoci.alF 1 Reply Last reply
                                  3
                                  • S [email protected]

                                    I was thinking of the three legal states as:

                                    • not logged in (null or {isAdmin: false, isLoggedIn: false})
                                    • logged in as non-admin (false or {isAdmin: false, isLoggedIn: true})
                                    • logged in as admin (true or {isAdmin: true, isLoggedIn: true})

                                    which leaves {isAdmin: true, isLoggedIn: false} as an invalid, nonsensical state. (How would you know the user's an admin if they're not logged in?) Of course, in a different context, all four states could potentially be distinctly meaningful.

                                    C This user is from outside of this forum
                                    C This user is from outside of this forum
                                    [email protected]
                                    wrote last edited by
                                    #46

                                    Honestly logged in is state and shouldn't be on the user object.

                                    1 Reply Last reply
                                    0
                                    • S [email protected]

                                      a === b returns true if a and b have the same type and are considered equal, and false otherwise. If a is null and b is a boolean, it will simply return false.

                                      U This user is from outside of this forum
                                      U This user is from outside of this forum
                                      [email protected]
                                      wrote last edited by
                                      #47

                                      I see, so logically it is fine.
                                      Just not in the context.

                                      1 Reply Last reply
                                      0
                                      • S [email protected]

                                        My preferred way of modelling this would probably be something like
                                        role: "admin" | "regular" | "logged-out"
                                        or
                                        type Role = "admin" | "regular";
                                        role: Role | null
                                        depending on whether being logged out is a state on the same level as being a logged-in (non-)admin. In a language like Rust,
                                        enum Role {Admin, Regular}
                                        instead of just using strings.

                                        I wouldn't consider performance here unless it clearly mattered, certainly not enough to use
                                        role: number,
                                        which is just about the least type-safe solution possible. Perhaps
                                        role: typeof ADMIN | typeof REGULAR | typeof LOGGED_OUT
                                        with appropriately defined constants might be okay, though.

                                        Disclaimer: neither a professional programmer nor someone who regularly writes TypeScript as of now.

                                        O This user is from outside of this forum
                                        O This user is from outside of this forum
                                        [email protected]
                                        wrote last edited by [email protected]
                                        #48

                                        Yeah obviously with constants for the set roles per value. Some languages call them enums, but the point is that what we pass and use is always still the smallest integer type possible. With the extra bonus that if the roles ever become composable, the same value type would likely suffice for a bitflag and only thing needing refactoring would be bitshifting the constants.

                                        But anyway, this turns out to be the weirdest hill I find myself willing to die on.

                                        1 Reply Last reply
                                        0
                                        • D [email protected]

                                          Depends on your requirements.

                                          If the admin status needs to be checked in a database, but most actions don't require authentication at all, it's pointless to waste resources checking and it would be left null until the first action that needs the information checks it and fills it in as true or false.

                                          O This user is from outside of this forum
                                          O This user is from outside of this forum
                                          [email protected]
                                          wrote last edited by
                                          #49

                                          I don’t really follow you there, wouldn’t it be exactly the opposite and wouldn’t checking for nulls be, as a premise, more wasteful? But doesn’t really matter, time to digress. I’m conventionally educated as an engineer so what I know and find reasonable today might be outdated and too strict for most contemporary stuff.

                                          D 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups