Re[3]: Кому нужны такие фичи?
От: vsb Казахстан  
Дата: 04.05.22 07:48
Оценка:
Здравствуйте, vaa, Вы писали:

vsb>>Ну как минимум лучше тем, что не нарушается принцип DRY. Грубо говоря — ты не сможешь опечататься в коде вида

vaa>Ну, если именовать так, то не мудрено.

Всякое бывает.

vsb>>
vsb>>var person3 = new Person();
vsb>>person3.Name = "Alice";
vsb>>person2.Age = 12;
vsb>>

vaa>С другой стороны, инициализатор невозможно отлаживать.

Почему невозможно?
Re[4]: Кому нужны такие фичи?
От: vaa  
Дата: 04.05.22 08:28
Оценка: 2 (1)
Здравствуйте, vsb, Вы писали:

vsb>>>[/cs]

vaa>>С другой стороны, инициализатор невозможно отлаживать.

vsb>Почему невозможно?

 var x = new O{
    A = 1,
    B =2 <= как сюда поставить бряку?
};
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[3]: Кому нужны такие фичи?
От: Sinclair Россия https://github.com/evilguest/
Дата: 04.05.22 12:35
Оценка: +1
Здравствуйте, vaa, Вы писали:
vaa>так все еще работает:
vaa>
vaa>var q = from x in persons
vaa>        where x.Age == 12
vaa>        select new Person(x.Name, x.Age);
vaa>

Вы предлагаете все 42 атрибута сложного объекта запихивать ему в конструктор?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Кому нужны такие фичи?
От: Sharov Россия  
Дата: 04.05.22 12:42
Оценка:
Здравствуйте, elmal, Вы писали:

vaa>>Может пора провести ревизию и выкинуть ненужное из шарпов?

E>В первом случае ты гарантированно не забудешь поставить нужный параметр при создании объекта, ты должен не забыть все элементы конструктора

Это не конструктор.
Кодом людям нужно помогать!
Re[5]: Кому нужны такие фичи?
От: fmiracle  
Дата: 04.05.22 12:45
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>>>С другой стороны, инициализатор невозможно отлаживать.


vsb>>Почему невозможно?

vaa>
vaa> var x = new O{
vaa>    A = 1,
vaa>    B =2 <= как сюда поставить бряку?
vaa>};
vaa>


Вот как раз в этом случае проблемы нет — поставишь на всю "строку" из 4х строк и отладчик войдет в свойство B без проблем.

Неудобство тут только в том, что сперва он войдет в свойство A. Но это не "невозможность" отдалки а "некоторое неудобство иногда".
Re[2]: Кому нужны такие фичи?
От: Sharov Россия  
Дата: 04.05.22 12:51
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, vaa, Вы писали:


vaa>>На днях осознал, что инициализация при создании объекта

vaa>>
vaa>>var person = new Person
vaa>>{
vaa>>    Name = "Alice",
vaa>>    Age = 12
vaa>>};
vaa>>

vaa>>ничем не лучше старого способа:
vaa>>
vaa>>var person = new Person();
vaa>>    person.Name = "Alice";
vaa>>    person.Age = 12;
vaa>>

vaa>>код даже короче.

НС>Первый вариант это statement, второй — expression, со всеми вытекающими типа возможности использования в expression tree или для инициализации анонимных типов.


А в чем разница? Я думал, что компилятор первый код развернет во второй, т.е будет создана теневая переменная (temp), которая потом присвоится
person. Т.е.

var person = new Person
{
Name = "Alice",
Age = 12
};


развернется компилятором в

var temp = new Person();
temp.Name = "Alice";
temp.Age = 12;
person = temp;
Кодом людям нужно помогать!
Re[4]: Кому нужны такие фичи?
От: vaa  
Дата: 04.05.22 13:41
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, vaa, Вы писали:

vaa>>так все еще работает:
vaa>>
vaa>>var q = from x in persons
vaa>>        where x.Age == 12
vaa>>        select new Person(x.Name, x.Age);
vaa>>

S>Вы предлагаете все 42 атрибута сложного объекта запихивать ему в конструктор?
если это разумно
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[3]: Кому нужны такие фичи?
От: Ночной Смотрящий Россия  
Дата: 04.05.22 13:47
Оценка:
Здравствуйте, Sharov, Вы писали:

S>А в чем разница?

S>Я думал, что компилятор первый код развернет во второй

А если так?
db.Persons.Select(p => new Person { Name = "Alice", Age = 12 });
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[5]: Кому нужны такие фичи?
От: Ночной Смотрящий Россия  
Дата: 04.05.22 13:48
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>если это разумно


А если нет?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[3]: Кому нужны такие фичи?
От: yenik  
Дата: 04.05.22 13:49
Оценка:
vaa>С другой стороны, инициализатор невозможно отлаживать.

Этак можно сказать, что и вызов метода невозможно отлаживать.

vaa>Т.е. в данном случае дублирование неизбежное зло.


Удобством отладки можно пренебречь.
Re[6]: Кому нужны такие фичи?
От: vaa  
Дата: 04.05.22 13:52
Оценка:
Здравствуйте, fmiracle, Вы писали:

F>Здравствуйте, vaa, Вы писали:


vaa>>>>С другой стороны, инициализатор невозможно отлаживать.


vsb>>>Почему невозможно?

vaa>>
vaa>> var x = new O{
vaa>>    A = 1,
vaa>>    B =2 <= как сюда поставить бряку?
vaa>>};
vaa>>


F>Вот как раз в этом случае проблемы нет — поставишь на всю "строку" из 4х строк и отладчик войдет в свойство B без проблем.


F>Неудобство тут только в том, что сперва он войдет в свойство A. Но это не "невозможность" отдалки а "некоторое неудобство иногда".


Ни разу не получается отладка. Еще раз проверил в vs code + net core 6. проскакивает инициализацию на ура. никуда при этом не заходит.
Person p = new Person
{
    Name = "Alice",
    Age = 12
};

Console.WriteLine("Hello, World!");

public class Person
{
    public string Name { get; set; }
    public uint Age { get; set; }
}
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[7]: Кому нужны такие фичи?
От: fmiracle  
Дата: 04.05.22 13:57
Оценка:
Здравствуйте, vaa, Вы писали:


vaa>Ни разу не получается отладка. Еще раз проверил в vs code + net core 6. п


С .net работаю с visual studio, извини

vaa>роскакивает инициализацию на ура. никуда при этом не заходит.

vaa>
vaa>Person p = new Person
vaa>{
vaa>    Name = "Alice",
vaa>    Age = 12
vaa>};

vaa>Console.WriteLine("Hello, World!");

vaa>public class Person
vaa>{
vaa>    public string Name { get; set; }
vaa>    public uint Age { get; set; }
vaa>}
vaa>


А, собственно, во что ты тут хочешь войти?
Re[4]: Кому нужны такие фичи?
От: Sharov Россия  
Дата: 04.05.22 14:04
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, Sharov, Вы писали:


S>>А в чем разница?

S>>Я думал, что компилятор первый код развернет во второй

НС>А если так?

НС>
НС>db.Persons.Select(p => new Person { Name = "Alice", Age = 12 });
НС>


db.Persons.Select(p => {
var temp = new Person();
temp.Name = "Alice";
temp.Age = 12; 
return temp;
});
Кодом людям нужно помогать!
Re[8]: Кому нужны такие фичи?
От: vaa  
Дата: 04.05.22 14:09
Оценка:
Здравствуйте, fmiracle, Вы писали:

F>Здравствуйте, vaa, Вы писали:



vaa>>Ни разу не получается отладка. Еще раз проверил в vs code + net core 6. п


F>С .net работаю с visual studio, извини


vaa>>роскакивает инициализацию на ура. никуда при этом не заходит.

vaa>>
vaa>>Person p = new Person
vaa>>{
vaa>>    Name = "Alice",
vaa>>    Age = 12
vaa>>};

vaa>>Console.WriteLine("Hello, World!");

vaa>>public class Person
vaa>>{
vaa>>    public string Name { get; set; }
vaa>>    public uint Age { get; set; }
vaa>>}
vaa>>


F>А, собственно, во что ты тут хочешь войти?


Вот как раз в этом случае проблемы нет — поставишь на всю "строку" из 4х строк и отладчик войдет в свойство B без проблем.

☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[6]: Кому нужны такие фичи?
От: vaa  
Дата: 04.05.22 14:12
Оценка: :)
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, vaa, Вы писали:


vaa>>если это разумно


НС>А если нет?


По ситуации.
Начнем с того, а точно нужен класс с 40 полями?
Ну и сразу же становится ясна культура сишарп разработчика.
вместо того чтобы написать корректный конструктор,
просто запихаем все данные в класс и будем на каждом этапе
валидировать и передавать дальше новую ДТО.
С другой стороны, да хоть сто, а завтра еще в одном месте нужно будет инициализировать этот класс.
и что? копипаста?
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[9]: Кому нужны такие фичи?
От: fmiracle  
Дата: 04.05.22 14:14
Оценка: +2
Здравствуйте, vaa, Вы писали:

F>>А, собственно, во что ты тут хочешь войти?

vaa>

vaa>Вот как раз в этом случае проблемы нет — поставишь на всю "строку" из 4х строк и отладчик войдет в свойство B без проблем.


Но у тебя в примере автоматические свойства — что ты в них собрался отлаживать?
Re[5]: Кому нужны такие фичи?
От: Sinclair Россия https://github.com/evilguest/
Дата: 04.05.22 15:41
Оценка:
Здравствуйте, vaa, Вы писали:
vaa>если это разумно
Обычно — нет. Синтаксис object initializer позволяет без этого обойтись.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[7]: Кому нужны такие фичи?
От: Sinclair Россия https://github.com/evilguest/
Дата: 04.05.22 16:36
Оценка: +1
Здравствуйте, vaa, Вы писали:
vaa>Начнем с того, а точно нужен класс с 40 полями?
А что вы предложите в качестве model для формы с 40 полями?
vaa>Ну и сразу же становится ясна культура сишарп разработчика.
?
vaa>вместо того чтобы написать корректный конструктор,
Непонятна ложная дилемма. Конструктор Person() вполне себе корректен — порождает новый экземпляр Person со всеми атрибутами, установленными в default.
С чего вы взяли, что корректного конструктора нет?
vaa>просто запихаем все данные в класс и будем на каждом этапе
vaa>валидировать и передавать дальше новую ДТО.
Не очень понятно, о какой валидации идёт речь, и что там за "каждый этап".
vaa>С другой стороны, да хоть сто, а завтра еще в одном месте нужно будет инициализировать этот класс.
Ну да, нужно будет в ещё одном.
vaa>и что? копипаста?
А какие варианты? Вы думаете, что вызов конструктора с позиционными аргументами будет чем-то лучше, чем object initializer?
Если вы собрались вызывать конструктор с именованными аргументами, то там "копипасты" будет ровно столько же, как и в object initializer.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[7]: Кому нужны такие фичи?
От: fmiracle  
Дата: 04.05.22 18:00
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>Начнем с того, а точно нужен класс с 40 полями?

vaa>Ну и сразу же становится ясна культура сишарп разработчика.
vaa>вместо того чтобы написать корректный конструктор,
vaa>просто запихаем все данные в класс и будем на каждом этапе
vaa>валидировать и передавать дальше новую ДТО.
vaa>С другой стороны, да хоть сто, а завтра еще в одном месте нужно будет инициализировать этот класс.
vaa>и что? копипаста?

Ты как бы не путай класс с логикой и сложным внутренним состоянием, которое надо правильно конструировать и куда не надо влезать со стороны, и простой ДТО-объект, нужный для передачи данных.
Подветка началась с linq. Вот у нас есть linq-запрос, который выбирает данные для отчета. Каждый dto там представляет строку таблицы отчета, в ней 50 столбцов. Строку надо заполнить при выборке и прочитать при записи в файл/экран. И все. Вот нафига там конструктор?
Re[5]: Кому нужны такие фичи?
От: Ночной Смотрящий Россия  
Дата: 04.05.22 19:01
Оценка:
Здравствуйте, Sharov, Вы писали:

S>
S>db.Persons.Select(p => {
S>var temp = new Person();
S>temp.Name = "Alice";
S>temp.Age = 12; 
S>return temp;
S>});
S>


Скомпилировать пробовал?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.