Code Smell 10 - Too Many Arguments

Maxi Contieri - Oct 29 '20 - - Dev Community

Objects or Functions need too many arguments to work.

TL;DR: Don't pass more than three arguments to your functions.

Problems

  • Low maintainability

  • Low Reuse

  • Coupling

Solutions

  • Find cohesive relations among arguments

  • Create a "context".

  • Consider using a Method Object Pattern.

  • Avoid "basic" Types: strings, arrays, integers, etc. Think on objects.

Exceptions

  • Operations in real world needing not cohesive collaborators.

Sample Code

Wrong

public class Printer {   
  void print(String documentToPrint, 
         String papersize,
           String orientation, 
           boolean grayscales,
           int pagefrom,
           int pageTo,
           int copies,
           float marginLeft,
           float marginRight,
           float marginTop,
           float marginBotton         
        ){    
    }
}
Enter fullscreen mode Exit fullscreen mode

Right

final public class PaperSize {
    //...
}

final public class Document {
    //...
}

final public class PrintMargins {
    //...
}

final public class PrintRange {
    //...
}

final public class ColorConfiguration {
    //...
}

final public class PrintOrientation {
    //...
}

final public class PrintSetup {
    public PrintSetup(PaperSize papersize,
           PrintOrientation orientation, 
           ColorConfiguration color,
           PrintRange range,
           int copiesCount,
           PrintMargins margins
           ){}
}

final public class Printer {   
  void print(Document documentToPrint, 
         PrintSetup setup        
        ){    
    }
}
Enter fullscreen mode Exit fullscreen mode

Detection

Most linters warn when the arguments list is too large.

Tags

  • primitive

Conclusion

Relate arguments and group them.
Always favor real world mappings. Find in real world how to group the arguments in cohesive objects.

If a function gets too many arguments, some of them might be related to the class construction. This is a design smell too.

Relations

Credits

Photo by Tobias Tullius on Unsplash


This article is part of the CodeSmell Series.

Last update: 2021/06/13

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .