Tak więc, starając się napisać program do koniugacji czasowników (algorytmicznie, nie poprzez zbiór danych) dla języka francuskiego, natknąłem się na niewielki problem.
Algorytm koniugacji czasowników jest właściwie dość prosty w przypadku 17 lub więcej przypadków czasowników i działa według określonego wzorca dla każdego przypadku; dlatego sufiksy koniugacji dla tych 17 klas są statyczne i (najprawdopodobniej) nie zmienią się w najbliższym czasie. Na przykład:
// 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"]
};
Są to fleksyjne przyrostki dla najczęstszej klasy czasowników w języku francuskim.
Istnieją inne klasy czasowników (nieregularności), których koniugacje najprawdopodobniej pozostaną statyczne przez następne stulecie lub dwa. Ponieważ są one nieregularne, ich całkowite koniugacje muszą zostać uwzględnione statycznie, ponieważ nie można w sposób niezawodny koniugować ze wzoru (istnieją również [według moich obliczeń] 32 nieregularności). Na przykład:
// "ê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"]
};
Mógłbym umieścić to wszystko w XML lub nawet JSON i przekształcić z postaci szeregowej, kiedy trzeba go użyć, ale czy jest sens? Ciągi te są częścią języka naturalnego, który się zmienia, ale w wolnym tempie.
Obawiam się, że robiąc rzeczy „we właściwy sposób” i deserializując niektóre źródła danych, nie tylko skomplikowałem problem, który nie musi być skomplikowany, ale całkowicie cofnąłem się pod kątem całego celu podejście algorytmiczne: nie używać źródła danych! W języku C # mógłbym po prostu stworzyć klasę pod namespace Verb.Conjugation
(np. class Irregular
), Aby przechowywać te ciągi w wyliczonym typie lub coś, zamiast upychać je w XML i tworzyć class IrregularVerbDeserializer
.
Pytanie brzmi : czy właściwe jest stosowanie ciągów kodu, których zmiana jest bardzo mało prawdopodobna w trakcie życia aplikacji? Oczywiście nie mogę zagwarantować 100%, że się nie zmienią, ale ryzyko w porównaniu do kosztu jest prawie trywialne w moich oczach - kodowanie na stałe jest tutaj lepszym pomysłem.
Edycja : proponowany duplikat pyta, jak przechowywać dużą liczbę ciągów statycznych , a moje pytanie brzmi, kiedy powinienem na stałe zakodować te ciągi statyczne .