Ir para conteúdo

[UTIL] Simulando "step" do Kotlin no Java.


Pica-Pau

Posts Recomendados

Bom, alguns não devem conhecer o Kotlin mas é uma linguagem de programação que compila pra JVM do Java.

Há muitas coisas no Kotlin que não há no Java, como por exemplo o ``step, rangeTo, until e outras "funções" e diretivas que são extremamente úteis no Kotlin e poderiam ser no Java.

 

Hoje eu vou mostrar pra vocês uma classe que eu fiz que "simula" o algumas dessas funções e adiciona o goTo para mudança dinâmica no loop sem prejudicar a posição atual do mesmo.

 

Você pode ver a source e um exemplo neste GIST, a simulação e exemplo estão nos comentários do mesmo.

Exemplo:
 

Step.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) // collection or array
                .in(0, 10) // AKA between
                .until(3, 4) // AKA ignore
                .step(2) // AKA jump
                .goTo(8) // AKA startAt
                .forEach(it -> {
                    System.out.println("Index (loop: " + it.index + ", original: " + it.originalIndex + ")");
                    /*
                        The variable "goTo" is dynamically changeable, while the other class variables are not.
                        You can change it independently if the process is running.
                        Changing it will cause the current position to change to the position defined in this variable.
                        You can use it directly in class construction to start in a specific position.
                        The variable returns to its original state shortly after it is used.
                        To remove it set its value to 0.
                     */

                    // INFINITE LOOP
                    if(it.index == 8) {
                        it.goTo = 2;
                        System.out.println("To infinity and beyond!");
                    }

                    if(it.index == 5) {
                        it.stop(); // STOP IT!
                        System.out.println("They cut my cheap = (");
                    }
                });

 

Resultado:
 

Index (loop: 8, original: 0)
To infinity and beyond!
Index (loop: 3, original: 1)
Index (loop: 4, original: 2)
Index (loop: 5, original: 3)
They cut my cheap = (

Process finished with exit code 0

 

Oque vemos neste exemplo:

  • O uso do goTo para iniciar de uma posição específica o loop, e também alterar a posição atual do loop mesmo enquanto o mesmo está sendo executado.
  • Vemos que temos 2 tipos de index: a do loop e a original. O bom desta classe é que ela preserva ambas posições para que quem esteja usando não fique tendo problemas com obter elementos em uma array ou Collection por não ter a index original preservada.
  • Nós conseguimos INTERROMPER COMPLETAMENTE o loop a hora que quisermos usando o método stop().
  • Podemos retornar qualquer variável da classe Step dentro do forEach(...) sem ter que criar variáveis finais temporárias.

Esta classe ainda conta com funções como until(...) e step(...).

Saiba mais sobre Range e IntProgression na documentação da linguagem Kotlin:

https://kotlinlang.org/docs/reference/ranges.html

Link para o comentário
Compartilhar em outros sites

Participe da Conversa

Você pode postar agora e se cadastrar mais tarde. Se você tiver uma conta, a class='ipsType_brandedLink' href='https://gamersboard.com.br/login/' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title='Sign In Now'>acesse agora para postar com sua conta.
Observação: sua postagem exigirá aprovação do moderador antes de ficar visível.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.

Processando...
×
×
  • Criar Novo...