Explicação de Substituição de recursão
Objetivo deste desafio: Completar a função recursiva updateAllNames
.
Passo a passo da solução: A definição da função updateAllNames
não está correta. Ela apenas substitui o 1º erro ortográfico, que é a mesma coisa que o método .replace()
regular faz. Precisamos fazer com que a função substitua todos os erros ortográficos.
A 1ª parte da função é uma If Statement que verifica se a string
não inclui erros ortográficos. Isso é o mesmo que perguntar se todos os erros ortográficos desapareceram. Se não houver erros ortográficos, devemos apenas return
(retornar) a string
porque todo o trabalho está feito. Se essa verificação falhar, então ainda temos erros ortográficos a corrigir.
A próxima linha faz um .replace()
para corrigir o primeiro erro ortográfico que encontrar. Agora nossa string
está um pouco melhor, pois tem 1 erro ortográfico a menos. Mas ainda pode haver erros ortográficos. Devemos fazer algo para verificar se terminamos ou se há mais erros ortográficos a serem corrigidos. Surpreendentemente, temos uma função que já verifica se a string
não contém erros ortográficos, caso contrário corrige 1 erro ortográfico - a função updateAllNames
que estamos analisando!
Depois de termos feito nossa .replace()
(substituição), devemos chamar a função updateAllNames()
e return
(retornar) o valor: return updateAllNames(string, oldPart, newPart);
É quase como um laço, porque quando executamos updateAllNames()
logo na 1ª vez, ele provavelmente pedirá a si mesmo para ser executada de novo e de novo. Mas a parte importante é que cada vez que a função é chamada, há uma verificação imediata para ver se o trabalho foi feito. Isso se chama “caso básico”, em que não precisamos mais usar a recursão (fazer a função chamar a si mesma).
Além disso, cada vez que usamos a recursão, estamos nos aproximando do caso básico (sem erros ortográficos), porque estamos removendo 1 erro ortográfico de cada vez. Assim, acabaremos nos livrando de todos os erros ortográficos e a recursão é concluída.
Solução do código de exemplo:
(Toque abaixo para revelar)
function updateAllNames(string, oldPart, newPart) {
if (string.includes(oldPart) === false) {
return string;
}
string = string.replace(oldPart, newPart);
return updateAllNames(string, oldPart, newPart);
}
console.log(travelDocument);
console.log(updateAllNames(travelDocument, 'grasshoper', 'grasshopper'));
Conceitos de JavaScript: Bloco de código (função, if statement), console.log()
, Recursão, .replace()
Código Adicional (código oculto executado antes do código do desafio):
let travelDocument =
`Hello grasshoper${pickRandom(['','Travel','Passport','Ticket','Plans','Vacation','Holiday','Trip'])}!
You will be going to ${pickRandom(['New Zealand','Cyprus','the Maldives','Oahu','Palawan','Bali','Maui'])}.
Your travel code is: "${pickRandom(['grasshoper8ugs','im1grasshoper','no1grasshoper'])}"
Enjoy your trip grasshoper!`;