Programovanie bez chaosu: 9 odporúčaní pre udržateľný kód

Predstav si, že sa po mesiacoch alebo rokoch vraciaš k svojmu starému projektu. Otvoríš kód, srdce ti poskočí nostalgiou, ale… čo dočerta znamená táto premenná x1y2z? Kto napísal túto 300-riadkovú funkciu? A prečo tam nikde nie je žiadny komentár?! A potom si spomenieš – bol si to ty.

Prečo písať čistý kód?

Lebo 90% času programátor kód číta a nie píše. Čistý kód nie je len o tom, aby vyzeral pekne. Je to investícia do tvojej budúcnosti a do budúcnosti celého tímu. Ak chceš, aby tvoj projekt prežil viac než jedno sprintové demo a nebol prekliaty každým, kto na ňom bude robiť po tebe, čítaj ďalej. 

1. Používaj názvy, ktoré dávajú zmysel

Čo myslíš, ktorá verzia je lepšia?

Neodporúčam:

function cx(d) {
   return d[0];
}

Odporúčam:

function getFirstElement(data) {
   return data[0];
}

Pomenovanie typu cx možno ušetrí pár stlačení klávesy, ale spôsobí milióny stratených neurónov každému, kto sa na to pozrie. Vrátane teba, o tri mesiace. Krátke pomenovania funkcií a premenných nedávajú zmysel aj preto, lebo napríklad v JavaScripte sa pri builde používa minifier, ktorý názvy skracuje za nás, čím sa šetrí miesto.

2. Píš funkcie, ktoré robia jednu vec a robia ju dobre

Ak má tvoja funkcia viac zodpovedností než priemerný full-stack vývojár, niečo nie je v poriadku.

Neodporúčam:

function processUserData(user) {
   validateUser(user);
   cleanUserData(user);
   saveUserToDb(user);
   sendWelcomeEmail(user);
}

Odporúčam:

function validateUser(user) { /* ... */ }
function cleanUserData(user) { /* ... */ }
function saveUserToDb(user) { /* ... */ }
function sendWelcomeEmail(user) { /* ... */ }

Menšie, samostatné funkcie uľahčujú prácu – môžeš ich ľahko kombinovať, meniť a jednotlivo testovať. 

3. DRY – Duplicitný kód je nepriateľ

Ak kopíruješ ten istý kód na viaceré miesta, pridávaš si do života bolestivú budúcnosť. Odporúčam dodržiavať princíp DRY (Don’t Repeat Yourself).

Neodporúčam:

function getAdminEmail(admin) {
   return admin.email;
}

function getUserEmail(user) {
   return user.email;
}

Odporúčam:

function getEmail(entity) {
   return entity.email;
}

Raz upravíš a funguje všade. Geniálne!

4. Komentáre píš len vtedy, keď sú naozaj potrebné

Najlepší komentár je ten, ktorý nemusíš písať, pretože kód hovorí sám za seba.

Neodporúčam:

// Táto premenná počíta počet iterácií v cykle
let i = 0;

Odporúčam:

// Počítadlo na sledovanie pokusov o pripojenie k serveru,
// aby sme zabránili nekonečnej slučke v prípade opakovaných zlyhaní spojenia.  
let iterationCount = 0;

Ale ak už komentuješ, radšej vysvetli prečo niečo robíš, nie čo robíš.

5. Formátovanie kódu zlepšuje čitateľnosť

Dobre naformátovaný kód zlepšuje čitateľnosť a urýchľuje prácu.

Neodporúčam:

function foo ( x,y ) {
   return x+y;
}

Odporúčam:

function foo(x, y) {
   return x + y;
}

Používaj lintovanie a automatické formátovanie. Zaberie to 5 minút, ale ušetrí hodiny nervov.

6. Ošetruj si chyby

Nikdy nepredpokladaj, že všetko bude fungovať bezchybne. Preto máme try-catch.

Neodporúčam:

function readFile(filePath) {
   let file = open(filePath, 'r');
   let content = file.read();
   file.close();
   return content;
}

Odporúčam:

function readFile(filePath) {
   try {
      return fs.readFileSync(filePath, 'utf-8');
   } catch (error) {
      console.error('Chyba pri čítaní súboru:', error);
      return null;
   }
}

Nechceš predsa, aby tvoja aplikácia spadla len preto, že niekto omylom zmazal súbor, však?

7. Testy nie sú zbytočné – pomáhajú ti

Bez testov je tvoj kód ako padák, ktorý si si zabudol skontrolovať pred zoskokom.

Odporúčam:

function add(a, b) {
   return a + b;
}
function testAdd() {
   console.assert(add(2, 3) === 5, 'Test zlyhal');
   console.assert(add(-1, 1) === 0, 'Test zlyhal');
}
testAdd();

Ak niečo nefunguje, chceš to zistiť skôr, než to zistí tvoj šéf alebo zákazník.

8. Menej závislostí = menej problémov

Prílišná závislosť na externých knižniciach sa môže vypomstiť. Skvelým príkladom je incident s left-pad npm. V roku 2016 vývojár odstránil malý balík left-pad z npm, čo spôsobilo pád tisícov projektov na celom internete. Táto udalosť ukázala, aké rizikové môže byť spoliehať sa na externé balíky pre jednoduché operácie. Viac si o tom môžeš prečítať tu.

Neodporúčam:

import _ from 'lodash';
function calculateSum(data) {
   return _.sum(data);
}

Odporúčam:

function calculateSum(data) {
   return data.reduce((acc, num) => acc + num, 0);
}

Používaj externé knižnice rozumne – iba keď sú naozaj potrebné.

9. Refaktorovanie je nevyhnutné

Refaktoruj priebežne – inak ti bude tvoj starý kód čoskoro pripadať ako totálny bordel.

Odporúčam:

// Pôvodný kód
function calculateDiscount(price, discount) {
   let discountedPrice = price - (price * discount / 100);
   return discountedPrice;
}

// Refaktorovaný kód
function calculateDiscount(price, discount) {
   return price * (1 - discount / 100);
}

Jednoduchšie, čistejšie, lepšie.

Záver: Programátori, ktorí píšu čistý kód, majú ľahší život

Čistý kód nie je len o tom, aby vyzeral pekne – je to o tom, aby bol pochopiteľný, udržiavateľný a efektívny. V bart-e vieme, že dobrý kód šetrí čas, nervy aj peniaze. A ak máš rád poriadok v kóde tak ako my, možno by si sa u nás cítil ako doma. 😉