DEV Community

Cover image for Code Smell 87 - Inconsistent Parameters Sorting
Maxi Contieri
Maxi Contieri

Posted on • Originally published at maximilianocontieri.com

Code Smell 87 - Inconsistent Parameters Sorting

Be consistent with the parameters you use. Code is prose.

TL;DR: Don't confuse you readers. Keep the order.

Problems

  • Readability

  • Consistency

Solutions

  1. Refactor and change parameters order.

  2. Use named parameters

Sample Code

Wrong

function giveFirstDoseOfVaccine(person, vaccine) {
  //
}

function giveSecondDoseOfVaccine(vaccine, person) {
  //
}


giveFirstDoseOfVaccine(jane, pfizer);
giveSecondDoseOfVaccine(jane, pfizer);  //Unnoticed mistake
Enter fullscreen mode Exit fullscreen mode

Right

function giveFirstDoseOfVaccine(person, vaccine) {
  //
}

function giveSecondDoseOfVaccine(person, vaccine) {
  //
}


giveFirstDoseOfVaccine(jane, pfizer);
giveSecondDoseOfVaccine(jane, pfizer);  //jane is immunized
Enter fullscreen mode Exit fullscreen mode

Detection

  • Some very smart linters may be able to compare arguments and hint for possible mistakes.

Tags

  • Readability

Conclusion

This is a very simple smell.

Readability is very important to avoid mistakes.

Relations

Credits

Photo by Lance Grandahl on Unsplash


Computers are good at following instructions, but not at reading your mind.

Donald Knuth


This article is part of the CodeSmell Series.

Discussion (1)

Collapse
jamesrweb profile image
James Robb

Usually for cases like this I would create a factory to avoid the ambiguity, something like:

type Vaccine = "pfizer" | "moderna"
type Patient = {
    name: string;
}
type PatientWithCoronaVaccineDetails = Patient & {
    vaccine: Vaccine;
    doses: number;
}

function vaccineFactoryForPatient(patient: PatientWithCoronaVaccineDetails) {
  // ...

  return {
    giveFirstDoseOfVaccine() {
        // ...
    },
    giveSecondDoseOfVaccine() {
        // ...
    }
  }
}
}
Enter fullscreen mode Exit fullscreen mode

This way we can avoid this category of issues in the first place.