2
respostas

Sobre o exercício "Cifra de César e seus movimentos"

Olá, nesse código:

const senhaSecreta = "alura";

function cifrarMensagem (mensagem, movimentos){
  const mensagemCifrada = mensagem.split('').map((caractere) => {
    const codigoCaractere = caractere.charCodeAt(0);    
    return String.fromCharCode(codigoCaractere + movimentos)
  })

  return mensagemCifrada.join("")
}

const mensagemCifrada = cifrarMensagem(senhaSecreta, 4);

console.log(mensagemCifrada)

A constantane mensagemCifrada, no final da execução, não deveria ter o último caracter? Ou seja, o último caracter da string "alura"? Pois em cada iteração do map é atribuído um caracter à constante mensagemCifrada, certo? E não tem algo como o operador += na atribuição de mensagemCifrada.

Não sei se fui claro em minha dúvida, caso não tenha sido claro peço que indiquem a falta de exatidão da minha questão.

Grato pela ajuda.

2 respostas

Oi, Tiago! Tudo bem?

O que está ocorrendo no nosso código é o seguinte: na função cifrarMensagem estamos buscando cifrar uma mensagem, para isso passamos dois parâmetros para essa função, mensagem e movimentos, de forma que mensagem se refere à palavra que vai ser cifrada e movimentos se refere ao deslocamento que será feito em cada caractere da mensagem original através da movimentação das posições de cada caractere para a frente na tabela ASCII.

Dessa forma, a função cifrarMensagem irá receber "alura" como o parâmetro mensagem, logo "alura" será a palavra a ser cifrada. Em seguida, a função split('') irá converter a string "alura" em um array de caracteres individuais, contendo os caracteres ["a", "l", "u", "r", "a"].

Após isso, a função map é aplicada a esse array, e para cada caractere, o código ASCII correspondente é obtido usando charCodeAt(0). Em seguida, é adicionado o valor de movimentos a esse código para obter o código do caractere cifrado. Ou seja, é incrementado 4 ao valor da posição do código Unicode na tabela ASCII para cada caractere, ocorrendo para cada caractere a conversão como podemos observar na imagem abaixo da tabela ASCII:

tabela ASCII

Após isso, a função String.fromCharCode é usada para converter os valores Unicode em caracteres correspondentes. Dessa forma, o array de caracteres caracteres ["a", "l", "u", "r", "a"] se transforma no array de caracteres ["e", "p", "y", "v", "e"], um novo array com os caracteres cifrados.

Em seguida, a função join("") é usada para unir todos os caracteres do array em uma única string, que é retornada pela função cifrarMensagem. Por isso o retorno do código é a string "epyve".

Espero ter ajudado na compreensão do problema. Caso tenha ficado alguma dúvida, sinta-se à vontade em comunicar, estou à disposição!

Um forte abraço e bons estudos!

Caso este post tenha te ajudado, por favor, marcar como solucionado ✓

Obrigado pela atenção. Vou tentar ser mais claro sobre minha dúvida.

Na primeira iteração é retornado "e" para mensagemCifrada, assim por diante até a última iteração. Na última iteração é retornado "e" para a variável. Não entendi o porque de a variável mensagemCifrada não ter apenas o valor dessa última iteração. Me parece que devetia ter uma concatenação na variável mensagemCifrada para cada caracter que essa variável recebe.

Caso possa responder essa questão específica fico grato.