Loading...
Loading...
Spencer Chang
01-24-2024
When programming, code readability and maintainability are two very important properties for improving the health of your codebase; Allowing for quick future development, better developer experience, and avoiding bugs. One simple, yet effective, technique to achieve this is through the use of guard clauses. This post will introduce the concept of guard clauses in and highlight how they can potentially enhance code quality.
Guard clauses are conditional statements placed at the beginning of a function or a block of code that validate certain conditions. If the conditions are not met, the guard clause will typically terminate the execution or redirect the flow, thus "guarding" against further execution under undesirable conditions.
Consider a method that takes in a username and password for an online service, verifies the credentials of the user, generates a session token and returns it. Without the use of guard clause, the function might look like this:
public string GetSessionTokenForVerifiedUser(string username, string password)
{
// Without guard clauses🤢
if (doesUserExist(username))
{
if (!isUserBanned(username))
{
if (isUserDetailsCorrect(username, password))
{
return GenerateSessionToken(username);
}
else
{
throw new Exception("Incorrect user credentials.");
}
}
else
{
throw new Exception("User has been banned.");
}
}
else
{
throw new Exception("User not found");
}
}
From first glance, we can notice that there's a lot of nesting in this function (3 levels!). If we want to find what happens if a user does not exist. Our eyes have to first see where it checks if the user exists, then scan to the entire end of the function to find the exception we throw when that check fails. This not
With a guard clause, it becomes more concise:
public string GetSessionTokenForVerifiedUser(string username, string password)
{
// With guard clauses😎
if (!doesUserExist(username))
{
throw new Exception("User not found.");
}
else if (isUserBanned(username))
{
throw new Exception("User has been banned.");
}
else if (!isUserDetailsCorrect(username, password))
{
throw new Exception("Incorrect user credentials.");
}
return GenerateSessionToken(username);
}
Using guard clauses, the code becomes much clearer; our eyes don't have to follow so many levels of nesting, tracing the logic of the code is as simple as "if it's here, then it must have passed the previous conditions", and overall easier to change and debug.
Guard clauses are a simple yet powerful tool in a developer's arsenal. They enhance code readability, maintainability, and robustness. By incorporating them into your coding practices, you can significantly improve the quality of your code.