Niedawno nabrałem nawyku, o którym wiem, że wielu z was może się nie podobać, ale który ostatecznie pomaga mi pilnować globalnej struktury kodu, a nie struktury pojedynczej (czasem) powtarzalnej metody: grupowania liczb instrukcji w jednym wierszu, na przykład:
textBox1.Text = "Something!"; textBox2.Text = "Another thing!"; textBox3.Text = "Yet another thing!";
w przeciwieństwie do
textBox1.Text = "Something!";
textBox2.Text = "Another thing!";
textBox3.Text = "Yet another thing!";
Robię to w przypadku powtarzających się zadań, aby zachować ogólny „piękno” kodu i pomóc w łatwym śledzeniu struktury programu, ale przyznaję, że może to nie być dobrą praktyką. Właściwie to często go używam, więc chciałbym wiedzieć, co o tym myślisz. Czy uważasz, że ktoś, kto kiedykolwiek musiałby utrzymywać mój kod, ma problemy z tym podejściem?
coding-style
Użytkownik
źródło
źródło
Odpowiedzi:
Naprawdę uważam, że czytelność bardzo ucierpiałaby zarówno dla ciebie, jak i na pewno dla każdego, kto czytałby kod. Wszystko ma sens, gdy piszesz go po raz pierwszy, ponieważ jest to aktywnie w twoim umyśle. Inaczej jest, gdy skanujesz kod, aby zobaczyć, jakie zmienne i funkcje są tam, gdzie ... niszczysz swoją zdolność do skanowania własnego kodu. To ogromne nie-nie, a poza tym źle, jeśli ktokolwiek będzie musiał przeczytać Twój kod.
Pomyśl także o tym, jak czytasz kod. Jest zawsze z góry na dół, przewija w dół. Twoja metoda tego nie łączy, a nawet wprowadza jeden z najbrzydszych możliwych problemów w czytaniu kodu; przewijanie w poziomie . Nigdy nie lekceważ, jak trudne może to być czytanie kodu. Nigdy nie przewijasz w poziomie, nigdy nie zmuszasz ludzi do przewijania w poziomie, w prawie każdym kontekście jest to wyjątkowo nienaturalne.
Ponadto, jeśli problem dotyczy powtarzającego się kodu ... nie zapomnij Ctrl-C. Z twojego przykładowego kodu może być bardziej wydajne wpisywanie tego wszystkiego ręcznie, ale jeśli musisz skopiować kilka wierszy kilka razy, wydaje się, że równie skuteczne byłoby skopiowanie pierwszego wiersza i nowego wiersza, wklej go x razy i dokonaj zmian, rzadziej literówka też.
Aha i literówki! Pogorszenie czytelności kodu w ten sposób może sprawić, że koszmarem będzie stwierdzenie, która z 50 deklaracji zmiennych została ustawiona nieprawidłowo. Większość kompilatorów podaje teraz błędy w wierszach ORAZ numerach kolumn, ale znalezienie błędu w wierszu jest DUŻO łatwiejsze niż znalezienie kolumny.
źródło
Jedna instrukcja w wierszu ułatwia także sprawdzenie, co zmieniło się w różnicach side-by-side.
źródło
Chociaż przykład tego nie pokazuje, istnieje inny problem z grupowaniem wielu instrukcji w jednym wierszu. Co jeśli jedno z pięciu stwierdzeń, które masz w jednym wierszu, zgłasza wyjątek?
Twój ślad stosu powie „EBlah w linii N” ... a teraz nie masz pojęcia, które z tych pięciu stwierdzeń spowodowało wyjątek.
(To samo dzieje się z nadmiernie długim stwierdzeniem dowolnego rodzaju).
źródło
foo.bar[grill.boo].flip.flap[flop].mickey(minnie).marshmallow
(składnia Java / C #). Sortowanie tego rodzaju bałaganu jest zawsze lepsze dzięki dodatkowym wierszom (i zmiennym tymczasowym… oraz klockowi wskazówek 2D6 dla oryginalnego programisty).Jedna instrukcja na linię to powszechnie stosowany styl kodowania. W rezultacie większość programistów, którzy patrzą na twój kod w przyszłości, prawdopodobnie skrzywi się, gdy zobaczy wiele instrukcji w wierszu. Kiedy jesteś przyzwyczajony do patrzenia na coś w jedną stronę, może to być dezorientujące, gdy patrzysz na to w inny sposób.
Z tego powodu odradzam to, z wyjątkiem rzadkich okoliczności.
źródło
Ostatnio robiłem to 25 lat temu, używając języków zinterpretowanych na małych mikroprocesorach pracujących z niskimi częstotliwościami zegara, gdzie każde wyeliminowane miejsce lub powrót karetki dawało wzrost wydajności.
Skrzywiłem się na samą myśl o tym (choć zrobiono to z ważnego powodu).
Niestety taki kod jest trudny do odczytania, a zatem trudny do utrzymania.
źródło
Składniowo, naprawdę nie ma w tym nic złego. To zależy od stylu kodowania twojego zespołu.
Ponieważ większość kodu, który widziałem (w tym kod znajdujący się w standardowych nagłówkach c ++) jest wykonywany w ten sposób, wybrałbym twoją pierwszą metodę.
źródło
To naprawdę niezwykły styl kodowania.
Zalecałbym zamiast tego używać pustych wierszy do rozdzielania logicznych części kodu.
źródło
Posunięcie się zbyt daleko w prawo może spowodować tyle samo problemów, co wielu linii.
Musiałem poradzić sobie z niektórymi instrukcjami SQL z dziesiątkami pól. Zwykle umieszczałbym po jednym w wierszu, ale przy kilku okazjach konsolidowałem 3 lub 4 w jednym rzędzie. To wydaje się dobrym pomysłem podczas programowania, gdy musisz przewijać kilka razy w górę i w dół.
Żałuję powrotu do tego kodu. Wydaje się, że posiadanie dodatkowych rzędów nie stwarza większego problemu, więc zwykle to usuwam.
źródło
Po minucie, gdy położył dłonie na głowie, użyje swoich ulubionych funkcji IDE Regex, aby automatycznie rozdzielić cały ten nieczytelny kod na jedną instrukcję w wierszu.
Wystarczy krótkie spojrzenie na pokazany przykład, aby zrozumieć, o ile bardziej czytelne jest drugie podejście.
Znacznie łatwiej jest śledzić pionowy przepływ stron bez konieczności ciągłego przesuwania oczu w poziomie.
Spójrz na swój przykład: od razu wiesz, że kod dotyczy
Text
właściwości różnychtextBox
obiektów i zawierają ciąg znaków jako wartości. Całkiem proste.źródło
Nie użyłbym takiego stylu osobiście. Podsumowując
Plusy
Cons
źródło
if (x > maxX) {x=maxX; peggedAny = true;}
. Jeśli każda taka operacja z łatwością zmieści się w jednej linii, wolałbym mieć osiem takich linii niż dziesiątki linii, które dzielą instrukcje. Gdyby takie porównania były stosowane w wystarczającej liczbie miejsc, cztery zdania formularzapeggedAny |= pegValueMinMax(ref x, minX, maxX);
mogłyby być lepsze, ale ktoś, kto czytałby, musiałby przeczytać,pegValueMinMax
aby zobaczyć, co robi.