我有一个函数,它在拉丁语中使用单词(object),voice(string)和tense(string)来共轭动词。对于参考主动和被动是声音,然后呈现,不完美等......是时态。
基本上我的嵌套switch语句只是运行具有非常相似的名称和目的的不同函数,我想知道是否有某种方法可以使它更有效,我没有想到,因为它看起来非常冗余和笨重。
我们将不胜感激,以下是我的代码:
function getChart(word, voice, tense) {
//Root word variables
var inf = word.inf;
var pp3 = word.pp3;
var pp4 = word.pp4;
var conj = word.conj;
//If voice is active go to the active charts for the tense
//If voice is passive go to the passive charts for the tense
switch(voice) {
case "Active":
switch(tense) {
case "Present":
activePresentConj(inf, conj);
break;
case "Imperfect":
activeImperfectConj(inf, conj);
break;
case "Future":
activeFutureConj(inf, conj);
break;
case "Perfect":
activePerfectConj(pp3);
break;
case "Plu Perfect":
activePluPerfectConj(pp3);
break;
case "Future Perfect":
activeFuturePerfectConj(pp3);
break;
default:
return null;
}
break;
case "Passive":
switch(tense) {
case "Present":
passivePresentConj(inf, conj);
break;
case "Imperfect":
passiveImperfectConj(inf, conj);
break;
case "Future":
passiveFutureConj(inf, conj);
break;
case "Perfect":
passivePerfectConj(pp4);
break;
case "Plu Perfect":
passivePluPerfectConj(pp4);
break;
case "Future Perfect":
passiveFuturePerfectConj(pp4);
break;
default:
return null;
}
break;
default:
return null;
}
}
答案 0 :(得分:0)
您可以打开时态并将声音传递到更通用的共轭方法,该方法可以处理主动和被动语音。
前:
switch(tense) {
case "Present":
presentConj(inf, conj, voice);
break;
case "Imperfect":
imperfectConj(inf, conj, voice);
break;
case "Future":
futureConj(inf, conj, voice);
break;
case "Perfect":
perfectConj(pp3, voice);
break;
case "Plu Perfect":
pluPerfectConj(pp3, voice);
break;
case "Future Perfect":
futurePerfectConj(pp3, voice);
break;
default:
return null;
}
答案 1 :(得分:0)
您可以使用字典来保存对函数的引用,例如
//Add this to your initialization routine
var dict = {};
dict["Present"] = presentConj;
dict["Imperfect"] = imperfectConj;
dict["Future"] = futureConj;
//use this code to process a particular tense
var func = dict[tense];
if (func == undefined) return null;
func(inf, conj, voice);
这只是一个简单的例子。为了使它适用于您的情况,您必须定义所有函数,以便它们采用相同的参数(即使它们不一定使用所有这些参数)。你可能需要两个字典(一个用于被动字典,一个用于活动字典),或者你可以将语音和时态连接成单个字符串以进行字典查找。