Avoid Using Magic Numbers

Code Smells

Description

IntraJ’s Magic Numbers analysis is a code smell detection that helps you identify the usage of magic numbers in your Java code. Magic numbers are hard-coded numeric values that appear in the code without any context or explanation, making the code less readable, maintainable, and flexible.

Example Error 1

Consider the following Java code:

public class Example {
    public static void main(String[] args) {
        int value = 4;
        if (value == 2) {
            System.out.println("Low value");
        } else if (value == 4) {
            System.out.println("Medium value");
        } else if (value == 6) {
            System.out.println("High value");
        } else {
            System.out.println("Invalid value");
        }
    }
}

In this code, the numeric values 2, 4, and 6 are magic numbers because they are hard-coded into the code without any explanation or context. This makes the code less readable and maintainable, and can cause issues if these values need to be changed in the future.

How IntraJ Detects Magic Numbers

IntraJ’s Magic Numbers analysis detects magic numbers by analyzing the syntax of the code and looking for hard-coded numeric values that are not clearly defined or explained. In particular, it looks for cases where numeric values are used directly in code statements without any context or explanation.

In the example above, IntraJ would identify the values 2, 4, and 6 as magic numbers and flag them as code smells.

Best Practices for Avoiding Magic Numbers

To avoid magic numbers, it’s best to define constants or variables with descriptive names for the values you need to use in your code. This makes the code more readable and maintainable, and allows you to easily modify these values if needed. For example, you could define the values in the example above as follows:

public class Example {
    private static final int LOW_VALUE = 2;
    private static final int MEDIUM_VALUE = 4;
    private static final int HIGH_VALUE = 6;
    
    public static void main(String[] args) {
        int value = MEDIUM_VALUE;
        if (value == LOW_VALUE) {
            System.out.println("Low value");
        } else if (value == MEDIUM_VALUE) {
            System.out.println("Medium value");
        } else if (value == HIGH_VALUE) {
            System.out.println("High value");
        } else {
            System.out.println("Invalid value");
        }
    }
}

By defining constants with meaningful names, you can make your code more self-explanatory and easier to understand for other developers.

Analyisis id: AUMG