Algumas implementacoes dependem muito da linguagem, mas em algumas estruturas tu pode utilizar mapa na estrutura chave:valor para armazenar um conjunto de dados que pode ser validado. Usei isso algumas vezes em Python e em Java.
Por exemplo, esse método em Java que recebe uma região como parametro, e retorna uma lista com a sigla de alguns estados da região:
private ArrayList<String> getEstados(String regiao) {
if (regiao.equalsIgnoreCase("Sul")) {
return new ArrayList<>(Arrays.asList("RS", "SC", "PR"));
} else if (regiao.equalsIgnoreCase("Sudeste")) {
return new ArrayList<>(Arrays.asList("SP", "RJ", "MG", "ES"));
} else if (regiao.equalsIgnoreCase("Centro Oeste")) {
return new ArrayList<>(Arrays.asList("GO", "MS", "MT", "DF"));
} else if (regiao.equalsIgnoreCase("Nordeste")) {
return new ArrayList<>(Arrays.asList("PE", "PB", "BA", "MA"));
} else if (regiao.equalsIgnoreCase("Norte")) {
return new ArrayList<>(Arrays.asList("AM", "PA", "AC", "AP"));
}
return null;
}
Toda essa validação de if-else poderia ser alterada por:
static HashMap <String, ArrayList<String>> mapa = new HashMap<>();
public static void main(String[] args) {
mapa.put("Sul", new ArrayList<>(Arrays.asList("RS", "SC", "PR")));
mapa.put("Sudeste", new ArrayList<>(Arrays.asList("SP", "RJ", "MG", "ES")));
mapa.put("Centro Oeste", new ArrayList<>(Arrays.asList("GO", "MS", "MT", "DF")));
mapa.put("Nordeste", new ArrayList<>(Arrays.asList("PE", "PB", "BA", "MA")));
mapa.put("Norte", new ArrayList<>(Arrays.asList("AM", "PA", "AC", "AP")));
System.out.println("Estados da regiao Sul: " + getEstados("Sul"));
}
private static ArrayList<String> getEstados(String regiao) {
return mapa.get(regiao);
}
Neste caso acima, criamos um mapa, onde o campo chave é o nome da região, e o campo valor é a lista com as siglas dos estados. No novo metodo, apenas estamos verificando no mapa, para retornar o valor da chave referente a regiao (no caso ali, a "Sul").
Assim, implementamos a mesma lógica, sem usar nenhum if-else. Além disso, utilizando essa abordagem, seu código pode trabalhar com dados dinamicos.
No primeiro caso, o método getEstados está totalmente hardcoded, então se algum novo estado fosse adicionado na lista, teria que alterar o código fonte. No segundo caso, utilizando o mapa, mesmo que um novo estado (ou até mesmo regiao) fossem adicionados, não mudaria nada no método getEstados, tornando assim o código mais escalável e fácil de manter.
Neste segundo caso, somente seria necessário alterar o código se a estrutura em si do mapa, com a chave String e o valor ArrayList fossem alterados para algum outro tipo de dado.