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.

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