Re[5]: Records - так где их применять-то?
От: Somescout  
Дата: 10.11.21 12:11
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

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


S>>Не записи, просто способ объявления полей класса в конструкторе, чтобы вместо:


НС>Рекорды предназначены для сценария DTO. Делать DTO с DI зависимостями — очень нестандартная идея.


Я так понимаю читать комментарии тут так и не научились.
ARI ARI ARI... Arrivederci!
Отредактировано 10.11.2021 12:12 Somescout . Предыдущая версия .
Re[6]: Records - так где их применять-то?
От: Ночной Смотрящий Россия  
Дата: 10.11.21 12:28
Оценка:
Здравствуйте, Somescout, Вы писали:

НС>>Рекорды предназначены для сценария DTO. Делать DTO с DI зависимостями — очень нестандартная идея.

S>Я так понимаю читать комментарии тут так и не научились.

Когда по делу сказать нечего — непременно надо нахамить?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[7]: Records - так где их применять-то?
От: Somescout  
Дата: 10.11.21 13:59
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

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


НС>>>Рекорды предназначены для сценария DTO. Делать DTO с DI зависимостями — очень нестандартная идея.

S>>Я так понимаю читать комментарии тут так и не научились.

НС>Когда по делу сказать нечего — непременно надо нахамить?

Что вы хотите услышать по делу? Мне повторить что вместо записей хотелось бы увидеть синтаксический сахар для DI? Я просто реально не понимаю: вы сами цитируете предложение где я пишу "Не записи, просто способ объявления полей класса в конструкторе" и тут же "Рекорды предназначены для сценария DTO. Делать DTO с DI зависимостями — очень нестандартная идея." — я от такого сочетания впал в состояние удивления.
ARI ARI ARI... Arrivederci!
Отредактировано 10.11.2021 14:07 Somescout . Предыдущая версия . Еще …
Отредактировано 10.11.2021 14:00 Somescout . Предыдущая версия .
Re[4]: Records - так где их применять-то?
От: Sinclair Россия https://github.com/evilguest/
Дата: 10.11.21 13:59
Оценка:
Здравствуйте, Somescout, Вы писали:

S>Который абсолютно шаблонен, написать просто:

S>
S>class Test {
S>  public Test(
S>    private readonly DBContext dbContext,
S>    private readonly ADContext adContext
S>  ) { }
S>}
S>


S>Мелкая экономия в принципе, но устраняет постоянно повторяющийся код.

Если я правильно понимаю, то так — нельзя.
Можно — вот так:
public class Test(DBContext DbContext, ADContext AdContext)
{
   ...
}

Тогда конструктор с этими параметрами сгенерируется автоматически вместе с одноимёнными init-only свойствами. Но они будут публичными, а не приватными.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[5]: Records - так где их применять-то?
От: Somescout  
Дата: 10.11.21 14:03
Оценка:
Здравствуйте, Sinclair, Вы писали:

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


S>>Который абсолютно шаблонен, написать просто:

S>>
S>>class Test {
S>>  public Test(
S>>    private readonly DBContext dbContext,
S>>    private readonly ADContext adContext
S>>  ) { }
S>>}
S>>


S>>Мелкая экономия в принципе, но устраняет постоянно повторяющийся код.

S>Если я правильно понимаю, то так — нельзя.
S>Можно — вот так:
S>
S>public class Test(DBContext DbContext, ADContext AdContext)
S>{
S>   ...
S>}
S>

S>Тогда конструктор с этими параметрами сгенерируется автоматически вместе с одноимёнными init-only свойствами. Но они будут публичными, а не приватными.

Я бы хотел примерно такой реализации: https://www.typescriptlang.org/docs/handbook/classes.html#parameter-properties — т.е. возможности буквально объявить поле в первичном конструкторе вместе с модификаторами доступа. И да, именно в обычном классе, не записи.
ARI ARI ARI... Arrivederci!
Отредактировано 10.11.2021 14:06 Somescout . Предыдущая версия .
Re[8]: Records - так где их применять-то?
От: Ночной Смотрящий Россия  
Дата: 10.11.21 17:17
Оценка:
Здравствуйте, Somescout, Вы писали:

S>Что вы хотите услышать по делу? Мне повторить что вместо записей хотелось бы увидеть синтаксический сахар для DI?


Почему "вместо"?

S> Я просто реально не понимаю


Все ты понимаешь. Просто тут в форуме последние годы прям какая то эпидемия неспособности воспринимать другие точки зрения. Чуть что не так — в ответ прям фонтаны грубостей и хамства.

S>: вы сами цитируете предложение где я пишу "Не записи, просто способ объявления полей класса в конструкторе" и тут же "Рекорды предназначены для сценария DTO.


Молодец. Должно было намекнуть вроде бы, что все я прочел. Но нет.
Попробуй прочесть название темы.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[9]: Records - так где их применять-то?
От: Somescout  
Дата: 10.11.21 18:26
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

S>>Что вы хотите услышать по делу? Мне повторить что вместо записей хотелось бы увидеть синтаксический сахар для DI?

НС>Почему "вместо"?
Facepalm... Попробуйте прочесть ветку комментариев сначала.

НС>Все ты понимаешь. Просто тут в форуме последние годы прям какая то эпидемия неспособности воспринимать другие точки зрения. Чуть что не так — в ответ прям фонтаны грубостей и хамства.

Ещё раз: вы не прочитав написанное кинулись рассказывать зачем нужны записи. Ваше право, моё право это отметить.

S>>: вы сами цитируете предложение где я пишу "Не записи, просто способ объявления полей класса в конструкторе" и тут же "Рекорды предназначены для сценария DTO.


НС>Молодец.

Хамство вас возмущает, но панибратское отношение для вас норма.

НС>Должно было намекнуть вроде бы, что все я прочел. Но нет.

Но да. Вы не прочли и сейчас изворачиваетесь, пытаясь доказать что всё равно правы.

НС>Попробуй прочесть название темы.

Ветку комментариев попробуйте прочесть сначала.
ARI ARI ARI... Arrivederci!
Отредактировано 10.11.2021 18:35 Somescout . Предыдущая версия .
Re[10]: Records - так где их применять-то?
От: Ночной Смотрящий Россия  
Дата: 10.11.21 20:09
Оценка:
Здравствуйте, Somescout, Вы писали:

S>>>Что вы хотите услышать по делу? Мне повторить что вместо записей хотелось бы увидеть синтаксический сахар для DI?

НС>>Почему "вместо"?
S>Facepalm... Попробуйте прочесть ветку комментариев сначала.

Т.е. ответить на вопрос ты не можешь. ЧТД.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[11]: Records - так где их применять-то?
От: Somescout  
Дата: 10.11.21 20:13
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

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


S>>>>Что вы хотите услышать по делу? Мне повторить что вместо записей хотелось бы увидеть синтаксический сахар для DI?

НС>>>Почему "вместо"?
S>>Facepalm... Попробуйте прочесть ветку комментариев сначала.

НС>Т.е. ответить на вопрос ты не можешь. ЧТД.

Могу: потому что мне не нужны записи, мне нужен именно такой синтаксический сахар, т.к. он весьма удобен, и может применяться в куда большем количестве случаев, чем записи. И если бы вы всё-же читали предыдущие сообщения, то вы бы это и так поняли.
ARI ARI ARI... Arrivederci!
Re[12]: Records - так где их применять-то?
От: Ночной Смотрящий Россия  
Дата: 10.11.21 20:14
Оценка:
Здравствуйте, Somescout, Вы писали:

НС>>Т.е. ответить на вопрос ты не можешь. ЧТД.

S>Могу: потому что мне не нужны записи

Ну зашибись. Т.е. ты решил обсудить какую то другую тему, и при этом у тебя хватает наглости обвинять других что они послушно тему не сменили?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[13]: Records - так где их применять-то?
От: Somescout  
Дата: 10.11.21 20:16
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

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


НС>>>Т.е. ответить на вопрос ты не можешь. ЧТД.

S>>Могу: потому что мне не нужны записи

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

То, что речь идёт не о записях написано в самом начале. Если бы вы... ну да ладно.

НС>и при этом у тебя хватает наглости обвинять других что они послушно тему не сменили?

Я так понимаю это тоже не хамство?
ARI ARI ARI... Arrivederci!
Re[14]: Records - так где их применять-то?
От: Ночной Смотрящий Россия  
Дата: 10.11.21 20:19
Оценка:
Здравствуйте, Somescout, Вы писали:

НС>>и при этом у тебя хватает наглости обвинять других что они послушно тему не сменили?

S>Я так понимаю это тоже не хамство?

О как ты вдруг о хамстве заговорил. А чего с самого начала не вспомнилось то, когда ты хамить начал потому что тебе что то там показалось?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[15]: Records - так где их применять-то?
От: Somescout  
Дата: 10.11.21 20:29
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>О как ты вдруг о хамстве заговорил. А чего с самого начала не вспомнилось то, когда ты хамить начал потому что тебе что то там показалось?

Я так понимаю по теме вам нечего было сказать с самого начала. Удачи.
ARI ARI ARI... Arrivederci!
Re[16]: Records - так где их применять-то?
От: Ночной Смотрящий Россия  
Дата: 11.11.21 06:52
Оценка:
Здравствуйте, Somescout, Вы писали:

НС>>О как ты вдруг о хамстве заговорил. А чего с самого начала не вспомнилось то, когда ты хамить начал потому что тебе что то там показалось?

S>Я так понимаю по теме вам нечего было сказать с самого начала. Удачи.

Точно, продолжай переводить стрелки.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[3]: Records - так где их применять-то?
От: Константин Б. Россия  
Дата: 11.11.21 09:51
Оценка:
Здравствуйте, Yuri Abele, Вы писали:

YA> …необходим default конструктор без параметров — а это не records (если я правильно разобрался).


В records можно добавить свой конструктор без параметров либо просто задать всем полям дефолтные значения.
Re: Records - так где их применять-то?
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.11.21 01:15
Оценка: 12 (1)
Здравствуйте, Yuri Abele, Вы писали:

YA>Поделитесь пожалуйста, кто их практически применяет — где, для чего?


Для функционального программирования. Рекорды — это немного кривенькая, но реализация (в сочетании с наследованием и кортежами) концепции алгебраических типов данных.

using System;

public abstract record Color
{
    public sealed record Rgb(int R, int G, int B) : Color;
    public sealed record Black : Color;
    public sealed record Red : Color;
    public sealed record Yellow : Color;

    public void Print()
    {
        Console.WriteLine(this switch
        {
            Black black                 => "Черный",
            Rgb { R: 0xFF, G: 0, B: 0 } => "Красный",
            Red red                     => "Красный",
            Yellow yellow               => "Желтый",
            Rgb(var r, var g, var b)    => $"RGB({r:X2},{g:X2},{b:X2})",
            _                           => throw new ArgumentOutOfRangeException()
        });
    }
}

internal static class Program
{
    private static void Main()
    {
        new Color.Rgb(0xFF, 0, 0).Print();
        new Color.Rgb(0, 0xFF, 0).Print();
        new Color.Red().Print();
    }
}


Выводит:
Красный
RGB(00,FF,00)
Красный


Что касается использования записей при доступе к базам данных, то тут вопрос в движке. Если использовать linq2db, а не EF, проблем с записями быть не должно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Records - так где их применять-то?
От: vaa  
Дата: 12.11.21 02:19
Оценка:
Здравствуйте, VladD2, Вы писали:
VD>
VD>public abstract record Color
VD>{
VD>    public sealed record Rgb(int R, int G, int B) : Color;
VD>


Наркоманы

: Color это типа public Rgb():base(){} + class Rgb: Color
теперь вижу пример в документации. я сначала подумал, что это уточнение типа из немерл.
Rgb выглядит как поле при первом знакомстве, уже второй раз у меня когнитивный диссонанс. первый раз было когда к инструкции switch добавили выражение switch но с другими правилами.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Отредактировано 12.11.2021 2:30 Разраб . Предыдущая версия .
Re[3]: Records - так где их применять-то?
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.11.21 02:11
Оценка: +2
Здравствуйте, vaa, Вы писали:

vaa>Наркоманы


Ну, не могли же они без криатива? Иначе как объяснить убитые без малого 20 лет на это мудрое решение? В Немерле то все это было из коробки еще в 2003-ем.

vaa>: Color это типа public Rgb():base(){} + class Rgb: Color


Ну, вкладывать типы не обязательно. Это я уж для изоляции имен и для схожести с Немерлом (он именно так код генерит).

А кривость этого всего в том, что тип "не закрыт". В Немерле ты описываешь закрытый набор подтипов и компилятор может проверить полноту при паттерн-матчинге (сказать, что тот или иной вариант пропущен).

vaa>теперь вижу пример в документации. я сначала подумал, что это уточнение типа из немерл.


Не, это обычное шарпное наследование. Просто тела нет и по этому выглядит странно. Можно и так:
    public sealed record Black : Color
    {
    }


На Немерле оно выглядит, конечно, по концептуальнее, так как для АлгТД есть прямая поддержка в виде вариантов:
using System;

public variant Color
{
  | Rgb { R : int; G : int; B : int; }
  | Black
  | Red
  | Yellow

  public Print() : void
  {
     Console.WriteLine(
      match (this)
      {
          | Rgb(0xFF, 0, 0) => "Красный"
          | Black           => "Черный"
          | Red             => "Красный"
          | Yellow          => "Желтый"
          | Rgb(r, g, b)    => $"RGB($r,$g,$b)"
      });
  }
}


module Program
{
  Main() : void
  {
    Color.Rgb(0xFF, 0, 0).Print();
    Color.Rgb(0, 0xFF, 0).Print();
    Color.Red().Print();
  }
}


vaa>Rgb выглядит как поле при первом знакомстве, уже второй раз у меня когнитивный диссонанс. первый раз было когда к инструкции switch добавили выражение switch но с другими правилами.


Ну, это дело привычки. Думаю через пару дней использования диссонанс пройдет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.