私はたいてい、コードを書いてから 6 か月後、睡眠不足で午前 3 時にコードを保守して修正できるかどうか自問します。それは私によく役立っています。あなたの式を見ると、できるかどうかわかりません。
昔、保険業界で働いていました。私の同僚の何人かは、数理式をコードに変換する任務を負っていました。最初は FORTRAN、後に C でした。数学とプログラミングのスキルは、同僚によって異なりました。私が学んだことは、彼らのコードを見直す次のことでした:
- 実際の式をコードで文書化します。それがなければ、何年も後に実際の式を思い出すのに苦労するでしょう. 外部ドキュメントが失われたり、古くなったり、単にアクセスできなくなったりする可能性があります。
- 文書化、再利用、テストが可能な個別のコンポーネントに数式を分割します。
- 定数を使用して方程式を文書化します。マジックナンバーはコンテキストがほとんどなく、多くの場合、他の開発者が理解するには既存の知識が必要です。
- 可能であれば、コンパイラーに依存してコードを最適化してください。優れたコンパイラは、メソッドをインライン化し、重複を減らし、特定のアーキテクチャ用にコードを最適化します。場合によっては、パフォーマンスを向上させるために式の一部を複製することがあります。
とは言うものの、特に特定のコンテキスト内でそれらの値がよく理解されている場合は、ハードコーディングが物事を単純化するだけの場合があります。たとえば、値をドルに変換しているため、何かを 100 または 1000 で除算 (または乗算) します。もう 1 つは、時間を秒に変換したい場合に 3600 を掛けることです。それらの意味は、より大きな文脈から暗示されることがよくあります。以下は、マジック ナンバー 100 についてあまり語っていません。
public static double a(double b, double c)
{
return (b - c) * 100;
}
しかし、以下はより良いヒントを与えるかもしれません:
public static double calculateAmountInCents(double amountDue, double amountPaid)
{
return (amountDue - amountPaid) * 100;
}