2017-05-16 3 views
0

Ich habe eine Funktion, die ein Verb im Latein mit dem Wort (Objekt), Stimme (String) und Zeit (String) konjugiert. Als Referenz sind aktiv und passiv die Stimmen und dann präsent, unvollkommen etc ... sind die Zeitformen.Wie kann ich meine switch-Anweisung DRY, die in jedem Szenario fast die gleiche Sache macht?

Im Grunde haben meine verschachtelten Switch-Anweisungen nur unterschiedliche Funktionen mit sehr ähnlichen Namen und Zwecken und ich frage mich, ob es einen Weg gibt, effizienter zu machen, an den ich nicht denke, weil es sehr redundant und klobig erscheint.

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

Wenn der Code vollständig ist und funktioniert, sollte er im Code Review veröffentlicht werden. Diese Website dient hauptsächlich zur Reparatur von kaputten Code. Wenn Sie die fehlenden Funktionen hinzufügen, wäre das besser dort drüben. – Carcigenicate

Antwort

0

Sie wechseln konnte einfach auf angespannt und übergeben Sie die Stimme in eine allgemeinere Konjugation Methode, die sowohl aktive als auch passive Griffe:

Jede Hilfe wäre und hier ist mein Code unten geschätzt werden Stimmen.

Ex:

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

könnten Sie ein Wörterbuch verwenden Verweise auf Funktionen zu halten, wie diese

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

Dies ist nur ein einfaches Beispiel. Damit es in Ihrem Fall funktioniert, müssen Sie alle Funktionen so definieren, dass sie die gleichen Parameter verwenden (auch wenn sie nicht unbedingt alle verwenden). Und Sie benötigen möglicherweise zwei Wörterbücher (eines für passiv und eines für aktiv) oder Sie könnten Sprache und Zeit in eine einzelne Zeichenfolge für die Wörterbuchsuche verketten.

Verwandte Themen