この質問は、私が大学で拾ったものを使おうとすることが良い考えであったかどうか、あるいは遠隔で防御できるかどうかを評価する目的で尋ねられています。
昨年、私はフィールドをどうするか、またはHL7データのフィールドにデータを入力する方法を理解するための「数式作成者」を作成しました。それがHL7データであるという事実は、HL7フィールドが存在するかどうか、またはそれが繰り返されるかどうかが常にわかっているわけではないという事実を除いて、ほとんど重要ではありません。
したがって、これらのフィールドのリストを取得する必要がある場合は、それらのセットを自分で返すことができると思いました。それらがまったく見つからない場合は、未定義のファジー値をセットに追加できます。次に、セットの特定のものを評価できます(つまり、すべてが存在するか、6つ以上が正規表現に一致するか、最大から最小に昇順を実行するか)。
'All Of'と空のセットをどうするかを除いて、すべてが正常に機能します。
プログラムを使いやすくするために、「すべての[]」はtrueまたはfalseを返す必要がありますか? 「集合論では、実存演算子ヤッダヤッダ耳が聞こえない」と主張してみました。
最初の質問への回答が欲しいのですが、それは製図板に戻る必要があるかもしれないので、私は数ヶ月前に早送りして、空のセットを決して持たないことでその問題を回避しました。 HL7メッセージで0個のフィールドが検出された場合は、セット内で未定義になります。
未定義を使いたかったのは、「わからない」のきっかけになりました。したがって、TrueまたはUndefined = Undefined、False and Undefined = Undefined and Not Undefined = Undefined。私はこれを使ってプログラミングの一貫性を保つことを強調しましたが、「未定義ではない」= Trueにすることで、プログラムを苦しめるすべてのことを軽減できたはずです。
私は実際に私のプログラムを使用している2人の男に、「常に本当のケースを期待するように彼の公式を作成する」と言いました。それがドン・クヌースのやり方です。
要約すると、私のプログラムは機能します。問題は、明らかに問題の領域外にある原則を順守することによって妨げられていることです。緩めれば、ソースコードを参照しなくても、プログラムのフローが改善され、機能するようになります。
私の質問は、抽象化はドメインと一致する必要がありますか?
看護師、上司、および(より軍事志向の)プログラマーに対して、「空の袋はすべて真実である」または「未知の反対はまだ未知である」と合法的に主張できますか?
HL7の構造を考えると、ツリーはセットよりも自然ではないでしょうか。ツリーを使用している場合でも、子セグメント(または特定のセグメントタイプの子セグメント)のコレクションはセットになると思います(ただし、セットはそうではないことを意味するため、コレクションと呼びます)順序付けられており、重複がなく、HL7セグメントは順序を気にする可能性があり、セグメントの同等性の概念は実際には存在しません)。
ゼロ要素のコレクションを1つの未定義要素のコレクションとして表すこともうまくいくとは思いません。それはおそらくあなたにもっと多くのエッジケースを与えるでしょう(簡単な例-存在するセグメントの数を決定するためのカウント演算子)。さらに、明らかなメリットがないため、3値論理に強制されます。これは苦痛です。
コレクションを操作する演算子が空のコレクションを操作できない理由はありません。繰り返しになりますが、動作は、サプライズとエッジケースを最小限に抑えるものでなければなりません。一般的に、これはwill数学的に意味のあるものと一致します。
AllOfは、コレクションのすべての要素に対してプロパティがtrueであるかどうかをチェックするものですか?もしそうなら、私はあなたの現在の実装が1つの未定義の要素のコレクションに対して未定義を返すと思いますか?または、その場合にinがtrueまたはfalseを返すように定義しましたか?もしそうなら、空のコレクションに対してその値を返すだけでなく、何も得られていません。未定義が返される場合は、それをtrueまたはfalseとして扱うコードを記述しますか?いずれにせよ、AllOfが空のセットに対して何を返す必要があるかについてのあなたの答えがあります。
私は個人的に、空のコレクション(またはセット)に対してAllOfがtrueを返すようにします。何らかの理由で価値があることが証明されない限り、3値論理を投げます。空のコレクションを許可します。おそらく、複合パターンを使用してHL7ノードを表します。セットではなくリストを使用します。使用しているプラットフォームのコレクション実装を活用しようとしました。たとえば、C#では、セグメントで汎用コレクション拡張メソッドとLINQを使用できることを確認します。
はい、抽象化はドメインと一致する必要があります。使用している抽象化はもう少し一致する可能性があると思います。
あなたcould看護師、上司、プログラマーにあなたの抽象化について議論しますが、実際にはプログラマーだけが本当に気にする必要があります。そして、おそらくあなたが未知のものを必要とするとは思わないので、それは議論の量を減らすでしょう。