Gustavo Vedotti

Shortcuts e escrita de código

Posted in Padrão de Desenvolvimento, shortcuts by agvedotti on 10/27/2010

Quando estou codificando, sempre me atento ao layout do mesmo. Como identação, espaços desnecessários, retornos (enter) descenessários, nomenclaturas de variáveis e métodos, etc. Tudo isso é muito importante para se manter um código limpo e  preciso.

Outra coisa que fico de olho é na quantidade de linha de utilizada. Quanto menos código digitado me faz um programador melhor ou mais experiente? Talvez sim, talvez não… As vezes certos blocos de código podem ser representados de uma forma mais sucinta, dependendo da experiência do profissional na linguagem utilizada.

Isso pode ser um dilema em relação tamanho x qualidade na leitura do código. Quem nunca se deparou com um apanhado de código como esse:

switch (condition)
{
    case "cavalo":
        if (System.Configuration.ConfigurationManager.AppSettings["key1"] == "a" &&
            System.Configuration.ConfigurationManager.AppSettings["key2"] == "c")
            if (System.Configuration.ConfigurationManager.AppSettings["key3"] == "b" &&
                System.Configuration.ConfigurationManager.AppSettings["key4"] == "d")
                condition = string.Empty;
            break;
    case "cachorro":
            if (System.Configuration.ConfigurationManager.AppSettings["key1"] == "e" &&
                System.Configuration.ConfigurationManager.AppSettings["key2"] == "f")
                if (System.Configuration.ConfigurationManager.AppSettings["key3"] == "g" &&
                    System.Configuration.ConfigurationManager.AppSettings["key4"] == "h")
                    condition = string.Empty;
            break;
    default:
            break;
}

Meio confuso? Com certeza perderíamos alguns minutos só para conseguir entender o ele faz. Tudo isso por falta de utilização de chaves, namespace sitaxe desnecessária, confusão nas condições dentro dos ifs. Sem falar que o código parece fazer nada com nada! Não seria melhor algo utilizando mais linhas, contudo que mais legível?

Da forma estruturada abaixo está fácil de ser ler e podemos perceber que o código realmente não faz nada! (rs…)

switch (condition)
{
    case "cavalo":
        {
            if (ConfigurationManager.AppSettings["key1"] == "a"
                && ConfigurationManager.AppSettings["key2"] == "c")
            {
                if (ConfigurationManager.AppSettings["key3"] == "b"
                    && ConfigurationManager.AppSettings["key4"] == "d")
                {
                    condition = string.Empty;
                }
            }
            break;
        }
    case "cachorro":
        {
            if (ConfigurationManager.AppSettings["key1"] == "e"
                && ConfigurationManager.AppSettings["key2"] == "f")
            {
                if (ConfigurationManager.AppSettings["key3"] == "g"
                    && ConfigurationManager.AppSettings["key4"] == "h")
                {
                    condition = string.Empty;
                }
            }
            break;
        }
    default:
        break;
}

As linguagens de programação nos permitem certas praticidades para escrever menos código mas mantendo (ou tentando manter) a clareza em sua identificação. Vou demonstrar três sintaxes que conheco e utilizo regularmente, algumas são mais ou menos úteis que outras, comparando-as com a forma “normal” de escrita:

Operadores ternários

Exemplo em C#.

string name = ((condition == "gato") ? "Tom" : "Jerry");

Forma “normal”:

string name = string.Empty;
if (condition == "gato")
{
    name = "Tom";
}
else
{
    name = "Jerry";
}

&& lógico para condicionais

Exemplo em Java script.

var showMessage = true;
showMessage && alert(‘uuuuupa!’);

Forma “normal”:

var showMessage = true;
if (showMessage) {
    alert(‘uuuuupa!’);
}

Instâncias de classes “temporárias”

Exemplo em C#.

Console.WriteLine(new WeatherChannel("São Paulo”).GetTemperature());

Forma “normal”:

WeatherChannel wc = new WeatherChannel(“São Paulo”);
string temp = wc.GetTemperature();
Console.WriteLine(temp);

Conclusão

Tudo vai do gosto e bom censo do developer. O que precisamos ter sempre em mente é que outras pessoas podem dar manutenção em algo que fizemos. Então deixar o código o mais simples e legível possível é algo muito importante e o mínimo que podemos fazer!

Ta.

Tagged with: , ,