Zasada KISS w programowaniu 馃槝

Wst臋p

Co do ca艂us贸w to zawsze jestem 艂asy i tak te偶 powinien mie膰 ka偶dy porz膮dny programista 馃槝

KISS czyli Keep It Simple, Stupid, a w moim wolnym t艂umaczeniu Nie komplikuj g艂uptasku jest jedn膮 z wielu podstawowych zasad programowania. Polski odpowiednik to BUZI i lepiej on oddaj臋 znaczenie, a moim zdaniem wprost m贸wi czego nie robi膰. Po rozwini臋ciu dostajemy Bez Udziwnie艅 Zapisu Idioto – chocia偶 jest to bardziej dosadniej i nieco agresywniej.. no chocia偶 angielskie rozwini臋cie te偶 nie ko艅czy si臋 dla wszystkich mi艂o 馃槅

Jak poca艂owa膰 kod?

Po niebywale mi艂ym wst臋pie pora nieco bardziej rozja艣ni膰 to jak cmokn膮膰 kod. G艂贸wnie chodzi o to, aby kod pisa膰 prosto – je艣li wiesz jak co艣 wykona膰 to po prostu tak to zr贸b – potem pewnie zauwa偶ysz jak to upro艣ci膰. Je艣li ten jeden if albo jeden foreach wystarcz膮 to po co komplikowa膰? Ma by膰 prosto.

Te偶 bardzo wa偶ne jest to jakie nazewnictwo stosujesz. Zawsze pisz tak, aby druga osoba (czyli przewa偶nie ty po roku) b臋dzie wiedzia艂a o co chodzi, a ilo艣膰 WTF-贸w b臋dzie znikoma

Przyk艂ad

Napiszmy prost膮 klas臋, kt贸rej celem b臋dzie bycie prostym kalkulatorem. Jedna metoda ma dodawa膰 dwie liczby ze sob膮, a druga metoda odejmowa膰 ze sob膮 dwie liczby. Co tutaj mo偶e p贸j艣膰 nie tak? A no mo偶e i to du偶o 馃榿

Kod bez zasady kiss (prawie 偶e przeciwny)

class MojaKlasa2
{
  public metoda1(liczba1, liczba2)
  {
    const wynik = liczba1 + liczba2;
    return wynik;
  }

  public metoda2(liczba1, liczba2)
  {
    const wynik = liczba1 - liczba2;
    return wynik;
  }
}

// Gdzie艣 w innym pliku:
const mojObiekt = new MojaKlasa2;
let liczba1 = mojObiekt.metoda1(2,3);
let liczba2 = mojObiekt.metoda2(5,3); 

No co艣 jest nie tak? To generalnie bardzo prosty przyk艂ad ukazuj膮cy to, 偶e po samych nazwach nie wiadomo co to w og贸le robi. Zauwa偶 偶e u偶ycie tego kodu wprowadza jak膮艣 ilo艣膰 wtf-贸w, kt贸re nie s膮 nam do niczego potrzebne.

WTF-y: Co to jest liczba1 czy liczba2? Co robi MojaKlasa2? Czym jest mojObiekt??? Co za metoda1 i co za metoda2???????? Jakie s膮 typy?

Tak wielu programist贸w niestety pisze ca艂y sw贸j kod po czym jak prosz膮 o pomoc to albo si臋 wstydz膮 albo si臋 poj膮 偶e im kod ukradniemy (nie wiadomo do czego?) albo jest tak, 偶e jak kto艣 ju偶 pomaga to musi sp臋dzi膰 wiele czasu na rozczytanie si臋 tego co jest czym.

Ten sam kod, ale ju偶 z KISS

Teraz zr贸bmy refaktoryzacj臋 i napiszmy to samo, ale tak jak trzeba:

class SimpleCalculator
{
  public add(x : number, y : number) : number
  {
    return x + y;
  }

  public sub(x : number, y : number) : number
  {
    return x - y;
  }
}

// Gdzie艣 w innym pliku:
const calculator = new SimpleCalculator;
let addResult = calculator.add(2,3);
let subResult = calculator.sub(5,3); 

i od razu czytelniej. Ju偶 po samych linijkach z calculator.add i calculator.sub wiemy czego si臋 spodziewa膰. Wszystko wygl膮da pro艣ciej! 馃榾

Drugi przyk艂ad z 艂amaniem KISS

Ale 偶eby nie by艂o kolorowo, s膮 te偶 i osoby, kt贸re jak tylko widz膮 kod r贸偶ni膮cy si臋 jednym znakiem to od razu w nich wrze i po prostu musz膮 to skomplikowa膰. Nawet gdy wszystko dobrze si臋 nazwie mo偶na z艂ama膰 zasad臋 KISS:

class SimpleCalculator
{
  public add(x : number, y : number) : number
  {
    return this.operation("+", x, y);
  }

  public sub(x : number, y : number) : number
  {
    return this.operation("-", x, y);
  }

  private operation(calcSymbol : string, x : number, y : number) : number
  {
    if( calcSymbol == "-" ) {
      return x - y;
    } else if( calcSymbol == "+" ){
      return x + y;
    }
    return 0;
  }
}

// Gdzie艣 w innym pliku:
const calculator = new SimpleCalculator;
let addResult = calculator.add(2,3);
let subResult = calculator.sub(5,3); 

i generalnie obiektu klasy u偶ywa si臋 tak samo, ale jednak s膮 tam niepotrzebne udziwnienia. Na co ta metoda operation? Mo偶na przecie偶 to samo robi膰 w konkretnych metodach (jak jak w poprzednim przyk艂adzie). W og贸le doszed艂 niepotrzebny if i if else. Na co i po co? Co to daje? Jaki by艂 cel tej dodatkowej pracy? A tamto 0 nigdy si臋 nie zwr贸ci.

Tego rodzaju kod widzia艂em ju偶 wiele razy i sam potem g艂贸wkowa艂em si臋 z tym, o co chodzi. Ci co wi臋cej znaj膮 wzorc贸w projektowych z pewno艣ci膮 nie chcieliby mie膰 tak dziwne fasady, repozytoria czy buildery. 馃懢

Podsumowanie

Mam nadziej臋, 偶e po tych trzech przyk艂adach nakre艣li艂em czym jest zasada KISS. Ona 艣wietnie dope艂nia si臋 z innymi zasadami daj膮c nam pi臋kny i czysty kod. Wdro偶enie si臋 w t膮 zasad臋 jest stosunkowo proste: troszk臋 wysi艂ku i si臋 nauczysz; dlatego te偶 polecam, aby to zrobi膰 jak najwcze艣niej swojej programistycznej przygody. Wtedy te偶 jest 艂atwiej pom贸c i te偶 szybciej tej pomocy dostaniesz, a ilo艣膰 pyta艅 typu a co to?, a na co to?, co to znaczy? b臋dzie o wiele mniejsza 馃檪

Do mi艂ego nast臋pnego moje buziaczki 馃槝

Subscribe
Powiadom o
guest
5 komentarzy
najstarszy
najnowszy oceniany
Inline Feedbacks
View all comments
Kamil
Kamil
7 miesi臋cy temu

A przypadkiem ca艂a ta klasa nie 艂amie tej zasady? 呕eby doda膰/odj膮膰 2 liczby musimy robi膰 ca艂膮 instancje klasy zamiast robi膰 2+3 od razu :). Ju偶 pomijam, 偶e to nieoptymalne bo sam operator+ te偶 jest funkcja, czyli u偶ywaj膮c funkcji add wysy艂amy niepotrzebnie 2 zmienne i oczywi艣cie przed tym tworzymy instancj臋 klasy.

trackback
7 miesi臋cy temu

[…] zasad jest du偶o i ich nauka te偶 troch臋 schodzi czasu. Te偶 na moim blogu znajdziecie opisy KISS oraz SRP. Chcia艂bym tak na prawd臋 opisa膰 wszystkie jakie znam, ale.. kiedy ja na to czas […]

trackback
4 miesi臋cy temu

[…] Zasada jest prosta: 20 mln item贸w w tablicy i chc臋 je przeiterowa膰. Dla mnie wed艂ug zasady KISS powinienem by艂 u偶y膰 tylko i wy艂膮cznie […]

trackback
3 miesi臋cy temu

[…] lubisz ca艂owa膰? To te偶 poca艂uj sw贸j kod 馃樈 – tak odo rzecze zasada KISS. Kolejna wiedza z dziedziny jak mamy programowa膰. Dla tych, co chc膮 pisa膰 jako艣ciowy kod to […]

Spis tre艣ci
W艂膮czy膰 powiadomienia? Bardzo pragn臋 Dam sobie rad臋