2024年9月15日(日)
今週はコードチャレンジばかりで、素晴らしい内容でした!興味深い課題の 1 つは、Luhn アルゴリズムを使用したクレジット カード バリデータの実装でした。これにより、1 桁のクレジット カード エラーや、90 > のような隣接する転置が防止されます。 09. Luhn アルゴリズムのコーディングはかなり達成可能です。私の実装を見ていきましょう。
まず、関数型プログラミング (FP) とは何なのかを理解しましょう。クレジット カード番号の検証は、テストのためにクレジット カード番号をキューに入れる必須関数を用意する代わりに、クレジット カード番号の変数に直接適用する方法として使用できます。このモジュール式のアプローチにより、コードを書き直すことなくより多くの方法で使用できるため、コードの価値が高まります。 FP の副作用の 1 つは、関数ではなくデータが主役になり、非常に合理化されたように見えることです。
まず、FP パラダイムに従ってアロー関数を使用します。これは 1 行の関数ではより重要ですが、それでも実用的です。
最後の桁を確保する: Luhn アルゴリズムの最初のステップは、最後の桁を lastDigit という名前の変数に確保することです。これは、配列の要素番号付けが 0 から始まるため、配列の長さ - 1 を使用して配列要素にアクセスする標準的な方法に従います。JavaScript は、この機能を配列に対してネイティブに提供します。
配列を反転する: Luhn アルゴリズムは、クレジット カードの数字を右から左に処理します。物事を簡単にするために、配列を逆にします。 JavaScript には、この操作を簡略化するための 2 つのメソッドが用意されています。1 つ目から最後から 2 番目の要素を選択するスライスと、配列内の要素の順序を逆にするリバースです。これを allExceptLastReversed という名前の新しい配列に割り当てます。
他の要素ごとに 2 倍にする: 次のステップでは、JavaScript の反復メソッドが提供するよりも配列要素の反復をより細かく制御する必要があるため、従来の for ループを使用します。この手順では、配列要素を 1 つおきに 2 倍にし、値が 9 より大きい場合は 9 を減算します。
要素を合計して検証: これでほぼ完了です。すべての配列要素を合計し、それらが 10 で割り切れることを確認したいと思います。JavaScript には、関数 (通常は合計または積) を配列内のすべての要素に適用し、結果を累積する、reduce という名前の反復メソッドがあります。ここでは、反転してスライスされた配列要素を合計し、lastDigit を追加し、10 を法とする合計が 0 であるかどうかを確認します。
JavaScript は、関数の戻り値であるブール値と呼ばれる、true または false として評価される論理比較も提供します。 JavaScript を使用すると、プログラミングがまるで芸術的になります。
この課題は、関数型プログラミング パラダイムと命令型プログラミング パラダイムの両方をさらに深く掘り下げる素晴らしい方法でした。これは、モジュール化された再利用可能なコードを作成することの重要性を強調しました。 100 日間のコードの旅を続ける中で、さらに多くの課題に取り組み、さまざまなプログラミングの概念について理解を深めていきたいと思っています。毎日、新たな学びと成長の機会がもたらされます。この旅が次に私をどこへ連れて行ってくれるのかを見るのが待ちきれません。
さらなる最新情報を楽しみにお待ちください。コーディングを楽しんでください! ?
完全なコードは次のとおりです:
const validateCred = (cardNumber) => { const lastDigit = cardNumber[cardNumber.length - 1]; let allExceptLastReversed = cardNumber.slice(0, -1).reverse(); for (let i = 0; i < allExceptLastReversed.length; i += 2) { allExceptLastReversed[i] *= 2; if (allExceptLastReversed[i] > 9) { allExceptLastReversed[i] -= 9; } } const sum = allExceptLastReversed.reduce((acc, curr) => acc + curr, 0) + lastDigit; // sum all digits return (sum % 10 === 0); };
クロス投稿: Dev https://dev.to/jacobsternx および LinkedIn https://www.linkedin.com/in/jacobsternx
以上がコードの日 / 日: クレジット カード バリデーター チャレンジの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。