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 9) { allExceptLastReversed[i] -= 9; } } const sum = allExceptLastReversed.reduce((acc, curr) => acc curr, 0) lastDigit; // sum all digits return (sum % 10 === 0); };
クロス投稿: 開発 https://dev.to/jacobsternx および LinkedIn https://www.linkedin.com/in/jacobsternx
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3