Я вважаю поєднання python об'єктно-орієнтованого this.method()
та процедурно-функціонального method(this)
синтаксису дуже неспокійним:
x = [0, 1, 2, 3, 4]
x.count(1)
len(x)
any(x)
x.reverse()
reversed(x)
x.sort()
sorted(x)
Це особливо погано, оскільки велика кількість функцій (а не методів) просто скидаються в глобальний простір імен : методи, що стосуються списків, рядків, чисел, конструкторів, метапрограмування, всі об'єднані в один великий алфавітно-відсортований список.
Принаймні, такі функціональні мови, як F #, мають усі функції, правильно розподілені в модулях:
List.map(x)
List.reversed(x)
List.any(x)
Отже, вони не всі разом. Крім того, цей стандарт дотримується у всій бібліотеці, так що принаймні він відповідає.
Я розумію причини виконання функції в порівнянні з методом , але я все ще думаю, що це погана ідея їх змішувати так. Я був би набагато щасливішим, якби дотримувався синтаксис методу, принаймні для звичайних операцій:
x.count(1)
x.len()
x.any()
x.reverse()
x.reversed()
x.sort()
x.sorted()
Незалежно від того, мутують вони методи чи ні, використання їх як методів на об'єкті має ряд переваг:
- Єдине місце для пошуку "загальних" операцій над типом даних: інші бібліотеки / тощо. можуть бути інші химерні речі, які вони можуть зробити для типів даних, але операції "за замовчуванням" - всі в методах об'єкта.
- Не потрібно постійно повторювати
Module
дзвінки під час дзвінка Module.method(x)
. Беручи приклад функціонального списку вище, чому я повинен постійно говорити List
? Він повинен знати, що це є, List
і я не хочу викликати Navigation.map()
функцію на ньому! Використання x.map()
синтаксису зберігає його СУХО та однозначно.
І звичайно, він має переваги перед способом цього " все-у-глобальному"-просторі імен . Справа не в тому, що нинішній спосіб не в змозі зробити справи. Це навіть досить коротко ( len(lst)
), оскільки нічого не розділено на імена! Я розумію переваги використання функцій (поведінка за замовчуванням тощо) перед методами, але все одно мені це не подобається.
Це просто безладно. А у великих проектах безладдя - ваш найгірший ворог.