DrDeadCrash

joined 1 year ago
[–] [email protected] 2 points 1 day ago (1 children)

Problem is, programmers don't want AI. We want better tools that address the issues of complexity and abstract requirements management.

[–] [email protected] 9 points 1 week ago

But only for them

[–] [email protected] 2 points 1 week ago

I very much disagree with this, Null Reference Exceptions have been a huge problem in c#. Nullable reference types are a partial fix, but the question of "how do I 'return' an error from a statically typed method" is not answered there.

[–] [email protected] 1 points 1 week ago

Thank you, I'd love to hear back from you.

[–] [email protected] 1 points 1 week ago

Check the edit on the post, I thought I had linked to the GitHub page but I guess the image overrides that.

Link: https://github.com/Andy3432344/SafeResults

[–] [email protected] 1 points 1 week ago

Check the edit on the post, I thought I had linked to the GitHub page but I guess the image overrides that.

Link: https://github.com/Andy3432344/SafeResults

[–] [email protected] 1 points 1 week ago

The operator being applied to the ResultObject will always resolve to the Generic type that was specified as 'T in IResult. If the function is not successful the resolved value will be whatever value was supplied to the ResultObject constructor, the opt.None property will true and the opt.Some property will be false.

[–] [email protected] 2 points 1 week ago

The example is simplified, but I dislike returning null in my own code. The function will always execute, left or right doesn't matter it's mapped across in the ResultObject class.

The function must return an IResult, the ResultObject analyzes the IResult checking for IFail or IOk. If it's IOk the value of type T is retrieved from the Value property of the IOk object and returned, the Some property defaults to true. If the IResult is an IFail, Some is set to false, it copies the message from the IFail object into the ResultObject, and returns the value the was supplied to its constructor.

I'm just sharing something I find useful, and I hope I can make it useful for others as well. Thanks for the questions.

17
submitted 1 week ago* (last edited 1 week ago) by [email protected] to c/[email protected]
 

A collection of tools for dealing with nulls, failures and the generic type issues that arise in this domain.

https://github.com/Andy3432344/SafeResults

I'm the author, let me know what you think!

*Edit: updated to show GitHub link, sorry!

[–] [email protected] 1 points 1 month ago

Here's a real world side project example of how I handle this situation:

 public IResult<T> GetResourceValue<T>(string path)
    {
        string err = $"{typeof(T).FullName} is not available from this Resource ({nameof(FileSystemResource)})";

        switch (typeof(T))
        {
            case Type t when t == typeof(DriveInfo):
                return (IResult<T>)new Ok<DriveInfo>(BackingValue);
            case Type t when t == typeof(DirectoryInfo):
                err = $"Directory path invalid: {path}";
                var dir = new DirectoryInfo(path);

                if (dir.Exists)
                    return (IResult<T>)new Ok<DirectoryInfo>(dir);
                break;
            case Type t when t == typeof(FileInfo):
                err = $"File path invalid: {path}";
                var file = new FileInfo(path);

                if (file.Exists)
                    return (IResult<T>)new Ok<FileInfo>(file);
                break;
        }
        return new Error<T>(err);
    }

You said elsewhere that it feels like you're doing something wrong if you have to check for every type just to use a Generic. I think you're right in thinking along those lines. There should be a minimal number of types to check, and Ideally limited via a type constraint.

Here's example that includes a constraint:

    public IResult<T> GetValue<T>() where T : struct =>
        typeof(T) switch
        {
            Type t when t == typeof(int) && value <= int.MaxValue =>
             (IResult<T>)new Ok<int>((int)value),
            Type t when t == typeof(uint) && value <= uint.MaxValue && value >= uint.MinValue =>
             (IResult<T>)new Ok<uint>((uint)value),
            Type t when t == typeof(byte) && value <= byte.MaxValue && value >= byte.MinValue =>
             (IResult<T>)new Ok<byte>((byte)value),
            Type t when t == typeof(sbyte) && value <= (int)sbyte.MaxValue =>
             (IResult<T>)new Ok<sbyte>((sbyte)value),
            Type t when t == typeof(short) && value <= (int)short.MaxValue =>
             (IResult<T>)new Ok<short>((short)value),
            Type t when t == typeof(ushort) && value <= ushort.MaxValue =>
             (IResult<T>)new Ok<ushort>((ushort)value),
            Type t when t == typeof(long) && value <= long.MaxValue =>
             (IResult<T>)new Ok<long>((long)value),
            Type t when t == typeof(ulong) => (IResult<T>)new Ok<int>((int)value),
            _ => new IntegerError<T>()
        };
[–] [email protected] 23 points 1 month ago (2 children)

They even know they're being lied to, and still go along.

[–] [email protected] 1 points 2 months ago* (last edited 2 months ago)

I use fancy zones for windows, and I have a zone that compromises one 4k screen and half of two others. That zone is for my VS window, two main code panes in the center and one off to each side.

It doesn't remember the layout of the tool windows... I'll have to look into the save/apply functionality you mentioned.

I prefer VS over vs-code, but in VS the window/tabs are bulky and slow compared to vs code which makes this all more annoying. First world problems though...

Edit: using VS 2022 on win 10

[–] [email protected] 3 points 2 months ago (2 children)

Not OP, but in agreement. I like to split out multiple vertical panes in VS, and I put the edges of the panes at the edge of the monitors. It's tedious to position them manually, and different tool windows run when debugging so I have to reposition the pane boundary's again whenever switching between run/design time. It would be nice if it detected the edge of the monitors and kept the scroll bars and break-point column on the correct sides of the split.

 

I work for a services company, and we're not getting much right now. Just wanted to ask about work availability across the board.

 

error no posts

I have an active post in vscode right now, which I made in browser, but cannot see anything when viewing the community with Connect. Any ideas?

4
FSI Start (programming.dev)
 

Hi everyone, I'm trying to try out F# via FSI in VS Code (Windows 10)

I have Ionide for F# installed, and have used it before, but now every time I try to start it I get a message "FSI :Start resulted in an error", it goes on to helpfully report "the option has no value".

dotnet is in path, dotnet works great. FSI? nothing.

I also have the .net workload installed for visual studio 2022 (if that matters).

I started up my Linux VM (KDE Neon) fired up vs codium and tried FSI Start...same error! So no tinkering in f# for me tonight. Does anyone have an idea what's happening, across two environments? Google is no help...

view more: next ›