terça-feira, 29 de dezembro de 2020

Java: Switch e Strings

 Diferente de muitas linguagens, a linguagem JAVA permite desde a versão 1.7 utilizar Strings como controle de fluxo. O exemplo abaixo mostra como podemos utilizar:

String str = "Olá! Está aí?";
switch(str){
    case "Tchau":
        System.out.println("Tchau");
        break;
    case "Olá! Está aí?":
        System.out.println("Sim, estou");
        break;
    default:
        System.out.println("Não entendi");
}

O código acima seria o equivalente ao código abaixo realizado com if-else em cascata, mas é mais elegante utilizar da maneira acima, além de que o bytecode gerado é mais eficiente:

String str = "Olá! Está aí?";
if (str.equals("Tchau")){
    System.out.println("Tchau");

}else if (str.equals("Olá! Está aí?")){
      System.out.println("Sim, estou");

}else{
        System.out.println("Não entendi");
}


Android+Gradle: Depreciação da configuração de dependência

Não sei exatamente quando, mas retomando um projeto, eu me deparei diversos avisos como esse:

"Configuration 'androidTestCompile' is obsolete and has been replaced with 'androidTestImplementation' and 'androidTestApi'.
It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html"

Então foi que eu fiz, visitei o link, mas como temos alguns artigos que fiz, então vamos ver o que precisei mudar e o que recomendo.

Bem, vamos começar com a mensagem acima: o comando "androidTestCompile" vai ser substituído pelo "androidTestImplementation" e "androidTestApi". Entretanto, é curioso porque uma outra mensagem é a seguinte:

"Configuration 'androidTestApi' is obsolete and has been replaced with 'androidTestImplementation'.
It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html"
Bem, agora só sobrou nós utilizarmos "androidTestImplementation".

A próxima mensagem é a seguinte:
"Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.
It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html"
Essa mensagem aparece quando usamos uma biblioteca externa, mas qual é a diferença? Quando você usa "implementation", você está garantindo o encapsulamento da biblioteca, enquanto que a "api" permite visualizar e manipular arquivos internos. Dica de ouro? Troque para "implementation" em aplicativos em geral e aprenda a respeitar o encapsulamento, pois se está privado, é porque você não deve mexer com tais objetos. Se você está mexendo com bibliotecas para ser distribuído, use "api".

Ah! Existe uma terceira possibilidade para substituir o "compile" que é "annotationProcessor", use-o quando você quer utilizar uma biblioteca de anotações.