Multiple Returns or Lower Cyclomatic Complexity: Which Coding Style Do You Prefer?
public String execute() { String resultStatus; User user = getUser(); if (loggedIn(user)) { String key = getParameter(KEY); if (!isEmpty(key)) { String id = findSourceIdFor(key); Record record = new Record(user, key, id); record.save(); resultStatus = "Successful"; } else { logger.severe("Invalid key"); resultStatus = "Invalid Key"; } } else resultStatus = "User Not Logged In"; return resultStatus; } |
OR
public String execute() { User user = getUser(); if (!loggedIn(user)) return "User Not Logged In"; String key = getParameter(KEY); if (isEmpty(key)) { logger.severe("Invalid key"); return "Invalid Key"; } String id = findSourceIdFor(key); new Record(user, key, id).save(); return "Successful"; } |
Personally I like the second code sample. I’m a big fan of the guard clause pattern. Even though the second code sample has multiple return statements (which some people hate), it has much lower cyclomatic complexity.