Re[2]: Багофича C# - object initializer
От: Baiker  
Дата: 23.07.24 13:12
Оценка:
Здравствуйте, Sinclair, Вы писали:

B>>var b = new B { P2 = P1 + P };// ошибка прокладки между стулом и монитором!

B>>...и..... ннна тебе поддых канпелятором!! В object initializer ни мембера P, ни P1 канпелятор НЕ ВИДИТ!

S>Всё верно. Initializer исполняется в том же скоупе, где и new statement.


Это "объяснение" никак не объясняет, почему тогда виден P2!
Кроме того, OI — это вам не "скобочки для if" — это специфическая часть, которая работает (у MS) только после new.

Итак, ваше очко переходит зрителям, а вопрос так и остаётся неотвеченным. Перефразирую:

А накой ляд тогда делать вообще OI, если он такой кривой???
Вопрос-уточнение: мне не интересно, что думал Хлипперт и как конкретно он реализовал эту багофичу. С инженерной точки зрения что мешает видеть P1 и P?


B>>Я-то (наивный) думал, что {} — это просто сокращение для b.P2 = b.P1 + b.P ! Похоже, мелкомягкие что-то там намудрили под капотом.

S>Да, совершенно верно — баг в вашей логике. {} — это просто сокращение для b.P2 = P1 + P . Откуда вы там взяли справа префиксы b. — никакой логике не поддаётся.

Чушь полная. См. вопрос-уточнение выше.


B>>PS

B>>А я ведь ещё на заре этой дебильной фичи предлагал: не надо этой узколобой привязки инициализатора к конструктору!!
B>>Здесь j во-первых может инициализироваться в ЛЮБОМ месте кода, а во-вторых, чётко видно кто и откуда берётся: ".p1" — это внутренний мембер (потому что с точки),
B>> "p2" — мембер из объемлющего контекста. Просто и универсально как лом. Что помешало неумытым "синьорам" с индийских пальм сделать это по-человечески?

S>Наверное, то, что предлагаемый вами подход создаёт больше проблем, чем решает. В частности, не очень понятно, как быть с вложенными инициализаторами.


Наверное, может надо ПОДУМАТЬ и реализовать? Я сейчас не могу спонталыку просто взять и углубиться в тему компиляторостроения, но если вы приведёте пример такого вот "не очень понятно", то можно поговорить хотя бы о часностях.
Опережающий ответ:
1. Никто не сказал, что можно будет делать вложенные иниты. В конце концов, 99.999999% кода — это как раз простые донельзя конструкции одного уровня.
2. Если они будут вложенные и как-то конфликтовать, ВСЕГДА можно посидеть и придумать какое-то интересное решение.

Главное — БАЗОВАЯ ЛОГИКА должна быть инженерная, а не "у нас тут индусокод и вот так исторически сложилось".

В конце концов, для чего вообще придумывать фичи, кроме как для УДОБСТВА ПРОГРАММИСТА? И на поверку оказалось, что OI-сахарок — чёрте что и полностью обламывает прямую логику разработчика.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.