Use early returns
Use early returns to avoid nested if conditions. Then the code will become more readable and maintainable.
Note: If both if and else contain similar kinds of logic, don’t return early.
Bad Code
function handleCSVBodyParts(http:Request request) returns string[][]|error {
var bodyParts = request.getBodyParts();
if bodyParts is mime:Entity[] {
string[][] csvLines = [];
foreach var bodyPart in bodyParts {
var mediaType = mime:getMediaType(bodyPart.getContentType());
if mediaType is mime:MediaType {
string baseType = mediaType.getBaseType();
if "text/csv" == baseType {
byte[] payload = check bodyPart.getByteArray();
csvLines = check getCSVData(payload);
} else {
return error("Invalid base type, not text/csv");
}
} else {
return error("Invalid media type");
}
}
return csvLines;
} else {
return error("Error in decoding multiparts!");
}
}
- Actual logic resides after many depths.
- Code is not readable.
Good Code
function handleCSVBodyParts2(http:Request request) returns string[][]|error {
mime:Entity[]|error bodyParts = request.getBodyParts();
if bodyParts is error {
return error("Error in decoding multiparts!");
}
string[][] csvLines = [];
foreach var bodyPart in bodyParts {
mime:MediaType|error mediaType = mime:getMediaType(bodyPart.getContentType());
if mediaType is error {
return error("Invalid media type");
}
string baseType = mediaType.getBaseType();
if "text/csv" != baseType {
return error("Invalid base type, not text/csv");
}
byte[] payload = check bodyPart.getByteArray();
csvLines = check getCSVData(payload);
}
return csvLines;
}