Dom, 15 de setembro de 2024
Esta semana foi toda sobre desafios de código, o que foi glorioso! Um desafio intrigante foi implementar um validador de cartão de crédito usando o algoritmo Luhn, que evita erros de cartão de crédito de um dígito e transposições adjacentes como 90 > 09. Codificar o algoritmo Luhn é bastante viável; vamos examinar minha implementação.
Primeiro, vamos entender do que se trata a Programação Funcional (FP). Em vez de ter uma função imperativa onde você coloca números de cartão de crédito na fila para teste, a verificação do número do cartão de crédito pode ser um método que você aplica diretamente às variáveis de número de cartão de crédito. Essa abordagem modular aumenta o valor do seu código porque ele pode ser usado de mais maneiras sem reescrevê-lo. Um efeito colateral no FP é que os dados se tornam a estrela - e não as funções, o que parece muito simplificado.
Para começar, usaremos uma função de seta de acordo com o paradigma FP. Isso é mais importante em funções de uma linha, mas ainda é prático.
Definir o último dígito: A primeira etapa no algoritmo Luhn é reservar o último dígito em uma variável que chamaremos de lastDigit. Isso segue um método padrão para acessar elementos de array usando o comprimento do array - 1, já que os arrays iniciam a numeração dos elementos em 0. O JavaScript fornece esse recurso nativamente para arrays.
Reverter a matriz: o algoritmo Luhn funciona em dígitos de cartão de crédito da direita para a esquerda. Para manter as coisas simples, inverteremos o array. JavaScript fornece dois métodos para simplificar esta operação: slice para selecionar do primeiro ao penúltimo elemento e reverse para inverter a ordem dos elementos na matriz. Atribuíremos isso a um novo array chamado allExceptLastReversed.
Duplar todos os outros elementos: a próxima etapa requer um controle mais preciso da iteração dos elementos da matriz do que os métodos iterativos do JavaScript fornecem, portanto, usaremos um loop for tradicional. Esta etapa envolve duplicar todos os outros elementos da matriz e, se o valor for maior que 9, subtrair 9.
Some os elementos e valide: agora estamos quase terminando. Queremos somar todos os elementos do array e verificar se eles são divisíveis por 10. JavaScript tem um método iterativo chamado reduzir que aplica uma função, normalmente soma ou produto, a cada elemento de um array e acumula o resultado. Aqui vamos somar os elementos da matriz fatiados invertidos, adicionar o lastDigit e verificar se a soma do módulo 10 é 0.
JavaScript também fornece comparações lógicas, para avaliar como verdadeiro ou falso, chamadas de valores booleanos, que são os valores de retorno da função. JavaScript torna a programação quase artística.
Este desafio foi uma maneira fantástica de mergulhar mais fundo nos paradigmas de programação funcional e imperativa. Ele destacou a importância de escrever código modular e reutilizável. À medida que continuo minha jornada de 100 dias de código, estou animado para enfrentar mais desafios e expandir minha compreensão de diferentes conceitos de programação. Cada dia traz novas oportunidades de aprender e crescer, e mal posso esperar para ver aonde essa jornada me levará.
Fique ligado para mais atualizações e boa programação! ?
Aqui está o código completo:
const validateCred = (cardNumber) => { const lastDigit = cardNumber[cardNumber.length - 1]; let allExceptLastReversed = cardNumber.slice(0, -1).reverse(); for (let i = 0; i 9) { allExceptLastReversed[i] -= 9; } } const sum = allExceptLastReversed.reduce((acc, curr) => acc curr, 0) lastDigit; // sum all digits return (sum % 10 === 0); };
Postagem cruzada: Dev https://dev.to/jacobsternx e LinkedIn https://www.linkedin.com/in/jacobsternx
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3