そのため、フランス語の動詞(データセットではなく、アルゴリズム)を活用するプログラムを作成しようとすると、ちょっとした問題に遭遇しました。
動詞を活用するアルゴリズムは、実際には動詞の17程度のケースではかなり単純であり、各ケースの特定のパターンで実行されます。したがって、これらの17のクラスの活用接尾辞は静的であり、(ほとんどの場合)すぐに変更されることはありません。例えば:
// Verbs #1 : (model: "chanter")
terminations = {
ind_imp: ["ais", "ais", "ait", "ions", "iez", "aient"],
ind_pre: ["e", "es", "e", "ons", "ez", "ent"],
ind_fut: ["erai", "eras", "era", "erons", "erez", "eront"],
participle: ["é", "ant"]
};
これらは、フランス語の最も一般的な動詞クラスの接尾辞です。
他のクラスの動詞(不規則)がありますが、その活用も次の1世紀または2世紀の間は変化しないでしょう。これらは不規則であるため、パターンから確実に共役できないため、完全な共役を静的に含める必要があります(32の不規則もあります)。例えば:
// "être":
forms = {
ind_imp: ["étais", "étais", "était", "étions", "étiez", "étaient"],
ind_pre: ["suis", "es", "est", "sommes", "êtes", "sont"],
ind_fut: ["serai", "seras", "sera", "serons", "serez", "seront"],
participle: ["été", "étant"]
};
これらすべてをXMLまたはJSONに入れて、使用する必要があるときにデシリアライズできますが、ポイントはありますか?これらの文字列は自然言語の一部であり、変化しますが、遅い速度です。
私の懸念は、「正しい」方法でデータソースをデシリアライズすることで、複雑にする必要のない問題を複雑化するだけでなく、アルゴリズム的アプローチ:データソースを使用しない!C#では、これらの文字列をXMLに詰め込んでを作成する代わりに、列挙型などにこれらの文字列を格納するためのクラスをnamespace Verb.Conjugation
(たとえばclass Irregular
)作成するだけで済みますclass IrregularVerbDeserializer
。
質問:アプリケーションの存続期間中に変更される可能性が非常に低い文字列をハードコードすることは適切ですか?もちろん、それらが変更されないことを 100%保証することはできませんが、リスクとコストは私の目にはほとんど重さはありません。ここではハードコーディングの方が良い考えです。
編集:提案された複製は、多数の静的文字列を保存する方法を尋ねますが、私の質問は、これらの静的文字列をいつハードコーディングする必要があるかです。