基于文本语言的决策
Text language based decision making
我目前正在使用 C 编程语言在 PIC32 平台上使用 MPLAB X (IDE) 进行开发。
我有一个主要项目即将完成,其中包括在 TFT 屏幕上显示图形和文本。
我们为多种语言开发系统,包括 "right to left" 和 "left to right" 编写的语言。
所以一些符号也会改变它们的位置,文本也会改变它们在屏幕上的对齐方式。
到目前为止,我看到我的前任开发人员以这样的方式实现代码:每个显示的屏幕或屏幕上显示的每个对象都针对所选语言进行测试,然后采取相应的操作。
例如:
/**Some actions shared by all the languages**/
.
.
/* language specific actions: */
if(language == lang1){
.
.
/* Performs some actions */
/* e.g: */
displayText(txt, LEFT_ALIGNED);
.
.
} else if(language == lang2){
.
.
/**SAME** actions with only minor changes depending on the language selected. */
/* e.g: */
displayText(txt, RIGHT_ALIGNED);
.
.
} else if.... (and so on)
如您所见,这似乎是一个开销,而且这种方式的代码有很多多余的代码重复,尤其是当几乎每个 function/source 文件中都重复这种结构时。
我正在考虑一种方法来开发更多的 "polymorphic" 结构,不需要那么多 "if else" 语句。
我试图在互联网上搜索一些实施基于文本的决策制定的示例,但找不到我需要的,主要是因为我发现很难描述我的问题。
我希望这不是一个模糊的问题,
但是对于实施这种情况是否有任何结构性共识?
非常感谢,
Tsoof A.
我会选择 language/action 结构数组,然后在数组中搜索相关语言,并执行相关操作:
typedef struct {
char *lang;
void (*action)();
} action_t;
action_t actions[] = {{"en", func1}, {"de", func2}, ...};
...
for(int i = 0; i < sizeof(actions)/sizeof(actions[0]); i++)
if(!strcmp(actions[i].lang, language)) {
actions[i].action();
break;
}
我目前正在使用 C 编程语言在 PIC32 平台上使用 MPLAB X (IDE) 进行开发。
我有一个主要项目即将完成,其中包括在 TFT 屏幕上显示图形和文本。 我们为多种语言开发系统,包括 "right to left" 和 "left to right" 编写的语言。 所以一些符号也会改变它们的位置,文本也会改变它们在屏幕上的对齐方式。
到目前为止,我看到我的前任开发人员以这样的方式实现代码:每个显示的屏幕或屏幕上显示的每个对象都针对所选语言进行测试,然后采取相应的操作。
例如:
/**Some actions shared by all the languages**/
.
.
/* language specific actions: */
if(language == lang1){
.
.
/* Performs some actions */
/* e.g: */
displayText(txt, LEFT_ALIGNED);
.
.
} else if(language == lang2){
.
.
/**SAME** actions with only minor changes depending on the language selected. */
/* e.g: */
displayText(txt, RIGHT_ALIGNED);
.
.
} else if.... (and so on)
如您所见,这似乎是一个开销,而且这种方式的代码有很多多余的代码重复,尤其是当几乎每个 function/source 文件中都重复这种结构时。
我正在考虑一种方法来开发更多的 "polymorphic" 结构,不需要那么多 "if else" 语句。
我试图在互联网上搜索一些实施基于文本的决策制定的示例,但找不到我需要的,主要是因为我发现很难描述我的问题。
我希望这不是一个模糊的问题, 但是对于实施这种情况是否有任何结构性共识?
非常感谢, Tsoof A.
我会选择 language/action 结构数组,然后在数组中搜索相关语言,并执行相关操作:
typedef struct {
char *lang;
void (*action)();
} action_t;
action_t actions[] = {{"en", func1}, {"de", func2}, ...};
...
for(int i = 0; i < sizeof(actions)/sizeof(actions[0]); i++)
if(!strcmp(actions[i].lang, language)) {
actions[i].action();
break;
}