powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Монады
25 сообщений из 136, страница 3 из 6
Монады
    #38714455
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttядрёное смешивание языков ) понимаю ещё 1С там всё по-русски (ну почти).
Опять ты, Хвост, лезешь туда, в чем не разбираешься... Бить тебя надо по рукам :)
http://smev.gosuslugi.ru/portal/api/files/registryfile/2699/Руководство пользователя электронного сервиса СМЭВ.doc] http://smev.gosuslugi.ru/portal/api/files/registryfile/2699/Руководство пользователя электронного сервиса СМЭВ.doc
...
Рейтинг: 0 / 0
Монады
    #38714483
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУhVosttядрёное смешивание языков ) понимаю ещё 1С там всё по-русски (ну почти).
Опять ты, Хвост, лезешь туда, в чем не разбираешься... Бить тебя надо по рукам :)
http://smev.gosuslugi.ru/portal/api/files/registryfile/2699/Руководство пользователя электронного сервиса СМЭВ.doc] http://smev.gosuslugi.ru/portal/api/files/registryfile/2699/Руководство пользователя электронного сервиса СМЭВ.doc

апять ты со своей кодагенирацией?
ну ладна-ладна... убедил чертяка красноричивый
...
Рейтинг: 0 / 0
Монады
    #38714486
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВЭто импорт из единого государственного реестра индивидуальных предпринимателей. Там xml приходит с тегами с кириллицей и есть схема. Быстрее сгенерировать классы и десериализовать стандартными средствами, чем переименовывать такую фигню, как

да эт понятно. просто меня всегда убивает эти русские ДатаНачДейств
а ещё наименование полей в системах с ограничением на 8 симоволов, типа COD_ANAL
...
Рейтинг: 0 / 0
Монады
    #38714498
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловныучитывая, что в реальности эти лесенки бывают намного длинее и нетривиальнее

пофик, решается доп свойством с понятным именем, типа

Код: c#
1.
2.
3.
4.
if (model.HasExtraRefName)
{
    len = customer.ExtraRef.Name.Length;
}
...
Рейтинг: 0 / 0
Монады
    #38714611
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17-77Сон Веры Павловныучитывая, что в реальности эти лесенки бывают намного длинее и нетривиальнее

пофик, решается доп свойством с понятным именем, типа

Код: c#
1.
2.
3.
4.
if (model.HasExtraRefName)
{
    len = customer.ExtraRef.Name.Length;
}


Понижается абстракция и количество повторно используемого кода. Пусть больше пашет компилятор и не аммортизируется клава!
...
Рейтинг: 0 / 0
Монады
    #38719421
FatherSql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
?. вещь, не ввели еще? вроде не компилится сразу 13 ошибок выдало
...
Рейтинг: 0 / 0
Монады
    #38719426
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FatherSql?. вещь, не ввели еще? вроде не компилится сразу 13 ошибок выдало

Нэт.
...
Рейтинг: 0 / 0
Монады
    #38719430
FatherSql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныРазумеется. Пока еще для Roslyn допилят свой null propagating , и когда еще это доберется до наших реалий. Для меня лично предпочтительнее написать:
Код: c#
1.
2.
3.
4.
var len = GetCustomer()
  .With(c => c.ExtraRef)
  .With(e => e.Name)
  .With(s => new int?(s.Length));


чем писать лесенку вида
Код: c#
1.
2.
3.
int? len;
if (customer != null && customer.ExtraRef != null && customer.ExtraRef.Name != null)
  len = customer.ExtraRef.Name.Length;


учитывая, что в реальности эти лесенки бывают намного длинее и нетривиальнее.
Хотя, конечно, обещаемое в Roslyn смотрится изящнее:
Код: c#
1.
int? len = GetCustomer()?.extraRef?.name?.Length;


вис это для рослина?
...
Рейтинг: 0 / 0
Монады
    #38719434
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FatherSqlСон Веры ПавловныРазумеется. Пока еще для Roslyn допилят свой null propagating , и когда еще это доберется до наших реалий. Для меня лично предпочтительнее написать:
Код: c#
1.
2.
3.
4.
var len = GetCustomer()
  .With(c => c.ExtraRef)
  .With(e => e.Name)
  .With(s => new int?(s.Length));


чем писать лесенку вида
Код: c#
1.
2.
3.
int? len;
if (customer != null && customer.ExtraRef != null && customer.ExtraRef.Name != null)
  len = customer.ExtraRef.Name.Length;


учитывая, что в реальности эти лесенки бывают намного длинее и нетривиальнее.
Хотя, конечно, обещаемое в Roslyn смотрится изящнее:
Код: c#
1.
int? len = GetCustomer()?.extraRef?.name?.Length;


вис это для рослина?Нет, это просто extension method.
...
Рейтинг: 0 / 0
Монады
    #38719448
FatherSql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAFatherSqlпропущено...

вис это для рослина?Нет, это просто extension method.
свой чтоли
...
Рейтинг: 0 / 0
Монады
    #38719481
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FatherSqlskyANAпропущено...
Нет, это просто extension method.
свой чтолиДа.
...
Рейтинг: 0 / 0
Монады
    #38719699
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныРазумеется. Пока еще для Roslyn допилят свой null propagating , и когда еще это доберется до наших реалий. Для меня лично предпочтительнее написать:
Код: c#
1.
2.
3.
4.
var len = GetCustomer()
  .With(c => c.ExtraRef)
  .With(e => e.Name)
  .With(s => new int?(s.Length));


чем писать лесенку вида
Код: c#
1.
2.
3.
int? len;
if (customer != null && customer.ExtraRef != null && customer.ExtraRef.Name != null)
  len = customer.ExtraRef.Name.Length;


учитывая, что в реальности эти лесенки бывают намного длинее и нетривиальнее.
Хотя, конечно, обещаемое в Roslyn смотрится изящнее:
Код: c#
1.
int? len = GetCustomer()?.extraRef?.name?.Length;



Я так делаю

Код: c#
1.
2.
3.
4.
if (
    customer != null 
    && customer.ExtraRef != null 
    && customer.ExtraRef.Name != null)


И короче, и не менее понятно. И вообще, когда много параметров у метода или условий проверки во всяких ифах - в столбик пишу.

А монады - это же каждый раз метод вызывать. Напрасная растрата ресурсов.
...
Рейтинг: 0 / 0
Монады
    #38719707
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныАлексей КПофиг. Решается форматированием.
Нет, не пофиг. Выше приведен был самый простейший случай, и только одна монада - в реальности их может быть намного больше. Некогда на GotDotNet в блогах была статья про монадический синтатксис. сейчас из-за реорганизации это всё дело куда-то подевалось - там рассматривался такой пример:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
string postCode;
if (person != null)
{
  if (HasMedicalRecord(person) && person.Address != null)
  {
    CheckAddress(person.Address);
    if (person.Address.PostCode != null)
      postCode = person.Address.PostCode.ToString();
    else
      postCode = "UNKNOWN";
  }
}


и вариант решения с монадами:
Код: c#
1.
2.
3.
4.
5.
6.
string postCode = this.With(x => person)
    .If(x => HasMedicalRecord(x))]
    .With(x => x.Address)
    .Do(x => CheckAddress(x))
    .With(x => x.PostCode)
    .Return(x => x.ToString(), "UNKNOWN");


- и это опять же достаточно искусственный пример, в реальности бывает всё намного хуже. Я считаю, что это прекрасная замена бесконечным стопками if'ов (тот самый вышеупомянутый граф объектов), от которых начинает в глязах рябить.
Что-то у вас ветвлений мало. А как монады работают с кучей ветвлений?

Или даже такая ситуация. Мне сейчас надо сделать большооооой метод расчёта, который будет вызываться итерационно много раз. И в зависимости от условий на каждой итерации (условия тоже рассчитываются-изменяются на каждой итерации) должна выполняться та или другая ветка кода. Я пока сделал кучей if-else. Думаю, на свичи переделать - т. к. может потребоваться дать каждой ветке расчёта осмысленное имя, а я дла этого думаю использовать enum, и в свичи эти enum применять.
...
Рейтинг: 0 / 0
Монады
    #38719711
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42Что-то у вас ветвлений мало.
В смысле, что дерево какое-то "коридорное" - мало развилок.
...
Рейтинг: 0 / 0
Монады
    #38719725
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42Или даже такая ситуация. Мне сейчас надо сделать большооооой метод расчёта, который будет вызываться итерационно много раз. И в зависимости от условий на каждой итерации (условия тоже рассчитываются-изменяются на каждой итерации) должна выполняться та или другая ветка кода. Я пока сделал кучей if-else. Думаю, на свичи переделать - т. к. может потребоваться дать каждой ветке расчёта осмысленное имя, а я дла этого думаю использовать enum, и в свичи эти enum применять.
Врагу не пожелаешь потом такой код сопровождать.
...
Рейтинг: 0 / 0
Монады
    #38719772
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВНемоКэп42Или даже такая ситуация. Мне сейчас надо сделать большооооой метод расчёта, который будет вызываться итерационно много раз. И в зависимости от условий на каждой итерации (условия тоже рассчитываются-изменяются на каждой итерации) должна выполняться та или другая ветка кода. Я пока сделал кучей if-else. Думаю, на свичи переделать - т. к. может потребоваться дать каждой ветке расчёта осмысленное имя, а я дла этого думаю использовать enum, и в свичи эти enum применять.
Врагу не пожелаешь потом такой код сопровождать.
А как лучше?
...
Рейтинг: 0 / 0
Монады
    #38719786
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42ЕвгенийВпропущено...

Врагу не пожелаешь потом такой код сопровождать.
А как лучше?Шаблон Strategy (позволяет отказаться от использования переключателей и/или условных операторов).
...
Рейтинг: 0 / 0
Монады
    #38725469
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВПонижается абстракция и количество повторно используемого кода. Пусть больше пашет компилятор и не аммортизируется клава!
зато повышается читабельность кода
...
Рейтинг: 0 / 0
Монады
    #38729705
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такие монады нафиг не нужны в общем случае. И это легко показать:

Д-тим, у нас есть код вида:
Код: c#
1.
2.
3.
4.
5.
int? len;
if (customer != null && customer.ExtraRef != null && customer.ExtraRef.Name != null)
{
  len = customer.ExtraRef.Name.Length;
}


Мы его можем свернуть в более читаемый/менее ошибкоподверженный:
Код: c#
1.
2.
3.
4.
var len = GetCustomer()
  .With(c => c.ExtraRef)
  .With(e => e.Name)
  .With(s => new int?(s.Length));


Да, код стал (относительно)лучше первоначального.

Вопрос:
Почему мы просто не написали и let it crash?
Код: c#
1.
len = customer.ExtraRef.Name.Length;



Резюме: В общем случае такие монады не нужны и let it crash.
...
Рейтинг: 0 / 0
Монады
    #38729712
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmaticТакие монады нафиг не нужны в общем случае. И это легко показать:

Д-тим, у нас есть код вида:
Код: c#
1.
2.
3.
4.
5.
int? len;
if (customer != null && customer.ExtraRef != null && customer.ExtraRef.Name != null)
{
  len = customer.ExtraRef.Name.Length;
}


Мы его можем свернуть в более читаемый/менее ошибкоподверженный:
Код: c#
1.
2.
3.
4.
var len = GetCustomer()
  .With(c => c.ExtraRef)
  .With(e => e.Name)
  .With(s => new int?(s.Length));


Да, код стал (относительно)лучше первоначального.

Вопрос:
Почему мы просто не написали и let it crash?Глупый вопрос.

Всё зависит от того считается ли отсутствие объекта нормальной или исключительной ситуацией.
И в любом случае "let it crash" - это плохо.
...
Рейтинг: 0 / 0
Монады
    #38729713
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

> И в любом случае "let it crash" - это плохо.
Почему?

Этот код под try/catch, очевидно.
...
Рейтинг: 0 / 0
Монады
    #38729715
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmaticТакие монады нафиг не нужны в общем случае.
В общем случае весь дотнет нафиг не нужен. Вместе с компьютерами. Нюансы заключаются в частностях.
...
Рейтинг: 0 / 0
Монады
    #38729718
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

Как умно, давай тебе поапплодируем.
...
Рейтинг: 0 / 0
Монады
    #38729735
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmaticКак умно, давай тебе поапплодируем.
Не стоит. Это не более умно, чем распространять использование частного инструмента на общую практику. И уж подавно не более умно предложения let it crash:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
try
{
  len = customer.ExtraRef.Name.Length;
}
catch(NullPointerException)
{
  len = 0;
}


теперь берем ситуацию, когда ExtraRef - свойство с нетривиальной логикой в аксессоре. И эта логика тоже может выбросить NPE. И в случае с монадами, и в случае с if'ами этот возникший NPE будет проброшен вверх по стеку вызова, а в случае с let it crash NPE будет благополучно съеден, и как будто всё в порядке. Тот, кто будет отлаживать такой код, придет, и оборвет автору руки.
...
Рейтинг: 0 / 0
Монады
    #38729754
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmaticskyANA,

> И в любом случае "let it crash" - это плохо.
Почему?Очень плохо для кармы.

enigmaticЭтот код под try/catch, очевидно.С этого момента по подробнее: что конкретно Вы завернули в try/catch и почему думаете, что это является неким очевидным решением?
...
Рейтинг: 0 / 0
25 сообщений из 136, страница 3 из 6
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Монады
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]