franciscogazitua / IIC2113-2024

Consultas sobre el proyecto en las Issues
4 stars 0 forks source link

[E3] Action como parámetro de función #196

Open CrisDonosoMaass opened 1 month ago

CrisDonosoMaass commented 1 month ago

Hola! Va en contra de Clean Code darle una Action a una función como Function(int value, Action<char, unit> operation), para así poder hacer distintas acciones dependiendo del input?

tatanas commented 3 weeks ago

bump, misma duda acá

cahinostroza commented 4 days ago

Hola, no se habla nada explícitamente en Clean Code con respecto al uso de Function o Action, pero me cuesta mucho creer que pueden encontrar un buen nombre para Function(int value, Action<char, unit> operation). Una alternativa que les doy es utilizar interfaces. Digamos que originalmente tienen algo de este estilo:

public class AClass {
    public bool AMethod(string aString) {
        /* ... */
    }

    public void AnotherMethod() {
        B b = new B(AMethod);
    }
}

public class B {
    private Function<string, bool> _method;

    public B(Function<string, bool> method) {
        _method = method;
    }

    public void DoSomething() {
        if (_method("Hello, World!")) {
            /* ... */
        }
    }
}

Pueden modificarlo, para tener algo de este estilo:

public interface AInterface {
    bool AMethod(string aString);
}

public class AClass : AInterface {
    public bool AMethod(string aString) {
        /* ... */
    }

    public void AnotherMethod() {
        B b = new B(this);
    }
}

public class B {
    private AInterface _a;

    public B(AInterface a) {
        _a = a;
    }

    public void DoSomething() {
        if (_a.AMethod("Hello, World!")) {
            /* ... */
        }
    }
}

Con la segunda opción, al tener la interfaz, tienen el nombre de la interfaz y del método para darle más contexto al lector de lo que está pasando.