Come minimizzare la duplicazione del codice? [chiuso]

-1

Ho il seguente codice che ho scritto, ma c'è così tanto di duplicazione del codice. Vorrei ridurlo al minimo ma non riesco a trovare le idee. Qualcuno potrebbe aiutarmi con questo?

myFunc(r: Object): Object {
        if (condition) {
            return {
                x: this._width - r.w * this._cellSize - r.x * this._cellSize - CELL_PADDING * 2,
                y: this._offsetToScreen(r.y),
                w: r.w * this._cellSize - CELL_PADDING * 2,
                h: r.h * this._cellSize - CELL_PADDING * 2,
                z: r.z
            }
        } else {
            return {
                x: this._offsetToScreen(r.x),
                y: this._offsetToScreen(r.y),
                w: r.w * this._cellSize - CELL_PADDING * 2,
                h: r.h * this._cellSize - CELL_PADDING * 2,
                z: r.z
            }
        }
    }
    
posta ShellZero 21.11.2016 - 18:30
fonte

2 risposte

1

Mi sono inventato questo:)

myFunc(r: Object): Object {
        let x = this._offsetToScreen(r.x);
        if (condition) {
            x = this._width - r.w * this._cellSize - r.x * this._cellSize - CELL_PADDING * 2;
        }

        return {
            x: x,
            y: this._offsetToScreen(r.y),
            w: r.w * this._cellSize - CELL_PADDING * 2,
            h: r.h * this._cellSize - CELL_PADDING * 2,
            z: r.z
        };
    }

Grazie.

    
risposta data 21.11.2016 - 20:09
fonte
0

Indipendentemente dal fatto che "condizione" sia vera o falsa, conosci già i valori per tutto eccetto X. Esegui il lavoro di calcolo per y, w, h e z anche prima di testare "condizione". Archiviare i risultati nelle proprie variabili, quindi le istruzioni di ritorno eseguiranno le matematiche univoche per "x" in modo indipendente, ma passeranno semplicemente le variabili calcolate in precedenza per y, w e h. Ovviamente "z" non ha calcoli, quindi puoi lasciarlo come "r.z" in entrambi i casi, senza bisogno di una variabile intermedia.

myFunc(r: Object): Object {
        //the following two computations would have been executed regardless of which path the conditional path took, so just do them prior to the condition.
        width = r.w * this._cellSize - CELL_PADDING * 2;
        height = r.h * this._cellSize - CELL_PADDING * 2;
        Y = this._offsetToScreen(r.y);
        if (condition) {
            return {
                x: this._width - r.w * this._cellSize - r.x * this._cellSize - CELL_PADDING * 2,
                y: Y,
                w: width,
                h: height,
                z: r.z
            }
        } else {
            return {
                x: this._offsetToScreen(r.x),
                y: Y,
                w: width,
                h: height,
                z: r.z
            }
        }
    }
    
risposta data 21.11.2016 - 19:37
fonte

Leggi altre domande sui tag