W niektórych językach programowania kolejność ma znaczenie, ponieważ nie można używać rzeczy, dopóki nie zostaną zadeklarowane. Ale z wyjątkiem tego, w większości języków nie ma to znaczenia dla kompilatora. Zatem pozostaje ci to ważne dla ludzi.
Mój ulubiony cytat Martina Fowlera to: Any fool can write code that a computer can understand. Good programmers write code that humans can understand.Powiedziałbym, że porządek w twojej klasie powinien zależeć od tego, co ułatwia ludziom zrozumienie.
Osobiście wolę łagodniejsze traktowanie, które Bob Martin podaje w swojej Clean Codeksiążce. Zmienne składowe na początku klasy, następnie konstruktory, a następnie wszystkie inne metody. I zamawiasz metody, aby były blisko siebie i jak są używane w klasie (zamiast arbitralnie umieszczać wszystkie publiczne, a następnie prywatne, a następnie chronione). Nazywa to minimalizowaniem „odległości w pionie” lub coś w tym rodzaju (w tej chwili nie mam przy sobie książki).
Edytować:
Podstawową ideą „odległości w pionie” jest to, że chcesz uniknąć skakania wokół kodu źródłowego, aby go zrozumieć. Jeśli rzeczy są powiązane, powinny być bliżej siebie. Niepowiązane rzeczy mogą być dalej od siebie.
Rozdział 5 Czystego kodu (świetna książka, btw) zawiera mnóstwo szczegółów na temat tego, jak Pan Martin sugeruje zamówienie kodu. Sugeruje, że czytanie kodu powinno działać tak, jak czytanie artykułu z gazety: na pierwszym miejscu są szczegóły wysokiego poziomu (u góry), a podczas czytania pojawia się więcej szczegółów. Mówi: „Jeśli jedna funkcja wywołuje inną, powinny one być pionowo zamknięte, a osoba dzwoniąca powinna znajdować się powyżej rozmówcy, jeśli to w ogóle możliwe”. Ponadto powiązane pojęcia powinny być blisko siebie.
Oto wymyślony przykład, który jest zły na wiele sposobów (zły projekt OO; nigdy nie używaj doublepieniędzy), ale ilustruje ideę:
public class Employee {
...
public String getEmployeeId() { return employeeId; }
public String getFirstName() { return firstName; }
public String getLastName() { return lastName; }
public double calculatePaycheck() {
double pay = getSalary() / PAY_PERIODS_PER_YEAR;
if (isEligibleForBonus()) {
pay += calculateBonus();
}
return pay;
}
private double getSalary() { ... }
private boolean isEligibleForBonus() {
return (isFullTimeEmployee() && didCompleteBonusObjectives());
}
public boolean isFullTimeEmployee() { ... }
private boolean didCompleteBonusObjectives() { ... }
private double calculateBonus() { ... }
}
Metody są uporządkowane, aby były zbliżone do tych, które je wywołują, schodząc z góry. Gdybyśmy umieścili wszystkie privatemetody poniżej publictych, musiałbyś robić więcej skoków, aby śledzić przebieg programu.
getFirstNamei getLastNamesą ze sobą powiązane (i getEmployeeIdprawdopodobnie też są), więc są blisko siebie. Moglibyśmy przenieść je wszystkie na dół, ale nie chcielibyśmy widzieć getFirstNamena górze i getLastNamena dole.
Mam nadzieję, że daje to podstawowy pomysł. Jeśli jesteś zainteresowany tego typu rzeczami, zdecydowanie polecam lekturę Clean Code.