C# - Substituindo instruções if/else/switch


Hoje vamos mostrar como substituir instruções condicionais como if/else/switch em seu código usando polimorfismo.

Vejamos uma estrutura de código muito comum onde temos uma série de instruções swith/case (poderia ser um if/else)

No trecho de código abaixo (C# 9.0) temos uma estrutura swtich/case padrão para validar a informação do usuário:

using System;

Console.WriteLine("Informe a sua lingagem preferida : JavaScript, C#, Java, Python ");

string linguagem = Console.ReadLine();

switch (linguagem.ToLower())
{
    case "javascript":
        Console.WriteLine("válida");
        break;
    case "java":
        Console.WriteLine("válida");
        break;
    case "c#":
        Console.WriteLine("válida");
        break;
    case "python":
        Console.WriteLine("válida");
        break;
    default:
        Console.WriteLine("Não válida");
        break;
}

Console.ReadKey();

Para eliminar o uso da estrutura switch/case vamos criar um Factory chamado MethodFactory usando um objeto Dictionary onde no construtor vamos incluir as linguagens e retornar um valor:

using System;
using System.Collections.Generic;
Console.WriteLine("Informe a sua lingagem preferida: JavaScript, C#, Java, Python ");
string linguagem = Console.ReadLine();
Console.WriteLine(MethodFactory.Create(linguagem.ToLower()));
Console.ReadKey();
public class MethodFactory
{
    private static Dictionary<string, string> linguagem = new Dictionary<string, string>();

    static MethodFactory()
    {
        linguagem.Add("javascript", "válida");
        linguagem.Add("c#", "válida");
        linguagem.Add("java", "válida");
        linguagem.Add("python", "válida");
    }
    public static string Create(string escolha)
    {
        return linguagem[escolha];
    }
}

Embora não seja única forma de evitar o uso de instruções condicionais o Factory Method resolve o problema de criar objetos sem especificar as classes concretas definindo um método que é usado para criar objetos ao invés de fazer uma chamada direta ao construtor usando o operador new.

Pegue o projeto aqui : CShp_SemIfs.zip

E estamos conversados...

"E muitos dos que dormem no pó da terra ressuscitarão, uns para vida eterna, e outros para vergonha e desprezo eterno."
Daniel 12:2

Referências:


José Carlos Macoratti