Uważam, że kombinacja składni obiektowej this.method()
i method(this)
składni proceduralnej / funkcjonalnej Pythona jest bardzo niepokojąca:
x = [0, 1, 2, 3, 4]
x.count(1)
len(x)
any(x)
x.reverse()
reversed(x)
x.sort()
sorted(x)
Jest to szczególnie złe, ponieważ duża liczba funkcji (a nie metod) jest po prostu zrzucana do globalnej przestrzeni nazw : metody odnoszące się do list, ciągów, liczb, konstruktorów, metaprogramowania, wszystkie zmieszane w jedną dużą listę posortowaną alfabetycznie.
Przynajmniej w językach funkcjonalnych, takich jak F #, wszystkie funkcje mają odpowiednio rozmieszczone nazwy w modułach:
List.map(x)
List.reversed(x)
List.any(x)
Więc nie wszyscy są razem. Co więcej, jest to standard przestrzegany w całej bibliotece, więc przynajmniej jest spójny.
Rozumiem powody, dla których warto wykonać funkcję vs metoda , ale nadal uważam, że złym pomysłem jest mieszanie ich w ten sposób. Byłbym znacznie szczęśliwszy, gdyby przestrzegano składni metody, przynajmniej w przypadku typowych operacji:
x.count(1)
x.len()
x.any()
x.reverse()
x.reversed()
x.sort()
x.sorted()
Niezależnie od tego, czy metody mutują, czy nie, posiadanie ich jako metod na obiekcie ma kilka zalet:
- Jedno miejsce do wyszukiwania „typowych” operacji na typie danych: inne biblioteki / etc. mogą mieć inne wymyślne rzeczy, które mogą zrobić z typami danych, ale wszystkie operacje „domyślne” są w metodach obiektu.
- Nie musisz powtarzać,
Module
kiedy dzwonisz Module.method(x)
. Biorąc powyższy przykładowy wykaz funkcji, dlaczego muszę ciągle powtarzać List
? Powinien wiedzieć, że jest to List
i nie chcę wywoływać tej Navigation.map()
funkcji! Korzystanie ze x.map()
składni powoduje, że jest ona SUCHA i nadal jednoznaczna.
I oczywiście ma to zalety w porównaniu z metodą umieszczania wszystkiego w globalnej przestrzeni nazw . To nie jest tak, że obecny sposób nie jest w stanie zrobić rzeczy. Jest to nawet dość terse ( len(lst)
), ponieważ nic nie ma przestrzeni nazw! Rozumiem zalety korzystania z funkcji (zachowanie domyślne itp.) W stosunku do metod, ale nadal mi się to nie podoba.
To jest po prostu bałagan. A w dużych projektach bałagan jest twoim największym wrogiem.