Godot: algum tipo de bloco de tentativa (ou exceto) para gdscript

Criado em 30 jan. 2016  ·  13Comentários  ·  Fonte: godotengine/godot

Em Python é chamado de try, exceto em Java, tente pegar finalmente. Execute o código dentro do bloco try se ele falhar, execute o bloco finally em vez disso. Isso pode simplificar muito a codificação no script gd, removendo todos os travamentos. Você não terá mais que se preocupar com códigos ruins. Às vezes, você pode querer ter 1 código trabalhando em um dado dinâmico e não ter que construir protetores de falha extras no caso de dizer que não há dados lá.

TODOS os erros de um bloco de tentativa com falha sempre aparecerão na janela de depuração de qualquer maneira (captura automática), então mesmo que você não precise se preocupar, você ainda pode ver que seu código está incorreto.

Experimente
... codifique aqui
finalmente
... codifique aqui

archived feature proposal gdscript

Comentários muito úteis

@ salvob41 neste caso, você pode usar isto:

if is_instance_valid(object):
    #Do what you want if the node exists

@Kotzuo , isso nem sempre funciona, pois não é determinístico o fluxo de execução. a função process é perigosa

você está absolutamente, 100% correto ...... é um padrão perigoso

no caso de fazer código de rede, porém, são calças marrons! a coisa às vezes pode se desconectar entre obter os códigos de status de conexão!

é um pouco cansativo em GDScript essa defesa de outras pessoas que não têm (ou não acham que têm) esse problema ... e sugerindo a elas, talvez outras pessoas codifiquem com padrões diferentes. Talvez você esteja codificando "certo" e o meu método esteja "errado" ... não sei, mas já codifiquei com sucesso dessa forma por vários anos e agora obter esse recurso não os forçaria a usá-lo, mas não o ter me força a codificar como eles.

Se tivermos uma instrução try and catch, ninguém precisará usá-la ... pessoas como eu e esse cara a querem como um recurso para codificarmos da maneira que gostamos

Todos 13 comentários

Hmm, para mim eu prefiro travamentos no meu programa a comportamentos estranhos devido a código ruim. Por favor não pegue
errado, eu adoro exceções, quando elas são feitas da maneira certa.

Eu acredito que isso deve ser deixado para a v2.1 para o novo script digitado estaticamente (misturado com recursos "dinâmicos", talvez?).

Exceções não acontecerão. Godot é projetado para que as coisas continuem funcionando mesmo
se o estado for inconsistente, ao mesmo tempo em que relata erros

No sábado, 30 de janeiro de 2016 às 8h18, RebelliousX [email protected]
escreveu:

Hmm, para mim eu prefiro travamentos no meu programa a comportamentos estranhos devido a problemas
código. Por favor não pegue
errado, eu adoro exceções, quando elas são feitas da maneira certa.

Eu acredito que isso deve ser deixado para v2.1 para o novo estaticamente (misturado com
recursos "dinâmicos", talvez?) script digitado.

-
Responda a este e-mail diretamente ou visualize-o no GitHub
https://github.com/godotengine/godot/issues/3516#issuecomment -177151923.

é uma ideia, pense nisso. digamos, por exemplo, que você tenha um monte de imagens em uma pasta e queira abri-las todas como um tileset, mas diga que não há imagens, nada deve acontecer. embora possa parecer que você pode simplesmente verificar se há nulo na pasta, seu código é realmente mais simples em um bloco de teste TENTAR para fazer isso, se não, isso é legal. todo o conceito de código de pato é ainda mais código de pato.

Além disso, até mesmo o python tem que tentar, exceto que faz a mesma coisa que estou propondo, então não é inédito

sim, isso foi avaliado e considerado por muito tempo, vendo prós vs contras.
exceções não serão adicionadas

No sábado, 30 de janeiro de 2016 às 8h45, trollworkout [email protected]
escreveu:

é uma ideia, pense nisso. digamos, por exemplo, você tem um monte de imagens em um
pasta você quer abri-los todos como um tileset, mas diga que não há imagens
Nada deve acontecer. embora possa parecer que você pode simplesmente verificar se há nulos
na pasta seu código é realmente mais simples em um bloco de tentativa TENTE para fazê-lo se
não é legal. todo o conceito de código de pato é ainda mais código de pato.

Além disso, até mesmo o python tenta, exceto que faz a mesma coisa que estou propondo
não é inédito

-
Responda a este e-mail diretamente ou visualize-o no GitHub
https://github.com/godotengine/godot/issues/3516#issuecomment -177155429.

sem problemas :)

Nunca aconteceu com você que você verifica se a função de processo de um nó se uma instância de um nó é válida e depois falha porque "o índice não é válido para uma instância anterior liberada"?

Uma vez que o erro não é determinístico e pode fazer o jogo travar imediatamente (e isso é irritante, especialmente porque em um jogo exportado que não é relatado de forma alguma). Um try, catch resolveria o bug de uma forma extremamente limpa e simples.

Esta ainda é uma FIRM não?

@ salvob41 neste caso, você pode usar isto:

if is_instance_valid(object):
    #Do what you want if the node exists

@ salvob41 neste caso, você pode usar isto:

if is_instance_valid(object):
    #Do what you want if the node exists

@Kotzuo , isso nem sempre funciona, pois não é determinístico o fluxo de execução. a função process é perigosa

@ salvob41 neste caso, você pode usar isto:

if is_instance_valid(object):
    #Do what you want if the node exists

@Kotzuo , isso nem sempre funciona, pois não é determinístico o fluxo de execução. a função process é perigosa

você está absolutamente, 100% correto ...... é um padrão perigoso

no caso de fazer código de rede, porém, são calças marrons! a coisa às vezes pode se desconectar entre obter os códigos de status de conexão!

é um pouco cansativo em GDScript essa defesa de outras pessoas que não têm (ou não acham que têm) esse problema ... e sugerindo a elas, talvez outras pessoas codifiquem com padrões diferentes. Talvez você esteja codificando "certo" e o meu método esteja "errado" ... não sei, mas já codifiquei com sucesso dessa forma por vários anos e agora obter esse recurso não os forçaria a usá-lo, mas não o ter me força a codificar como eles.

Se tivermos uma instrução try and catch, ninguém precisará usá-la ... pessoas como eu e esse cara a querem como um recurso para codificarmos da maneira que gostamos

É uma decisão difícil. Mas, uma vez que godot não lida muito bem com erros, podemos tentar envolver cada retorno nulo / erro em outra linguagem que suporte o tratamento de erros da maneira que desejamos.
Swift é uma boa alternativa :

O tratamento de erros em Swift se assemelha ao tratamento de exceções em outras linguagens, com o uso das palavras-chave try, catch e throw. Ao contrário do tratamento de exceções em muitas linguagens - incluindo Objective-C - o tratamento de erros no Swift não envolve o desenrolar da pilha de chamadas, um processo que pode ser caro do ponto de vista computacional. Como tal, as características de desempenho de uma declaração de lançamento são comparáveis ​​às de uma declaração de retorno.

Não deve ser um problema se houver uma maneira de usar o Swift. Sou um iniciante em godot e ouvi dizer que existe uma maneira de vincular outras línguas dinamicamente ...
Oh, outra boa notícia. Em 2020, o swift adicionará suporte oficial para janelas.
Eu sou um total novato nesse assunto, mas pode haver uma maneira de obtermos o tratamento de erros sem 1 mil instruções if e fluxo lógico opcional.

sim, isso foi avaliado e considerado por muito tempo, vendo prós vs contras.
exceções não serão adicionadas

No sábado, 30 de janeiro de 2016 às 8h45, trollworkout [email protected]
escreveu:

é uma ideia, pense nisso. digamos, por exemplo, você tem um monte de imagens em um
pasta você quer abri-los todos como um tileset, mas diga que não há imagens
Nada deve acontecer. embora possa parecer que você pode simplesmente verificar se há nulos
na pasta seu código é realmente mais simples em um bloco de tentativa TENTE para fazê-lo se
não é legal. todo o conceito de código de pato é ainda mais código de pato.
Além disso, até mesmo o python tenta, exceto que faz a mesma coisa que estou propondo
não é inédito
-
Responda a este e-mail diretamente ou visualize-o no GitHub
# 3516 (comentário) .

Bem, já se passaram 4 anos desde que este tópico começou (e acabou), e ainda há pessoas que enfrentam esse problema (eu, por exemplo). Eu tentei ! = Null , is_instance_valid , não adianta, porque o estado do nó referenciado simplesmente muda entre a verificação de validade e o método de chamada para referência. Try .. catch ( exceto , qualquer que

@reduz reabra isto.
Eu quero lidar com json para que ele não trave o editor quando atribuo um tipo inválido.
Godot não é algo que eu consideraria estável, ele trava em mim diariamente devido ao gdscript não ser digitado estaticamente

@ Shadowblitz16 Isso já foi discutido longamente e agora está claro que as exceções não serão adicionadas ao GDScript. Se você quiser usar exceções, use outra linguagem que as suporte, como C #.

Esta página foi útil?
0 / 5 - 0 avaliações