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




Polecane wpisy:

DRY: Don't Repeat Yourself

Zasada DRY, to po przełożeniu na język polski: nie powtarzaj się. Brzmi bardzo banalnie, jednak dosyć często okazuje się, że mamy problem z jej stosowaniem w kodzie. Dziś dowiesz się, jak nie łamać tej reguły, a co za tym idzie nie powtarzać się.

Sprawdź ten wpis

YAGNI: You aren't gonna need it

YAGNI to kwintesencja zasad clean code. Dotyczy ona bezużyteczności kodu, a dokładniej, konieczności usuwania tych fragmentów, które nie są potrzebne. W myśl "You aren't gonna need it" nie powinniśmy tworzyć niczego więcej, niż to, co jest potrzebne.

Sprawdź ten wpis

Wzorce projektowe

Wzorce projektowe zostały stworzone po to, aby nie wymyślać przysłowiowego koła na nowo. Znajomość wzorców projektowych i umiejętność ich stosowania pozwala na szybkie rozwiązywanie problemów. Wpis ten radzi, jakie wzorce zastosować u siebie.

Sprawdź ten wpis

Wzorzec singleton

Kolejny kreacyjny wzorzec projektowy omawiany na łamach tego bloga: singleton. Wzorzec dookoła którego narosło wiele mitów i legend. Dziś o tym dlaczego singleton jest antywzorcem, jakie problemy powoduje oraz kiedy warto po niego sięgnąć.

Sprawdź ten wpis

Wzorzec stan (state)

Dziś prezentuję kolejny wzorzec projektowy, który pozwala uniknąć drabinek if-else if. Mowa tutaj o wzorcu state, który idealnie nada się, jeśli posiadasz różne stany w swoim systemie oraz chcesz mieć możliwość płynnego przechodzenia pomiędzy nimi.

Sprawdź ten wpis

Autor wpisu:

Gabriel Ślawski

Fanatyk czystego i prostego kodu. Zwolennik podejść DDD oraz Modular Monolith. Na codzień pracuje jako programista i architekt. Po godzinach spełnia się w projektach open source, udziela się na blogach oraz czyta książki o kosmosie i astrofizyce.