Um pequeno post é dedicado a todos os fãs de Star Wars e Java/JavaRush em homenagem ao 40º aniversário do lançamento do Episódio V da saga estelar! Às vezes você pode encontrar muitas coisas interessantes na Internet, e outro dia me deparei com uma prática de programação bastante engraçada, à primeira vista, chamada condições Yoda . Resumindo, as condições Yoda (também notação Yoda) são um estilo de programação no qual as duas partes da expressão de comparação familiar em declarações condicionais são invertidas:
nove seis partes da Saga, nós, sem dormir, nos sentamos para escrever algum código para nosso projeto favorito e escrevemos o seguinte:
if (5 == a) {
// do something
}
Este estilo pode ser usado em linguagens com sintaxe semelhante a C, mais frequentemente em expressões com if
e while
.
if (0 == variable) {
// do something
}
while (false == endingCondition) {
// do something
}
Por que mudar a expressão constante para o lado esquerdo do operador de comparação? Vamos supor uma situação hipotética em que, após uma maratona de visualização de todas as void checkNumber(int a)
{
if (a = 13) // Здесь-то и появляется так называемый unexpected behavior!
{
printf("Number is 13");
}
}
Neste caso, toda vez que você executar o programa, você receberá a string Number is 13"
, independente do argumento passado а
para o método checkNumber(int a)
. Isto não é o que esperávamos! Erros lógicos podem ocorrer com bastante frequência entre programadores novatos (acredite, eu SEI). Mas na fase de compilação, um código como 13 = a produzirá um erro, que certamente não iremos ignorar, uma vez que o valor inteiro é uma constante e, portanto, não pode mudar (transformar-se em “a”).
Existem prós e contras em usar as condições do Yoda.
Lado claro:
-
Impedir a atribuição a uma variável quando nosso objetivo é comparação.
-
Resolvendo o problema do "comportamento nulo" inseguro (
NullPointerException
) // exemplos da Wikipedia
Sem Yoda:
String myString = null;
if (myString.equals("foobar")) { /* ... */ }
// This causes a NullPointerException in Java
Com Yoda:
String myString = null;
if ( "foobar".equals(myString) ) { // Результат - Ложь
/* не выполняется */
}
Lado escuro:
- A legibilidade do código para quem irá olhar seu código torna-se mais complexa, aumentando a carga na percepção do código.
- Escopo estreito, apenas a comparação para igualdade ou comparação com uma constante é usada, verificando se há nulo.
- Muitos compiladores já “vêem” erros desse tipo e avisam antecipadamente sobre a presença de um erro potencial.
GO TO FULL VERSION