Skip to content

Instantly share code, notes, and snippets.

@TonyPythoneer
Created May 16, 2017 04:19
Show Gist options
  • Save TonyPythoneer/a7b529c8acdb6bad3f2a0b9298ee3f42 to your computer and use it in GitHub Desktop.
Save TonyPythoneer/a7b529c8acdb6bad3f2a0b9298ee3f42 to your computer and use it in GitHub Desktop.
How to use basic programming skill to improve your code

Please good use of programming basic skills

Do you know what recursive, IIFE, ternary operation, and short circuit are? A basic-level developer/programmer should know these skills which can make you code simplify so much.

First, let's look this code:

checkError(obj) {
    let errorMessage = ''
    if (!_.isNull(obj)) {
        if (!_.isUndefined(obj.error)) {
            if (!_.isUndefined(obj.error.error)) {
                errorMessage = obj.error.error
            } else {
                errorMessage = obj.error
            }
        } else {
            errorMessage = obj
        }
        if (errorMessage !== '') {
            if (!_.isUndefined(errorMessage.message)) {
                SimpleAlert.alert('Error', errorMessage.message)
            } else {
                SimpleAlert.alert('Error', errorMessage)
            }
        }
    }// isNull
}

Could you directly understand this code how to work? Let's split two sections.

First section:

if (!_.isUndefined(obj.error)) {
    if (!_.isUndefined(obj.error.error)) {
        errorMessage = obj.error.error
    } else {
        errorMessage = obj.error
    }
} else {
    errorMessage = obj
}

Second section:

if (errorMessage !== '') {
    if (!_.isUndefined(errorMessage.message)) {
        SimpleAlert.alert('Error', errorMessage.message)
    } else {
        SimpleAlert.alert('Error', errorMessage)
    }
}

First section is to find error object. It needs to pass two-nested if-else until it gets error object.

Second section is to get message property from the error object

// The code has 16 lines
let checkErrorV1 = (obj: any) => {
    // Validate: Finish function life cycle if obj is null
    if (obj === null) return;

    // get errorMessage
    let errorMessage = (function getErrorMessage(obj: any) {
        let isUndefined = obj.error === undefined;
        return isUndefined ? obj : getErrorMessage(obj.error);
    })(obj);
    if (!errorMessage) return;

    // submit errorMessage by SimpleAlert   
    let isUndefined = errorMessage.message === undefined;
    let message = isUndefined ? errorMessage: errorMessage.message;
    SimpleAlert.alert('Error', message)
}
// The code has 15 lines
let checkErrorV2 = (obj: any) => {
    // Validate: Finish function life cycle if obj is null
    if (obj === null) return;

    // get errorMessage
    let errorMessage = (function getErrorMessage(obj: any) {
        let isUndefined = obj.error === undefined;
        return isUndefined ? obj : getErrorMessage(obj.error);
    })(obj);
    if (!errorMessage) return;

    // submit errorMessage by SimpleAlert   
    let message = errorMessage.message || errorMessage;
    SimpleAlert.alert('Error', message)
}
// The code has 13 lines
let checkErrorV3 = (obj: any) => {
    if (!obj) return;  // isNull or isUndefined

    // get errorMessage
    let error = (function getError(obj: any) {
        return obj.error ? getError(obj.error) : obj;
    })(obj);
    if (!error) return;  // isNull or isUndefined

    // submit errorMessage by SimpleAlert
    let message = error.message || error;
    SimpleAlert.alert('Error', message)
}


// The code has 12 lines
let checkErrorV3 = (obj: any) => {
    if (!obj) return;  // isNull or isUndefined

    // get errorMessage
    let getError = obj => obj.error ? getError(obj.error) : obj;
    let error = getError(obj);
    if (!error) return;  // isNull or isUndefined

    // submit errorMessage by SimpleAlert
    let message = error.message || error;
    SimpleAlert.alert('Error', message)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment