DEV Community

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

Posted on • Originally published at maximilianocontieri.com

2 2

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.

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (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.

The Most Contextual AI Development Assistant

Pieces.app image

Our centralized storage agent works on-device, unifying various developer tools to proactively capture and enrich useful materials, streamline collaboration, and solve complex problems through a contextual understanding of your unique workflow.

👥 Ideal for solo developers, teams, and cross-company projects

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay