- 3 Posts
- 8 Comments
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.
a === b
returns true ifa
andb
have the same type and are considered equal, and false otherwise. Ifa
isnull
andb
is a boolean, it will simply return false.
I would certainly rather see this than
{isAdmin: bool; isLoggedIn: bool}
. Withboolean | null
, at least illegal states are unrepresentable… even if the legal states are represented in an… interesting way.
shape_warrior_t@programming.devto Programmer Humor@programming.dev•Object oriented programming in Python be like:English19·2 months agoEven regular Rust code is more “exciting” than Python in this regard, since you have a choice between
self
,&self
, and&mut self
. And occasionallymut self
,&'a self
, and evenself: Box<Self>
. All of which offer different semantics depending on what exactly you’re trying to do.
shape_warrior_t@programming.devto Programming@programming.dev•Writing a package manager6·2 months agoInteresting way of handling project vs global scope:
Some package managers (e.g.
npm
) use per-project scope by default, but also allow you to install packages globally using flags (npm install -g
). Others (e.g.brew
) use global scope.I like the idea of allowing both project and global scope, but I do not like the flags approach. Why don’t we apply a heuristic:
If there is a
.sqlpkg
folder in the current directory, use project scope. Otherwise, use global scope.This way, if users don’t need separate project environments, they will just run
sqlpkg
as is and install packages in their home folder (e.g.~/.sqlpkg
). Otherwise, they’ll create a separate.sqlpkg
for each project (we can provide a helperinit
command for this).Seems rather implicit, though, especially if the command output doesn’t specify which scope a package was installed in. If a user moves to a subdirectory, forgets they are there, and then tries to install a package, the package will unexpectedly install in global scope (though this particular version of the problem can be solved by also looking in parent directories).
shape_warrior_t@programming.devto Programmer Humor@programming.dev•Learning to program in rustEnglish16·2 months agoCan’t resist pointing out how you should actually write the function in a “real” scenario (but still not handling errors properly), in case anyone wants to know.
If the list is guaranteed to have exactly two elements:
fn is_second_num_positive_exact(input: &str) -> bool { let (_, n) = input.split_once(',').unwrap(); n.parse::<i32>().unwrap() > 0 }
If you want to test the last element:
fn is_last_num_positive(input: &str) -> bool { let n = input.split(',').next_back().unwrap(); n.parse::<i32>().unwrap() > 0 }
If you want to test the 2nd (1-indexed) element:
fn is_second_num_positive(input: &str) -> bool { let n = input.split(',').nth(1).unwrap(); n.parse::<i32>().unwrap() > 0 }
shape_warrior_t@programming.devto Programmer Humor@programming.dev•RFC 2119, the audiobookEnglish2·2 months agoI can imagine Berdly Deltarune trying to explain this to Kris and Noelle in roughly this tone of voice.
I was thinking of the three legal states as:
null
or{isAdmin: false, isLoggedIn: false}
)false
or{isAdmin: false, isLoggedIn: true}
)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.