DEV Community

Cover image for Code Smell 18 — Static Functions
Maxi Contieri
Maxi Contieri

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

Code Smell 18 — Static Functions

Yet another global access coupled with laziness.

TL;DR: Don't use static functions. They are global and utilities. Talk to objects instead.

Problems

  • Coupling

  • Testability

  • Protocol Overloading

  • Cohesion

Solutions

Examples

  • Static class methods

  • Static attributes

Sample Code

Wrong

class DateStringHelper {
   static format(date) {
     return date.toString('yyyy-MM-dd'); ;    
  }
}


DateStringHelper.format(new Date());
Enter fullscreen mode Exit fullscreen mode

Right

class DateToStringFormatter {
   constructor(date){
      this.date = date;
   }

   englishFormat() {
     return this.date.toString('yyyy-MM-dd');    
  } 
}

new DateToStringFormatter(new Date()).englishFormat()


Enter fullscreen mode Exit fullscreen mode

Detection

We can enforce a policy to avoid static methods (all class methods but constructors).

Tags