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

Novo nome para uma variável dentro de uma função

No vídeo 10 da aula 1 o professor cria uma nova função com os parâmetros "mapa" e "nova_posicao".

Ao refatorar a função, ele muda o nome do parâmetro "nova_posicao" para simplesmente "posicao" sem alterá-lo no momento em que a função é chamada, ou seja, no código ficou assim:

nova_posicao = calcula_nova_posicao(heroi, direcao)
        if !posicao_valida?(mapa, nova_posicao)

Mas na definição da função ficou assim:

def posicao_valida?(mapa, posicao)
    linhas = mapa.size
    colunas = mapa[0].size
    estourou_linhas = posicao[0] < 0 || posicao[0] >= linhas
    estourou_colunas = posicao[1] < 0 || posicao[1] >= colunas

    if estourou_linhas || estourou_colunas
        return false
    end

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

Ao rodar o programa, vemos que ele funciona normalmente, então a minha pergunta (composta de várias dúvidas) é:

Os parâmetros não deveriam ter o mesmo nome tanto na definição da função quanto ao invocá-la?

Se sim, porque o programa roda sem erros?

Se não, como são armazenados esses dados? É pela posição em que o parâmetro foi passado?

2 respostas
solução!

Olá Douglas,

Na criação de uma função você define os valores que quer receber e os nomes que quer utilizar dentro da função, nesse caso é (mapa, posicao)

Já ao executar a função tudo que você precisa é passar os valores corretos e na ordem correta, assim o primeiro valor passado é salvo na variável mapa e o segundo valor passado é salvo na variável posicao. Não importa se esses valores estão em uma variável com um nome diferente ou se você está passando os valores diretamente, exemplo:

def soma(primeiro_numero, segundo_numero)
  puts primeiro_numero + segundo_numero
end

idade = 10
idade2 = 12

# Passando os valores através de variáveis
soma(idade2, idade)
# primeiro_numero vai receber o valor de idade2
# segundo_numero vai receber o valor de idade

# Passando os valores diretamente
soma(9, 5)
# primeiro_numero vai receber o valor de 9
# segundo_numero vai receber o valor de 5

# Passando os valores misturados
soma(idade, 5)
# primeiro_numero vai receber o valor de idade
# segundo_numero vai receber o valor de 5

Espero ter ajudado, qualquer dúvida é só falar!

Obrigado Lucas, tinha ficado um pouco mais claro isso com o passar das aulas, mas você deixou transparente.