• 0 Posts
  • 543 Comments
Joined 1 year ago
cake
Cake day: June 21st, 2023

help-circle

  • If in PHP or JS I make a change, hit F5, and get an error, that’s not any better than the IDE already showing it beforehand.

    This is even worse because it can happen in prod without you ever triggering this case. For some projects, it doesn’t matter because the impact of a bug is small. For most, you put a subpar, buggy experience in front of your users, waste more time looking for the cause and debugging later with upset users, and at worst cause actual damages (depending on the project anyway).


  • You can’t create a subset of an enum directly, but splitting this up into multiple types works. You can have FunctionAError with errors that function can produce and a variant for your common errors, and FunctionBError which is similar:

    #[derive(Debug, Error)]
    enum MyErrorCommon {
        #[error("bad value ({0})")]
        MyErrorCommon(String),
    }
    
    #[derive(Debug, Error)]
    enum FunctionAError {
        #[error("error a")]
        MyErrorA,
        Common(#[from] MyErrorCommon),
    }
    
    // and same for FunctionBError
    

    The try operator (?) will automatically use From impls to convert errors for you as well. If a function returns a result containing MyErrorCommon in your function and you use ? on it, it gets converted to that function’s error type for you. thiserror generates the From impl for you if you use #[from].


  • TehPers@beehaw.orgtoProgramming@programming.devBaby unit tests
    link
    fedilink
    English
    arrow-up
    12
    arrow-down
    1
    ·
    3 days ago

    Types aren’t unit tests. Unit tests only test a discrete set of inputs and outputs for correctness, and can miss cases that aren’t tested for.

    In sound type systems, they are closer to formal verification. The compiler guarantees the properties you expect of the type hold.

    As for the rest of the article, do what works best for you in your projects, but if I need to work with you, I’m going to ask for types. I need to know what types the interface expects to receive. Names are not enough. Document them, use type hints, whatever, just put them somewhere because I’m not psychic and I don’t know what you thought about when writing the function.