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ć,
Modulekiedy dzwonisz Module.method(x). Biorąc powyższy przykładowy wykaz funkcji, dlaczego muszę ciągle powtarzać List? Powinien wiedzieć, że jest to Listi 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.