2016-05-06 6 views
0

Ich habe diese beiden Funktionen, und ich denke, dass es eine elegante, funktionale Möglichkeit geben muss, sie zu verallgemeinern.Generalisieren von zwei Funktionen, die auf zwei Eigenschaften invers wirken

$scope.togglePick = function(){ 
    let targetPhoto = $scope.photoImport.data[indexService.current]; 
    targetPhoto.pick = !targetPhoto.pick; 
    if(targetPhoto.reject && targetPhoto.pick) { 
     targetPhoto.reject = false; 
    } 
} 

$scope.toggleReject = function() { 
    let targetPhoto = $scope.photoImport.data[indexService.current]; 
    targetPhoto.reject = !targetPhoto.reject; 
    if (targetPhoto.reject && targetPhoto.pick) { 
     targetPhoto.pick = false; 
    } 
} 

Ich glaube, ich in string params togglePick = toggle('pick', 'reject') passieren könnte und [] Notation in der toggle Funktion verwenden, aber das fühlt sich an wie Magie Saiten ... obwohl sie Eigenschaftsnamen sind, bin ich unsicher. Ich könnte auch haben:

function toggle(magicFlag){ 
    let primary = magicFlag ? 'pick' : 'reject'; 
    let secondary = magicFlag ? 'reject' : 'pick'; 
    ... 
    targetPhoto[primary] = !targetPhoto[primary]; 
    ... 
} 

Wieder, ick, magische Flagge. Gibt es einen eleganteren Weg, dies als Longhand in jeder Funktion zu tun?

+2

Ich denke, die Menge an Code in diesen Funktionen und die geringen Unterschiede macht sie so fein wie sie sind. Ohne die seltsame Eigenschaft der Eigenschaftsstrange zu bearbeiten, sehe ich nicht, wie Sie diese generische Zeile wirklich machen, während sie lesbar bleibt. Manchmal ist es okay, nicht so allgemein wie möglich zu sein. Diese Linie im Sand muss irgendwo gezeichnet werden. – Yatrix

+0

Sehr geschätzt. Ich bleibe bei lesbar. Wenn dies nicht zu einer "nicht zu rechtfertigenden" Frage auf SO (basierend auf Meinungen) führt, würde ich das gerne als Antwort akzeptieren. – Dan

+0

Kühl. Ich habe es zu einer Antwort bewegt. – Yatrix

Antwort

1

Die Menge an Code in diesen Funktionen und die geringfügigen Unterschiede machen sie in Ordnung, so wie sie sind. Ohne die Eigenschaft String Verrücktheit zu arbeiten, sehe ich nicht, wie Sie wirklich diese generische machen, während lesbar bleiben. Manchmal ist es in Ordnung, nicht den allgemeinsten Code zu haben, den Sie möglicherweise haben können. Diese Linie im Sand muss irgendwo gezeichnet werden.