2016-04-17 14 views
0

Mit anderen Worten, wann sollte ich das schreiben?Wann schreiben Sie verschiedene Funktionen und wann verwenden Sie die gleiche Funktion mit einem Parameter?

_.insertUp = (arr, obj, newObj) => { 
    return arr.splice(arr.indexOf(obj), 0, newObj) 
} 

_.insertDown = (arr, obj, newObj) => { 
    return arr.splice(arr.indexOf(obj) + 1, 0, newObj) 
} 

_.insertUpDeep = (arr, obj, newObj) => { 
    const found = _.findDeep(arr, obj) 
    if (found) _.insertUp(found, obj, newObj) 
    return arr 
} 

_.insertDownDeep = (arr, obj, newObj) => { 
    const found = _.findDeep(arr, obj) 
    if (found) _.insertDown(found, obj, newObj) 
    return arr 
} 

Und wann sollte ich das schreiben?

_.insert = (pos, arr, obj, newObj) => { 
    if (pos === 'up') return arr.splice(arr.indexOf(obj), 0, newObj) 
    if (pos === 'down') return arr.splice(arr.indexOf(obj) + 1, 0, newObj) 
} 

_.insertDown = (arr, obj, newObj) => { 
    return arr.splice(arr.indexOf(obj) + 1, 0, newObj) 
} 

_.insertUpDeep = (arr, obj, newObj) => { 
    const found = _.findDeep(arr, obj) 
    if (found) _.insert('up', found, obj, newObj) 
    return arr 
} 

_.insertDownDeep = (arr, obj, newObj) => { 
    const found = _.findDeep(arr, obj) 
    if (found) _.insert('down', found, obj, newObj) 
    return arr 
} 

(Ich denke, Bibliotheken wie jQuery neigen dazu, mit dem ersten Beispiel zu gehen? Z append und prepend.)

+0

Die erste API scheint viel konsistenter zu sein. –

Antwort

1

es zu geben, sich Flexibilität, während Sie Ihren Code organisiert und Ihre Funktionen klein und lesbar zu halten. Das erste Beispiel tut das und es folgt den Richtlinien des Schreibens Funktionen eine Sache zu tun, so dass selbst wenn Sie die eine Funktion aus dem zweiten Beispiel benötigen sollte es so sein:

_.insertUp = (arr, obj, newObj) => { 
    return arr.splice(arr.indexOf(obj), 0, newObj) 
} 

_.insertDown = (arr, obj, newObj) => { 
    return arr.splice(arr.indexOf(obj) + 1, 0, newObj) 

_.insert = (pos, arr, obj, newObj) => { 
    if (pos === 'up') return insertUp(arr, obj, newObj) 
    if (pos === 'down') return insertDown (arr, obj, newObj) 
} 
1

Ich denke, es ist wichtig zu berücksichtigen, wie die Funktionen in dem Code angezeigt werden, in dem sie verwendet werden. Wenn Sie insertUp(...) haben, macht es irgendwie Sinn und es ist nicht einfach, die Funktion falsch aufzurufen.

Wenn Sie insert('up'...) haben, dann führen Sie eine Art von magische Parameter von 'up' ein. Wenn Sie sich diesen Code anschauen, müssen Sie sich fragen, welche anderen Werte akzeptabel sind. Sie können erraten, dass 'down' wahrscheinlich akzeptabel ist. Ist "links" oder "rechts" ein akzeptabler Wert? Was ist mit 'UP'? Was passiert, wenn Sie einen Wert übergeben, den die Funktion nicht mag? Wer weiß. Der Code ist schwerer zu verstehen, wenn Sie den Code betrachten, in dem die Funktion aufgerufen wird.

Verwandte Themen