DEV Community

Cover image for Code Smell 62 - Flag Variables
Maxi Contieri
Maxi Contieri

Posted on • Edited on • Originally published at maximilianocontieri.com

1

Code Smell 62 - Flag Variables

Flags indicate what happened. Unless their name is too generic.

Problems

  • Readability

  • Maintainability

  • Coupling

Solutions

  1. Use meaningful names

  2. Try to avoid flags. They generate coupling.

Sample Code

Wrong

<?
function dummy() {
$flag = true;
while ($flag == true) {
$result = checkSomething();
if ($result) {
$flag = false;
}
}
}
view raw uselessFlag.php hosted with ❤ by GitHub

Right

<?
function dummy()
{
$atLeastOneElementWasFound = false;
while (!$atLeastOneElementWasFound) {
$elementSatisfies = doSomething();
if ($elementSatisfies) {
$atLeastOneElementWasFound = true;
}
}
}

Detection

We can search all the code for bad named flags.

Tags

  • Readability

Conclusion

Flags are widespread on production code. We should restrict their usage and use clear and intention revealing names.

Relations

More Info

Wikipedia


If you lie to the compiler, it will get its revenge.

Henry Spencer


Billboard image

Deploy and scale your apps on AWS and GCP with a world class developer experience

Coherence makes it easy to set up and maintain cloud infrastructure. Harness the extensibility, compliance and cost efficiency of the cloud.

Learn more

Top comments (1)

Collapse
 
michaelcurrin profile image
Michael Currin

You suggested to restrict usage but didn't say how or provide and example.

Can I provide an alternative without the flag? Which is shorter and more readable.

while(true) {
  $elementSatisfies = doSomething();
  if (!$elementSatisfies) {
    break;
  }
}
Enter fullscreen mode Exit fullscreen mode

Or even

while(doSomething()) {
  pass
}
Enter fullscreen mode Exit fullscreen mode

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay