C jest językiem minimalistycznym. Udostępnia jedynie podstawowe narzędzia programistyczne. Masz zmienne, pętle i kontrolę przepływu. To wszystko. Jeśli chcesz odczytać dane wprowadzane z klawiatury lub wyświetlić dane na ekranie, C nie ma do tego wbudowanych funkcji. Trzeba je napisać samodzielnie lub skorzystać z bibliotek.
Dlatego biblioteki w C są tak ważne. Są to fragmenty kodu, które programiści wyodrębniają ze swoich projektów, aby umożliwić ich ponowne wykorzystanie. Prawdopodobnie korzystałeś już ze standardowej biblioteki we/wy lub stdio, nawet o tym nie myśląc. Ale poza tym istnieją biblioteki do pracy z matematyką, ciągami znaków i czasem. Możesz także stworzyć swój własny.
Podział kodu na moduły ułatwia testowanie, debugowanie i zrozumienie. Umożliwia to również ponowne wykorzystanie logiki w różnych programach. Przyjrzyjmy się, jak wziąć monolityczny skrypt i zamienić część jego kodu w funkcję przenośną.
Wyodrębnianie logiki z monolitu
Rozważmy następujący program w języku C. Wypełnia tablicę liczbami losowymi, sortuje ją za pomocą algorytmu sortowania bąbelkowego i drukuje wyniki.
Logika sortowania jest tutaj ukryta w main. Aby umożliwić ponowne użycie, musimy wyodrębnić sortowanie bąbelkowe.
Utwórz podstawową funkcję
W tym przykładzie tablica „a” i stała „MAX” są globalne. Oznacza to, że funkcja sortowania niekoniecznie wymaga parametrów, aby uzyskać do nich dostęp. Jednakże dobre praktyki programistyczne nakazują używanie zmiennych lokalnych dla liczników pętli (x, y, t ), aby funkcja była samodzielna.
Oto refaktoryzowany kod. Wyodrębniliśmy logikę sortowania w funkcji bubble_sort.
Przekazujesz liczbę elementów do bubble_sort zamiast zakodowanego na stałe MAX. To działa. Ale kod jest nadal powiązany z tablicą globalną „a”.
Uogólnienie dotyczące prawdziwej możliwości ponownego użycia
Funkcja nadaje się do ponownego użycia tylko wtedy, gdy nie zależy od stanu globalnego. Możemy jeszcze bardziej uogólnić sortowanie bąbelkowe, przekazując samą tablicę jako parametr.
Zmień sygnaturę funkcji na:
Mówi to kompilatorowi, aby zaakceptował tablicę liczb całkowitych dowolnego rozmiaru. Treść funkcji bubble_sort nie ulega zmianie. Wystarczy zaktualizować wywołanie w main :
Zauważ, że nie używamy &a w wywołaniu funkcji. Możesz spodziewać się przekazania adresu, ponieważ sortowanie modyfikuje tablicę, ale w C tablice są konwertowane na wskaźniki, gdy

















