Skip to content

Latest commit

 

History

History
120 lines (80 loc) · 3.33 KB

File metadata and controls

120 lines (80 loc) · 3.33 KB

Code Smell 10 - Too Many Arguments

Code Smell 10 - Too Many Arguments

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.

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 marginBottom         
        ) {
    }
}

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 { }
// Class definition with methods and properties omitted for simplicity

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        
        ) {
    }
}

Detection

Most linters warn when the arguments list is too large.

Exceptions

  • Operations in real-world needing not cohesive collaborators.

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

Code Smell 34 - Too Many Attributes

Code Smell 13 - Empty Constructors

Code Smell 87 - Inconsistent Parameters Sorting

Refactoring 010 - Extract Method Object

Credits

Photo by Tobias Tullius on Unsplash


This article is part of the CodeSmell Series.

How to Find the Stinky Parts of your Code