Skip to content

KISS (Keep It Simple, Stupid) ​

This principle emphasizes simplicity in code. Avoid unnecessary complexity and strive for solutions that are as simple as possible but still meet the requirements.

Purpose: Simple code is easier to read, understand, and maintain. Complexity should be introduced only when absolutely necessary.

Problem ​

Here, the code is unnecessarily complex, making it harder to understand than it needs to be.

ts
class User {
  private _name: string;
  private _email: string;
  private _isActive: boolean;

  constructor(name: string, email: string, isActive: boolean) {
    this._name = name;
    this._email = email;
    this._isActive = isActive;
  }

  // Complex method with unnecessary checks
  public getDetails(): string {
    let userDetails = "";
    if (this._isActive) {
      userDetails += `Name: ${this._name}, `;
    } else {
      userDetails += `Name: Inactive User, `;
    }

    if (this._email.indexOf("@") !== -1) {
      userDetails += `Email: ${this._email}, `;
    } else {
      userDetails += `Email: Invalid Email, `;
    }

    // A complex and long conditional statement that could be avoided
    if (this._name.length > 0 && this._email.length > 0 && this._isActive) {
      return `Active User Details - ${userDetails}`;
    } else if (
      this._name.length > 0 &&
      this._email.length > 0 &&
      !this._isActive
    ) {
      return `Inactive User Details - ${userDetails}`;
    } else if (this._name.length === 0 || this._email.length === 0) {
      return `Incomplete User Details`;
    } else {
      return `Unknown User Details`;
    }
  }
}

Why It's Incorrect:

  • The method getDetails() does a lot of unnecessary checks.
  • It makes the code more complex than it needs to be.
  • There are redundant conditions and checks that can be simplified.
  • The user details could be returned in a much cleaner way.

Solution ​

Now, let's simplify the logic and make it more readable.

ts
class User {
  private _name: string;
  private _email: string;
  private _isActive: boolean;

  constructor(name: string, email: string, isActive: boolean) {
    this._name = name;
    this._email = email;
    this._isActive = isActive;
  }

  public getDetails(): string {
    const status = this._isActive ? "Active" : "Inactive";
    const email = this._email.includes("@") ? this._email : "Invalid Email";

    return `${status} User - Name: ${this._name}, Email: ${email}`;
  }
}

Why It's Correct:

  • The method getDetails() is much simpler.
  • It checks for the user's status (Active or Inactive) and their email format in a more straightforward way.
  • The conditional logic is minimal and avoids unnecessary complexity.
  • It's easy to understand and maintain.

Released under the MIT License.