KISS: keep it simple, stupid!

Zasada KISS: „Keep it simple, stupid”, może zostać dosłownie przetłumaczona na: „rób to prosto, głupku”. Mówi ona o tym, abyśmy tworzyli kod w jak najprostszy i najbardziej czytelny sposób. Już dziś sprawdź, czego się wystrzegać, aby spełniać KISS.

Rób to prosto, głupku!

KISS jest zasadą z zakresu clean code, kolejną, którą omawiam na blogu. Jest ona bardzo chwytliwa, z uwagi na swój skrót, a jeszcze bardziej na jego rozwinięcie: keep it simple, stupid. Mówi ona o tym, abyśmy pisali swój kod w najbardziej oczywistej formie w jakiej się da i utrzymywali go w prostocie oraz czystości. Co to w praktyce oznacza? A no tyle, abyśmy nie przesadzali z kombinacjami w swoich implementacjach, a zamiast tego dostarczali prosty i krótki kod, który może być z łatwością zrozumiany przez inną osobę.

O tej zasadzie trzeba zawsze pamiętać, jeśli pracujemy w zespole, co jest oczywiście bardzo powszechne. Nie chcemy przecież dostarczać rozwiązań, które jedynie my sami będziemy w stanie rozwijać i utrzymywać.

Jak wygląda kod niespełniający KISS?

KISS-a możemy interpretować na bardzo wiele sposobów. Można nawet rzec, że ile osób tyle wersji, bo dla jednych coś może być „proste i czyste”, a dla innych nie. Dla mnie KISS oznacza, że kod nie jest skomplikowany, a raczej czytelny i poukładany. Spójrzmy więc poniżej, gdzie widzimy klasę z nieułożonymi elementami. Dodatkowo, metoda add() realizuje prostą logikę, w najbardziej skomplikowany sposób, w jaki się chyba da.

class Money {
  public readonly amount: number;

  add(money) {
    const currencies = AllowedCurrencies.filter(
      (currency: Currency) => currency !== this.money.currency)
    );

    if (currencies.include(money.currency)) {
      throw new Error('Wrong currency');
    } else {
      return new Money(this.amount + money.amount, this.currency);
    }
  }

  constructor(
    public readonly currency: Currency,
    amount: number
  ) {
    this.amount = amount;
  }
}

Keep it simple, stupid

Pojechałem po bandzie? Wydaje mi się, że tak. Posprzątajmy bałagan w powyższym kodzie. Po pierwsze, poukładajmy metody i zunifikujmy konstruktor. Następnie uprośćmy metodę add(), poprzez wyrzucenie tego filtra. Pozbądźmy się if-else’a sprawdzającego czy waluta jest dozwolona, a na samym końcu zwróćmy nowy obiekt Money. Przydałby się jeszcze zwracany typ dla metody dodającej i jej argumentu. Voilà! Daj znać w komentarzu, która wersja jest prostsza. 

class Money {
  constructor(
    readonly currency: Currency,
    readonly amount: number
  ) {}

  add(money: Money): Money {
    if (this.currency !== money.currency) {
      throw new Error('Wrong currency');
    }

    return new Money(this.amount + money.amount, this.currency);
  }
}

Podsumowanie

  • Twórz kod, który jest krótki i prosty, aby spełniać zasadę KISS.
  • O KISS powinien pamietać każdy kto pracuje w zespole.
  • Stosowanie tej reguły jest banalnie proste, a daje duże efekty.
Autor wpisu

blog@orbisbit.com

Komentarze

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Sprawdź również
  • CQRS – Command Query Responsibility Segregation

    Command Query Responsibility Segregation czyli CQRS. Jest to wzorzec projektowy, który rozdziela zadania odczytu i zapisu do osobnych modeli. Sprawdź ten wpis, aby dowiedzieć się kiedy i jak z niego skorzystać.

    Zobacz wpis

  • GRASP – kolejny zbiór zasad Clean Code do zapamiętania

    Pewnie większość z Was słyszała o zasadach SOLID. Są one bardzo rozpowszechnione i dosyć często stosowane, ale czy słyszeliście o GRASP? General Responsibility Assignment Software Patterns, to kolejna dawka zasad czystego kodu do zapamiętania.

    Zobacz wpis

  • Wzorzec strategia (strategy pattern)

    Jeżeli masz dość if-ologii w swoim kodzie, to konieczne sprawdź czym jest czynnościowy wzorzec projektowy strategia. Pozwala on mądrze obsługiwać różne scenariusze w procesie i jednocześnie być fancy pod względem zasad SOLID.

    Zobacz wpis