C je přirozeně minimalistický jazyk. Zvládne to nejnutnější a zbytek nechá na vás. Nemá vestavěný vstup z klávesnice ani výstup na obrazovku. Pokud chcete zobrazit text, potřebujete externí nástroje. Zde vstupují do hry C programovací knihovny. Jedná se o části znovu použitelného kódu, které rozšiřují základní možnosti jazyka.

Představte si je jako pluginy pro vaši logiku. Vstup a výstup zpracovává standardní knihovna stdio. Jiné knihovny spravují matematické operace, řetězce nebo čas. Použití knihoven rozdělí váš projekt na spravovatelné moduly. To usnadňuje ladění. Umožňuje také převzít pracovní kód ze starých projektů a přesunout jej do nových.

Proč na modulárním kódu záleží

Psaní všeho do jednoho souboru rychle vede k chaosu. Skončíte se stovkami řádků, které je obtížné sledovat. Knihovny řeší tento problém izolací funkcí. Testujete jednu funkci. Zkontrolujete, že to funguje. Poté přejděte k dalšímu kroku.

Výsledkem je čistší kód. Je také bezpečnější. Pokud se objeví chyba, víte přesně, který modul zkontrolovat. Problém nemusíte hledat v obrovském monolitickém scénáři.

Příklad: Refaktoring náhodného řazení

Podívejme se na praktický příklad. Představte si program, který generuje náhodná čísla, třídí je a zobrazuje na obrazovce. Zdrojový kód může vypadat jako zamotaný nepořádek.

Tento kód vyplní pole náhodnými hodnotami. Poté použije bublinové třídění. Nakonec vypíše setříděný seznam. Funguje to. Není ale znovu použitelný. Logika řazení je pevně zakódována. Velikost pole je pevná. Algoritmus řazení nebo zdroj dat nelze snadno nahradit.

Krok 1: Extrahování funkce řazení

Prvním krokem k vytvoření knihovny je extrakce. Vezměte smyčku pro třídění bublin a přeměňte ji na funkci. Protože pole a a konstanta MAX jsou v tomto fragmentu kódu globální, funkce pro ně nepotřebuje parametry. Také nemusí vracet hodnotu.

Věnujte pozornost parametrům. Nyní funkce přijímá m – počet prvků. Díky tomu je flexibilní. Můžete seřadit pole 10 prvků. Nebo pole 100 prvků. Jednoduše předáváte velikost.

Hlavní funkce se zjednoduší. Vyplňuje pole. Způsobuje třídění. Zobrazí výsledek.

Tohle už je lepší. Ale kód je stále vázán na globální pole a. Co když chcete třídit další pole? Nebo předávat data z jiného modulu?

Krok 2: Zobecnění pro skutečnou znovupoužitelnost

Aby byla tato knihovna skutečně připravena, předejte samotné pole jako parametr. Změňte podpis funkce.

To říká kompilátoru, aby přijal pole celých čísel libovolné velikosti. Tělo funkce se nemění. Jednoduše předáte data logice místo spoléhání se na globální stav.

Volání main je trochu aktualizováno. Předáte název pole a a jeho velikost MAX.

Nepoužívejte &a. Možná si myslíte, že potřebujete ukazatel na celé pole. To je špatně. V C jsou názvy polí převedeny na ukazatele na jejich první prvek, když jsou předány funkcím. Pochopení tohoto rozdílu vyžaduje znalost ukazatelů. Ale prozatím vězte, že stačí „a“.

Proč tato struktura vítězí

vy