2017-05-16 3 views
0

私は単語(オブジェクト)、音声(文字列)、および時制(文字列)を与えられたラテン語の動詞を結合する関数を持っています。アクティブな参照と受動的なものは声であり、存在し、不完全なものなど...は時制です。各シナリオでほぼ同じことをするswitch文をどのようにDRYするのですか?

本質的に私のネストされたswitch文は、非常に似た名前と目的で別の機能を実行するだけです。私はそれが非常に重複していてclunkyのように思えないほど効率的にするいくつかの方法があるのだろうかと思いました。

すべてのヘルプは大歓迎し、ここに以下の私のコードであることになります。

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; 
} 

}

+2

コードが完成して動作している場合は、Code Reviewに掲載する必要があります。このサイトは主に壊れたコードを修正するためのものです。不足している機能を追加すると、そこに投稿される方が良いでしょう。 – Carcigenicate

答えて

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; 
} 
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); 

のように、関数への参照を保持するために辞書を使用することができます。あなたのケースで動作させるには、すべての関数を定義しなければなりません(すべての関数を必ずしも使用するとは限りません)。そして、あなたは2つの辞書(受動的なものと能動的なものの1つ)を必要とするかもしれませんか、または辞書ルックアップのために音声と緊張を1つの文字列に連結することができます。

関連する問題