Pull to refresh
0
@MacInread⁠-⁠only

User

5
Subscribers
Send message
Можно было написать что-то вроде.

return repository.getBean().getData().getName();

А зачем? Зачем нам getData от несуществующих данных? Зачем getName от несуществующих данных? Как отличить ситуацию, когда «имя» = "" и ситуацию, когда оно не найдено? Получается, что мы заменяем невалидный явно объект NULL на объект невалидный неявно — объект-пустышку, только для того, чтобы вызвать код, который по определению не может с пустышкой работать. Это еще не говоря про то, что где-то this может быть пустым и это сработает и так.
Смотрите (давайте в обратном порядке, так немного очевиднее).

Я иду в удаленную БД: person = getPerson(id)
Она вернула мне ссылку на объект на ее стороне (потому что ничего другого она сделать не может)
В person именно эта ссылка

Не совсем так, но даже в этом случае мы можем создать наш объект на пункте 0 и попросить его скопировать значение (состояние) объекта по ссылке person.
Я думал примерно о:
1. Создаем объект-ответ: textual_response = new TextualResponse;
2. Делаем запрос, передавая ссылку на наш объект: getPerson(id, textual_response)
3. База заполняет ответ на своей стороне: remote_host.textual_response.setvalue(...)
И далее. Технически будет обмен примитивами все равно — БД должна запихнуть строчку в наш textual_response объект, но это может быть что-то типа friend полей/методов, которые доступны только внутри объектов или при помощи 3й сущности-объекта, которая может работать с внутренним представлением и копировать состояние объектов.

… а еще я внезапно понял, что для этой системы невозможно реализовать равенство по значению. Или я что-то путаю?

Тут через 3й объект-супервизор см. выше.

Это длинная и нафиг ненужная цепочка, просто абстракция ради абстракции. Но раз уж мы говорим о том, что это-де технически невозможно, то все же можно придумать такую систему. Просто в качестве разминки ума, на деле кому это надо.
Нет, ссылку на интерфейс объекта-результата на нашей стороне мы отправили сервису. Он воспользовался (посредством ссылки) объектом-результатом, который у нас находится.
Ну очевидно, что раз мы запросили сервис, то и результат получим мы, а не база. А уж в базу кинем мы.
Если вы хотите DMA-alike поведение, то да, придется им друг друга увидеть.
Не-не-не Дэвид Блейн.
new If(new NotEqual(b, new NumericalObjectZero()), new Divide(a, b), b)

Какие еще «0»? Автор же говорит — никаких NULL, используйте Null Object design, а с какой стати 0 тогда должен быть? 0 — это специальный случай — ведь на него делить нельзя. Следовательно, мы не можем использовать null 0, мы должны использовать специальный NumericalObjectZero.
которые перестанут тянуть идею «всё есть объект» куда не надо…

Действительно. ООП — это лишь метод, способ работы с данными. Есть ситуации, где это оправдано, есть, где нет. Где нет внутреннего состояния, где слои абстракции только скрывают суть действия ничем не помогая.
Зачем вам гуглтранслейт, когда вы ищете перевод слова?
http://www.multitran.ru/c/m.exe?CL=1&s=take&l1=1
Нет, ну возможен компромисс. У нас в коде тоже иногда приходится сокращать для повышения читаемости. Обычно эти сокращения расшифровываются в месте объявления в комментарии. Просто когда идентификатор такой длины, что невозможно написать в одну строку что-то вида a.push(b.pop), когда a и b длиной в пол-экрана — это тоже плохо.
Потому что альтернатива —
a.push(
    b.pop)


А это ужас.
Доступность предполагается. Необязательно всех, достаточно двух попарно обменивающихся частей системы, их специфических для данного вида обмена интерфейсов.
Но ссылка да — будет примитивом. С другой стороны, это будет единственный примитив. Не то что бы мне это было интересно, просто к слову пришлось по ходу чтения вашей дискуссии.
Чисто теоритически, в порядке бреда:
ссылку на объект «пользователь», по которой и реестр, и обработчик смогут послать любое сообщение, и получить ответ. Но вот незадача… ответ на сообщение getFullName — это что? Объект? Тогда мы попали в замкнутый круг. Или это значение-строка? Но тогда мы нарушили униформность.

Допустим, DCOM alike принцип. Если мы хотим униформности, то мы у себя генерируем объект вида «ответ» и пересылаем ссылку на него с запросом. Часть, ответственная за пользователя, генерирует полное имя и обращаясь к нашему объекту-ответу, устанавливает его внутреннее содержание.
И все равно, блин, «ссылка» будет примитивом.
Но при этом такая же ситуация у себя в коде людей не бесит :-)

Это некорректный аргумент: код моноширинный и форматирование пробелами не едет при добавлении/удалении отступа.

Если среда разработки не понимает смарт-табуляцию и не может автоматически понять, где вставить табуляцию, а где пробел, то грош ей цена, такой среде.

Смысл, если можно везде использовать пробел, без переключений? И для отступа, и для выравнивания? Вы предлагаете более сложную систему, которая функционально полностью эквивалентна «пробельной» — зачем?
«тут внутри строки я нажимал Tab среда сама поставила пробелы — в чем разница с ситуацией, когда пробелы будут везде?

Все остальные аргументы теряют свою важность перед смыслом

Исходный смысл табуляции — разметка таблиц при печати, он утерян уже очень давно.
Тело метода — раз, два вложенных цила и 1 if — еще 3. Это примитивная маленькая функция.
Что в Java является наиболее нечитаемым? Из академического интереса спрашиваю.
Это вообще «интересный» подход — создавать объекты там, где нужен черный ящик-функция, потому что нет внутреннего состояния.
Чем плох NULL, который является встроенным в язык Null Object design patternом?
которые приходится удалять по одному, ходить по ним курсором, а если копипастишь и зацепил выделением лишний пробел

Да нет, все от IDE зависит. У меня клавиши «влево»-«вправо» по отступам переходят, при том, что они — пробелы. Удаляется все опять же комбинацией клавиш «убрать отступ», встроенной в IDE. При копировании, выделении, сразу целиком отступ копируется.
Прошу прощения у автора за резкость тона, вспылил. Сильно удивило «предложение о рационализации».
Это можно улучшить, вводя вспомогательные структуры и вопрос будет решаться уже не по ассимптотике, а по константам (статья как раз об этом). Хотя и по ассимптотике — если взять тот же массив указателей на блоки, его придется двигать только при создании блока, а поиск будет логарифмический.

Information

Rating
Does not participate
Registered
Activity