2.6 — Dlaczego funkcje są przydatne i jak efektywnie z nich korzystać

Teraz, gdy omówiliśmy, czym są funkcje i niektóre z ich podstawowych możliwości, przyjrzyjmy się bliżej, dlaczego są przydatne.

Po co używać funkcji?

Nowi programiści często pytają: „Czy nie możemy po prostu umieścić całego kodu wewnątrz funkcji głównego ?” W przypadku prostych programów absolutnie możesz. Funkcje zapewniają jednak szereg korzyści, dzięki którym są niezwykle przydatne w programach o nietrywialnej długości i złożoności.

  • Organizacja -- W miarę wzrostu złożoności programów, umieszczanie całego kodu w funkcji main() staje się coraz bardziej skomplikowane. Funkcja przypomina miniprogram, który możemy napisać oddzielnie od programu głównego, bez konieczności myślenia o pozostałej części programu w trakcie jego pisania. Pozwala nam to zredukować skomplikowany program na mniejsze, łatwiejsze do zarządzania fragmenty, co zmniejsza ogólną złożoność naszego programu.
  • Ponowne użycie -- Po zapisaniu funkcji można ją wielokrotnie wywoływać z poziomu programu. Pozwala to uniknąć powielania kodu („Nie powtarzaj się”) i minimalizuje prawdopodobieństwo błędów kopiowania/wklejania. Funkcje można także współużytkować z innymi programami, zmniejszając ilość kodu, który trzeba za każdym razem pisać od zera (i ponownie testować).
  • Testowanie -- Ponieważ funkcje zmniejszają redundancję kodu, przede wszystkim jest mniej kodu do przetestowania. Również dlatego, że funkcje są samodzielne, po przetestowaniu funkcji i upewnieniu się, że działa, nie musimy jej testować ponownie, chyba że ją zmienimy. Zmniejsza to ilość kodu, który musimy przetestować za jednym razem, znacznie ułatwiając znalezienie błędów (lub przede wszystkim ich uniknięcie).
  • Rozszerzalność -- Kiedy potrzebujemy rozszerzyć nasz program, aby obsłużył przypadek, którego wcześniej nie obsługiwał, funkcje pozwalają nam wprowadzić zmiany w jednym miejscu i sprawić, że zmiana ta zacznie obowiązywać za każdym razem, gdy funkcja zostanie uruchomiona tzw.
  • Abstrakcja -- Aby skorzystać z funkcji, wystarczy znać jej nazwę, wejścia, wyjścia i miejsce, w którym się ona znajduje. Nie musisz wiedzieć, jak to działa ani od jakiego innego kodu jest zależne, aby z niego korzystać. Zmniejsza to ilość wiedzy wymaganej do korzystania z kodu innych osób (w tym wszystkiego, co znajduje się w bibliotece standardowej).

Efektywne korzystanie z funkcji

Jednym z największych wyzwań, przed którymi stają nowi programiści (oprócz nauki języka), jest zrozumienie, kiedy i jak efektywnie korzystać z funkcji. Oto kilka podstawowych wskazówek dotyczących pisania funkcji:

  • Grupy instrukcji, które pojawiają się w programie więcej niż raz, generalnie powinny zostać przekształcone w funkcję. Na przykład, jeśli wielokrotnie w ten sam sposób odczytujemy dane wejściowe użytkownika, jest to świetny kandydat na funkcję. Jeśli wygenerujemy coś w ten sam sposób w wielu miejscach, jest to również świetny kandydat na funkcję.
  • Kod, który ma dobrze zdefiniowany zestaw danych wejściowych i wyjściowych, jest dobrym kandydatem na funkcję (szczególnie jeśli jest skomplikowany). Na przykład, jeśli mamy listę elementów, które chcemy posortować, kod wykonujący sortowanie będzie świetną funkcją, nawet jeśli zostanie wykonany tylko raz. Dane wejściowe to nieposortowana lista, a dane wyjściowe to posortowana lista. Inną dobrą perspektywiczną funkcją byłby kod symulujący rzut 6-ścienną kostką. Twój bieżący program może używać tego tylko w jednym miejscu, ale jeśli zamienisz to w funkcję, będzie gotowa do ponownego użycia, jeśli później rozszerzysz swój program lub w przyszłym programie.
  • Funkcja powinna zazwyczaj wykonywać jedno (i tylko jedno) zadanie.
  • Gdy funkcja stanie się zbyt długa, zbyt skomplikowana lub trudna do zrozumienia, można ją podzielić na wiele podfunkcji. Nazywa się to refaktoryzacją. Więcej o refaktoryzacji mówimy na lekcji 3.10 — Znajdowanie problemów, zanim staną się problemami.

Zazwyczaj, ucząc się C++, napiszesz wiele programów obejmujących 3 podzadania:

  1. Odczyt danych wejściowych od użytkownika
  2. Obliczanie wartości z wejść
  3. Drukowanie obliczonej wartości

W przypadku trywialnych programów (np. mniej niż 20 linii kodu) niektóre lub wszystkie z nich można wykonać w funkcja głównego. Jednakże w przypadku dłuższych programów (lub po prostu do ćwiczeń) każdy z nich jest dobrym kandydatem na oddzielną funkcję.

Nowi programiści często łączą obliczanie wartości i drukowanie obliczonej wartości w jednej funkcji. Jednakże narusza to praktyczną zasadę „jednego zadania” dotyczącą funkcji. Funkcja obliczająca wartość powinna zwrócić tę wartość wywołującemu i pozwolić wywołującemu zdecydować, co zrobić z obliczoną wartością (np. wywołać inną funkcję w celu wydrukowania wartości).

guest
Twój adres e-mail nie zostanie wyświetlony
Znalazłeś błąd? Zostaw komentarz powyżej!
Komentarze związane z poprawkami zostaną usunięte po przetworzeniu, aby pomóc zmniejszyć bałagan. Dziękujemy za pomoc w ulepszaniu witryny dla wszystkich!
Awatary z https://gravatar.com/ są połączone z podanym adresem e-mail.
Powiadamiaj mnie o odpowiedziach:  
177 Komentarze
Najnowsze
Najstarsze Najczęściej głosowane
Wbudowane opinie
Wyświetl wszystkie komentarze