10

私の個人的なプログラミングの悪魔の 1 つは、if ステートメント (または類似のもの) によって制御する必要がある複雑なロジックです。必ずしもそれほど複雑であるとは限りません。

「状態」を確認し、コードをリファクタリングして結果のコードを簡素化するための手段を講じるために、設計時に開発者が実行できるツールや手順はありますか? 私はそれらの線に沿ってマトリックスまたは何かを作成することを考えています...?

4

12 に答える 12

17

志望するすべてのプログラマーに、命題論理の基本コースを受講することをお勧めします。最初は、表記法とギリシャ文字は数学が苦手な人には不快に思えるかもしれませんが、実際にはスキルセットの中で最も強力な (そしてしばしば無視されている) ツールの 1 つであり、核心はかなり単純です。

基本演算子de Morganおよびその他の基本法則真理値表、および論理和および論理和正規形などの存在は、私にとって目を見張るものでした。それらについて知る前は、条件式は危険な獣のように感じていました。それ以来、重砲を破壊することで、必要なときにいつでも彼らを服従させることができることを知っています!

于 2009-03-09T13:16:49.627 に答える
5

真理値表は基本的に網羅的なアプローチであり、(うまくいけば) すべての可能性を強調します。

Microsoft Pexをご覧になることをお勧めします。これは、考えもしなかったフリンジ ケースを見つけるのに役立ちます。

于 2009-03-09T13:17:45.363 に答える
4

開発者は、複雑な if コードを扱うときにどうすれば自分の人生を楽にできるかを尋ねていると思います。

複雑な場合のコードを処理する方法は、可能な限りフラットにコーディングし、すべての否定を最初に取り除くことです。化合物の一部を上に置くことで化合物を取り除くことができる場合は、それを行います.

シンプルさの美しさは、それを学ぶのに本やクラスを必要としないことです。分解できるなら分解してください。その一部を削除できる場合は、削除してください。わからない場合は別の方法で行います。そして、ほとんどの場合、フラットは入れ子よりも優れています (python に感謝します!)。

読みやすいです:

if(broken){
  return false;
}
if (simple){
  doit();
  return true;
}
if(complicated){
  divide();
  conquor();
}
if(extra){
  extra();
}

読むよりも:

if(!broken && (simple || complicated)){
 ....
}
return false;
于 2011-10-21T00:11:34.307 に答える
3

真理値表と単体テスト - 表 (n 変数に対して n 次元) を作成し、これらを単体テストへの入力として使用します。これにより、変数の各組み合わせをテストし、結果を検証できます。

于 2009-03-09T13:03:00.877 に答える
2

複雑な IF に関して長年見てきた最大の問題は、人々がすべてのブランチをテストしていないことです。分岐する可能性がどれほど低くても、可能な分岐ごとに必ずテストを作成してください。

于 2009-03-09T13:21:57.193 に答える
2

最大 4 つの変数に適したKarnaugh マップを試すこともできます。

于 2009-03-09T13:36:46.783 に答える
1

まだ読んでいない場合は、Code Completeを読むことを強くお勧めします。などの話題についてのアドバイスが盛りだくさんです。手元に手元にないので、本にこのセクションの要約を掲載したいと思います。

于 2009-03-09T13:40:47.837 に答える
0

デザインパターンを試しましたか?あなたは戦略パターンとして知られているものを調べるかもしれません:http://en.wikipedia.org/wiki/Strategy_pattern

于 2010-03-05T15:09:27.877 に答える
0

ロジックを別々の単位 (a && b など) に分割し、それぞれに独自の変数を付けます。次に、必要なロジックを使用してこれらを構築します。複雑なステートメントがかなり読みやすいように、各変数に適切な名前を付けます (ただし、余分な行がいくつか必要で、かなりの数の一時変数が必要になる場合があります)。

于 2009-03-09T13:12:17.983 に答える
0

ガードステートメントでロジックを処理できない理由はありますか?

于 2009-03-09T13:24:28.983 に答える
0

Karnaugh マップは、真理値表 (Visage が推奨) から情報を取得し、それらをコンパクトな and/or/not 式に変換する優れた方法です。これらは通常、EE デジタル ロジック コースで教えられます。

于 2009-03-09T13:37:11.980 に答える
0

核オプションをチェックしてください: Drools。それにはかなり多くのことがあり、その機能を理解するためだけに、文献を熟読するのに 1 日か 2 日かかりました。しかし、複雑な if-then ロジックがプロジェクトの進化部分であるアプリケーション (たとえば、モジュラー アルゴリズムを使用するアプリケーション) がある場合は、それが問題になる可能性があります。

于 2012-05-11T12:32:47.227 に答える