Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Uso do operador ! "not"

def posicao_valida?(mapa, posicao)
        linhas = mapa.size
        colunas = mapa[0].size

        estourou_linha = posicao[0] < 0 || posicao[0] >= linhas 
        estourou_coluna = posicao[1] < 0 || posicao[1] >= colunas 

        if estourou_linha || estourou_coluna
            return false
        end

        if mapa[posicao[0]][posicao[1]] == "X"
            return false
        end

    true
end


if !posicao_valida?(mapa, nova_posicao)
        next
    end

O uso do do operador ! é para inverter o resultado logico da expressao e nos possilitar sair deste laço ?

3 respostas

Eduardo,

nesse caso ele vai testar se a posição não é válida. Perceba que há um if e um método posicao_invalido "negado". Seria algo assim:

Pergunta no programa: A posição não é válida? Resposta em execução: Não, não é. Ação do programa: então pula para o próximo.

Esse código executa em um laço de repetição, certo? Então para não quebrar em caso de uma posição não ser válida, existe esse método com a negação no começo, fazendo com que o próximo mapa com uma posição válida seja chamado em caso desse que eu "tenho na mão" durante o laço não seja válido.

João,

Então fiquei refletindo sobre o uso do not (!) E justamente

def posicao_valida?(mapa, posicao)
        linhas = mapa.size
        colunas = mapa[0].size

        estourou_linha = posicao[0] < 0 || posicao[0] >= linhas 
        estourou_coluna = posicao[1] < 0 || posicao[1] >= colunas 

        if estourou_linha || estourou_coluna
            return false
        end

        valor_local = mapa[posicao[0]][posicao[1]] 
        if valor_local == "X" || valor_local == "F"
            return false
        end

    true
end

E por exemplo, retornamos um false para nosso If

if !posicao_valida?(mapa, nova_posicao) next end

ele irá inverter e entrar nessa condição e cair no next que volta la pro inicio, que irá pedir todas coordenadas :D

E caso nossa validação nos desse return true ?

Ia enviar esse true para posição_valida? que ia inverter com o not e como ficaria false, iria cair fora desse condicional e prosseguir com o codigo normalmente :DDD

solução!

A melhor maneira de validar o comportamento de um programa, é criando uma situação onde ele falhe e você consiga ver o resultado dessa falha. Teste um caso com a posição inválida, veja o resultado depois.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software