В одном тесте я встретил пункты
array.length
array.length()
конечно я знаю, что правильный из них это array.length, но решил за интерес поэкспериментировать в Intellij Idea.
Взял и намеренно поставил скобки после length и самое интересное, описание ошибки компилятора меня удивило...
Описание ошибки такое "method call expected"
Вроде по правилам, вызов метода предполагает наличие скобок, только поля не имеют скобок.
Решил посмотреть, что пишет Intellij когда я просто ставлю точку после array. в списке приводит пункт "length" а значок не "m" а "f"... в смысле функция?
И тут у меня появился вопрос:
Почему length без скобок считается методом со стороны компилятора если оно не имеет скобок?
Обращясь к переменным (полям) скобки не ставятся, они необходимы только при вызове функций (методов), куда должны передаваться параметры (или не должны, в зависимости от самой функции).
В объектно-ориентированных языках можно различать подобные вещи ещё по именам. Как правило, если вам требуется какое-либо свойство объекта (в данном случае, длина массива), и если это свойство объявлено у него как private
, то разработчики составляют ему соответствующие методы доступа геттеры и сеттеры. Для длины это было бы getLength()
. Но так как в классе объекта массива поле length
объявлено как public
обращение к нему не нуждается в геттерах и сеттерах.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах
Стоит задача парсить нескдесятков сайтов, большая часть селекторов которых идентична