Funkcje służą nie tylko do zminimalizowania powielania kodu - służą również do dzielenia długiej funkcji na mniejsze w celu zwiększenia czytelności, a także do komentowania kodu. Jednak to wzmocnienie nie jest wprost odwrotnie proporcjonalne do liczby LOC na funkcję lub metodę; w przeciwnym razie mielibyśmy tony funkcji, z których każda zawiera tylko jedną linię lub dwie kody.
Doprowadziło mnie to do zastanowienia: czy istnieje optymalna liczba LOC na funkcję? Jeśli tak, co to jest i czy różni się między językami?
Odpowiedzi:
Zamiast liczby linii, użyłbym kryteriów, że każda funkcja powinna robić tylko jedną rzecz i robi to dobrze.
źródło
Stara zasada mówi, że funkcja powinna być całkowicie widoczna na ekranie, bez potrzeby przewijania.
Podstawową ideą jest to, że jeśli nie możesz spojrzeć na całą funkcję naraz, funkcja jest zbyt złożona i powinieneś podzielić ją na bardziej podstawowe części.
Chociaż ta zasada jest bardzo praktyczna i przydatna, formalna reguła mówi, że powinieneś zachować tylko jeden logiczny krok w funkcji. Funkcja wykonuje tylko elementarne zadanie, jeśli możesz podzielić zadanie na więcej elementarnych elementów, funkcja musi zostać podzielona.
źródło
Nie ma żadnego.
Ekrany stają się coraz większe, a rozmiary czcionek coraz mniejsze. Praktyczne zasady nie działają tak dobrze, gdy ludzie mają kciuki różnej wielkości.
Bądź zwięzły. Jeśli twoja funkcja wykonuje wiele rzeczy, prawdopodobnie dobrym pomysłem jest podzielenie jej na mniejsze.
źródło
Smalltalk ma nieco nietypowy sposób zmniejszania rozmiaru metod. Kiedy piszesz kod, zapisujesz go w widżecie zwanym Przeglądarką. Przeglądarka ma dwie główne części, podzielone poziomo. Twój kod znajduje się w dolnej połowie.
Domyślnie przeglądarka nie jest bardzo duża. Możesz zmieścić 5 lub 6 linii, zanim będziesz musiał zacząć przewijać. Przewijanie jest oczywiście nieco irytujące.
Dlatego w Smalltalk środowisko „zachęca” do pisania krótkich metod, o długości co najwyżej około 6 linii. (To zwykle dużo; Smalltalk to dość zwięzły język.)
źródło
Idealna liczba wierszy kodu w metodzie jest zmienna. Zasadniczo chcesz napisać tylko tyle kodu, aby zrobić to, co trzeba zrobić w kontekście definicji funkcji. Myślę o tym jako o zasadzie pojedynczej odpowiedzialności , stosowanej tylko do metody zamiast klasy.
Tam, gdzie metoda ma dużo logiki i szereg kroków do wykonania, wówczas sensowne jest podzielenie metody na kilka odrębnych kroków. Każdy z tych kroków zostanie wyodrębniony zgodnie z potrzebami w nowych metodach.
Im mniej każdej metody, tym łatwiej ją zdefiniować i tym łatwiej jest ją zrozumieć i zarządzać. Nie ma nic złego w posiadaniu setek metod, jeśli ich potrzebujesz. Ponadto, zgodnie z SRP , o którym wspomniałem wcześniej, łatwiej jest wyodrębnić nowe klasy, gdy metody zostały rozbite na mniejsze i łatwiejsze do opanowania części.
źródło
Odpowiedź brzmi oczywiście 42 .
Ważne, aby pamiętać: Żadna funkcja nie może nigdy naruszać SRP , lub musisz stawić czoła hiszpańskiej inkwizycji .
Kilka wskazówek, jak zmniejszyć ilość linii:
źródło
Oto kilka wskazówek:
Jeśli masz problem z napisaniem komentarza wyjaśniającego cel i użycie funkcji, jest ona zbyt długa.
Jeśli masz ochotę napisać komentarz wyjaśniający aktywność sekcji kodu w funkcji, funkcja jest za długa.
Jeśli wklejasz kod z innej funkcji, oba są za długie (wyodrębnij ten kod jako osobną funkcję).
Jeśli potrzebujesz konwencji kodowania, aby oddzielić elementy danych klasy od zmiennych lokalnych, funkcja jest za długa, a klasa ma zbyt wiele elementów.
Jeśli musisz robić notatki podczas czytania funkcji, jest ona zbyt długa.
Posiadanie „ton” funkcji, z których każda ma tylko jedną lub dwie linie, niekoniecznie jest złą rzeczą. Odkryłem, że te małe funkcje zostały ponownie wykorzystane znacznie bardziej niż początkowo się spodziewałem.
źródło