Eu só estava pensando em algo que seria muito legal de ter nos meus controles if-elif-else.
if condition:
stuff()
elif condition:
otherstuff()
then:
stuff_that_applies_to_both()
else:
stuff_that_doesnt_aply_to_either()
Então, basicamente, um then
será executado quando qualquer uma das condições for executada, EXCETO a condição else. Você acha que isso é útil? É semelhante ao try-except-else do python.
Eu acho que alguns de vocês estão sugerindo uma implementação muito preliminar. O then
bloco seria como o else
bloco de um try-except
bloco em python. A verdadeira razão pela qual sugiro isso é para situações como essa.
m = {}
if condition == '1':
m['condition'] = condition
elif condition2 == '3':
m['condition2'] = condition2
elif condition3 == 'False':
m['condition3'] = True
then:
run_test_that_relies_on_one_of_the_conditions_being_true()
return m
O then
bloco tem o escopo definido para o primeiro, exatamente como o else
é. Portanto, o aninhamento funciona bem. E se você precisar executar um método antes das instruções if, isso realmente não tem nada a ver com este caso de uso.
finally
em Java?then
um pouco confuso. Geralmentethen
está implícito que ocorre após umif
. Quero dizer, você está dizendo,if condition, then stuff()
mas prossegue dizendothen stuff that applies to both
Respostas:
Eu acho que parece horrível. Se você deseja que o código seja executado após uma variedade de condições, (a) verifique novamente essas condições ou (b) defina uma variável para o status de sucesso indicado.
fonte
Geralmente, você já pode fazer isso com um switch / case e um switch / case fornece um controle mais preciso sobre o que você está propondo.
Também não lê corretamente logicamente. Se A mais se B, então C. Não implica a alguém que C será executado se A ou B avaliarem como verdadeiro.
fonte
Interessante, mas me parece (reconhecidamente um pouco definido), um convite para problemas de legibilidade, lógica e sintaxe.
Edit:
Seu if-elif é muito simples - e se houvesse 10 elifs? 20? Todas as condições precisariam ser verdadeiras? Quais são as chances disso?Seu if-elif é muito simples - e se houvesse 10 elifs? 20? Isso não tornaria isso ilegível?
Além disso, pode ser facilmente alcançado pela metodologia estabelecida testada e comprovada:
O que acontece se "stuff_that_applies_to_both" precisar acontecer antes das etapas individuais? Seu código não lida com este caso:
Por fim, essa sintaxe permite maior flexibilidade com mais condições: if (thisCondition ou thatCondition ou outraCondition) {stuff_that_applies_to_all ();
Eu tenho usado if / else, mas poderia ter usado tão facilmente uma instrução switch com um sinalizador:
Observe que, na verdade, eu não precisava do sinalizador conditionApplies - eu poderia ter adicionado a função "stuff_that_applies_to_both ()" a ambas as condições não padrão - apenas fiz isso para que pareça mais com a sintaxe definida acima, embora com o "then" ao invés do "outro".
Portanto, parece-me uma sintaxe muito especializada, onde uma sintaxe mais geral preenche a conta e muito mais.
+1 por pensar em um recurso possível (continue fazendo isso!), Mas eu não votaria para implementá-lo.
fonte
what if there were 10 elifs? 20? Would all conditions need to be true?
Isso não é possível. apenas 1 elif pode ser verdadeiro porque para de avaliar mais.Hoje eu não me importaria de usar algo assim. Mas, para ter certeza, eu o usaria tantas vezes quanto repito até.
O código pareceria pelo menos melhor sem o aninhamento supérfluo. Embora eu prefira
Else If
aelif
. Eu substituiria oThen
comDo
e o finalElse
porOtherwise
.fonte
Parece uma ideia legal. No entanto, o único problema que imagino é que você é mais propenso a erros. Como escrever um if / else if e chamar blah () então. Escreva um outro extra se isso não quiser blá, removendo blá e adicione-o aos seus ifs / elseifs. Então, quando você ou outro programador adicionar outra declaração, poderá esperar que blá seja chamado, mas não.
Ou você pode ter vários ifs, escrever um blá e esquecer todos os ifs, exceto um que exige isso, o que quebraria alguma coisa. Também há chances de que você precise seguir todos os itens, se você o colocar sob o bloco if. Possivelmente definindo um bool em else (NoUpdate = true) e basta escrever um if (! NoUpdate) {} diretamente sob o qual é mais claro e pode ser definido por um if
Só estou dizendo que parece mais propenso a erros, não que eu não goste da idéia. Eu não me importaria de vê-lo em um idioma, mas não consigo imaginar nenhuma situação em que eu o usaria se meu idioma o apoiar.
fonte
Possibly setting a bool in else (NoUpdate=true) and just write a if(!NoUpdate) {} directly under which is clearer and can be set by an if
Isso é EXATAMENTE o que isso deve impedir. Esse é o objetivo de uma declaração elif. O Elif também não é necessário, pode ser verificado com instruções if, mas fica complicado.Acho sua sintaxe confusa, mas vejo algum valor no conceito. Conceitualmente, quando considero o problema, o que me vejo querendo é um "descuidado", que basicamente executaria coisas nos casos em que o último
else
não foi acionado . Olhando por esse ângulo, sugiro que se possa obter um resultado semelhante via:Outra opção pode, em alguns casos, ser:
Um pouco desagradável, mas em alguns casos pode não haver uma boa maneira de expressar a sequência desejada de eventos além de duplicar o código ou usar
goto
(o que pode não ser tão ruim, exceto pelo desenho animado que alguém possa inserir aqui).fonte