因此,在我为法语编写一个用于共轭动词的程序(通过算法,而不是通过数据集)的过程中,我遇到了一个小问题。
对于动词的大约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"]
};
这些是法语中最常见的动词类的屈折后缀。
还有其他动词类别(不规则动词),其动词变位也很可能在下一两个世纪保持不变。由于它们是不规则的,因此它们的完整共轭必须静态地包含在内,因为它们不能从某个模式中可靠地进行共轭(据我的统计,也只有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#中,我可以在namespace Verb.Conjugation
(例如class Irregular
)下创建一个类来将这些字符串以枚举类型或类似的方式容纳,而不是将它们填充到XML中并创建一个class IrregularVerbDeserializer
。
因此,问题是:对在应用程序生命周期内极不可能更改的字符串进行硬编码是否合适?当然,我不能保证 100%不会改变,但是在我看来,风险与成本几乎是微不足道的-硬编码是更好的主意。
编辑:建议的副本询问如何存储大量的静态字符串,而我的问题是何时应该对这些静态字符串进行硬编码。