2016-04-19 32 views
6

Mam ten zwyczaj wcięć grupę wywołań funkcji tak:wcięcie grupa konwencja kod zmienny wywołanie funkcji

List <Dog> dogs = new ArrayList<>(); 
    dogs.add(new Dog(1)); 
    dogs.add(new Dog(2)); 
    dogs.add(new Dog(3)); 
    dogs.add(new Dog(4)); 
    dogs.add(new Dog(5)); 
System.out.println("list of dogs: " + dogs); 
Cat cat1 = new Cat(1); 
    cat.meow(); 
    cat.startsRunningFrom(dogs); 
Dog d1 = dogs.get(1); 
d1.catches(cat1); 

Czy te naprawdę złe praktyki w konwencji kodu, lub nie zostały one naprawdę mowa o? Ponieważ starałem się znaleźć konwencje kodu, które zalecałyby takie wcięcia w wywołaniach funkcji z pewnych zmiennych/klasy.

Dla mnie powyższy kod jest bardziej czytelny niż bez:

List<Dog> dogs = new ArrayList<>(); 
dogs.add(new Dog(1)); 
dogs.add(new Dog(2)); 
dogs.add(new Dog(3)); 
dogs.add(new Dog(4)); 
dogs.add(new Dog(5)); 
System.out.println("list of dogs: " + dogs); 
Cat cat1 = new Cat(1); 
cat.meow(); 
cat.startsRunningFrom(dogs); 
Dog d1 = dogs.get(1); 
d1.catches(cat1); 

Wgłębienia dla mnie zapewnić wyraźne oddzielenie od deklaracji zmiennych i innych operacji funkcyjnych, z następujących czynności ściśle związanych w zmiennej.

Czy ktoś może skomentować, dlaczego w ogóle jest to zła praktyka lub ogólnie akceptowana poza dostarczonymi kodami (poza operacjami na liście).

Odpowiedz

2

Czy są to naprawdę złe praktyki w konwencji kodowej, czy tak naprawdę nie mówi się o nich?

Cóż, to zależy! Jeśli pracujesz nad open source, musisz trzymać się wytycznych. Nie ma nic złego/dobrego, chyba że twoi rówieśnicy są w porządku z tym.

W rzeczywistości wszystkie osoby w moim zespole używają formaterów kodu i mają ustawione wstępnie zdefiniowane reguły dotyczące komentarzy i białych znaków itp. Staramy się przestrzegać tych samych zasad, aby łatwo było zauważyć różnice podczas łączenia kodu z powrotem do głównego repozytorium.

Inną sprawą jest to, że jestem tak przyzwyczajony, że widzę ogólnie akceptowane konwencje, że pod fragmentem kodu wyłudzają mnie zakładając początek i koniec bloku.

List<Dog> dogs = new ArrayList<>(); 
----> dogs.add(new Dog(1)); 
     dogs.add(new Dog(2)); 
     dogs.add(new Dog(3)); 
     dogs.add(new Dog(4)); 
     dogs.add(new Dog(5)); <---- 
System.out.println("list of dogs: " + dogs); 

Nie ma nic złego w korzystaniu z takich konwencji, ale jak powiedziałem wcześniej, powinna ona zostać przyjęta przez swoich rówieśników w środowisku, w którym pracujesz.

+0

Zgadzam się, że to przede wszystkim pytanie oparte na opiniach, ale właśnie zastanawiałem się, czy to naprawdę zła praktyka, której należy unikać prawie zawsze. Twoja wypowiedź na temat tego, jak mogła wyglądać w bloku kodu, była tym, czego szukałem, bez względu na to, czy jest to naprawdę nieskuteczne, czy może prowadzić do błędów. Chciałbym myśleć, że moje wcięcie jako wirtualny blok kodu. Sądzę więc, że nie ma w tym nic złego. Dziękuję Ci – samiunn

2

Doceniam twoje myślenie i nie sądzę, że w tym, co robisz, jest coś nie w porządku. Ale faktem jest, że w organizacjach, w których wielu programistów pracuje nad tym samym kodem, ważne jest, aby mieć spójne reguły stylu. Dokładne zasady będą się różnić w zależności od organizacji, organizacji lub zespołu w ramach organizacji (w której pracuję, różne zespoły mogą przyjmować różne style, choć nie będą radykalnie różne). Ale jeśli chodzi o rzeczy takie jak wcięcia, odstępy, gdzie zacząć nową linię itp., Korzyści wynikające ze stałego stylu zwykle przewyższają wszelkie korzyści, jakie możesz uzyskać, robiąc to w sposób, który wydaje ci się bardziej logiczny. Czasem nie lubię wyborów stylu, które są mi narzucone, ale w takich sprawach nie warto się kłócić. Jeśli jednak jesteś w zespole, możesz spróbować przekonać ich, że Twój styl jest lepszy w takim przypadku. Wadą robienia tego na swój sposób jest jednak to, że prostszy zestaw reguł można zaprogramować w IDE, co automatycznie rozdziela rzeczy zgodnie ze stylem twojego zespołu.

W tym przypadku, jeśli próbujesz użyć wcięcia, aby wskazać pewne fragmenty kodu, które pasują do siebie, czy mógłbym zaproponować przeniesienie ich do własnej metody pomocnika? Osiągnę to, co myślę, że próbujesz zrobić.

Ponadto, w przypadku, gdy masz listę i dodajesz do niej kilka pozycji, powinieneś zajrzeć do Google Guava, która ma kilka metod ustawiania listy z wywołaniem pobierającym zmienną liczbę argumentów (np newArrayList w Lists class.

1

jest to trochę kwestia opinii/w gestii zespołu. jednak zgadzam się, że wcięcie jest lepsza niż brak wcięcia. Myślę, że nie jest to najlepsze rozwiązanie. Jak na ten temat :

List<Dog> dogs = initializeDogs(); 
System.out.println("list of dogs: " + dogs); 
initializeCat(dogs); 
Dog d1 = dogs.get(1); 
d1.catches(cat1); 

A następnie zadeklaruj metody pomocnicze, aby zrobić to, czego potrzebujesz:

private ArrayList<Dog> initializeDogs() { 
ArrayList<Dog> dogs = new ArrayList<>(); 
dogs.add(new Dog(1)); 
dogs.add(new Dog(2)); 
dogs.add(new Dog(3)); 
dogs.add(new Dog(4)); 
dogs.add(new Dog(5)); 
return dogs; 
} 

private void initializeCat(List<Dog> dogs) { 
Cat cat1 = new Cat(1); 
cat.meow(); 
cat.startsRunningFrom(dogs); 
} 

Chodzi o to, że konwencja z wcięciami prawdopodobnie nie jest konieczna, jeśli stosujesz metody zgodnie z najlepszymi praktykami.