Какие виды дублирования кода еще осталось устранить?
От: Shmj Ниоткуда  
Дата: 14.03.16 00:32
Оценка:
К примеру, когда делаешь override GetHashCode, часто используешь стандартное предложение от Resharper. Нужно только выбрать параметры, значение которых учитывать.

Если же в проекте потребовалось у многих классов сделать override Equals и GetHashCode, то заметно дублирование. Т.е. лишний код, который бы можно было обозначить лишь аттрибутами, к примеру.

Из очевидных решений -- PostSharp. Но им вроде не получится без рефлексии, что значительно замедляет.

Макросы как в Nemerle ведь в этом случае тоже бессильны?

Получается такой вид дублирования кода програмистская наука пока не в силах преодолеть?
Отредактировано 14.03.2016 0:35 Shmj . Предыдущая версия . Еще …
Отредактировано 14.03.2016 0:33 Shmj . Предыдущая версия .
Отредактировано 14.03.2016 0:32 Shmj . Предыдущая версия .
Re: Какие виды дублирования кода еще осталось устранить?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 14.03.16 03:31
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Получается такой вид дублирования кода програмистская наука пока не в силах преодолеть?


Вполне в силах. Например, см. Data classes in Kotlin.
В C# аналогичное реализовано для анонимных классов и (в какой-то форме) для структур. Иное дело, что иногда
только программист знает, какие поля надо включить в вычисление hash-кода, и поэтому требуется ручное вмешательство.
Re: Какие виды дублирования кода еще осталось устранить?
От: hi_octane Беларусь  
Дата: 14.03.16 07:46
Оценка: +1
S>Если же в проекте потребовалось у многих классов сделать override Equals и GetHashCode, то заметно дублирование. Т.е. лишний код, который бы можно было обозначить лишь аттрибутами, к примеру.

S>Макросы как в Nemerle ведь в этом случае тоже бессильны?


Чтоб такое залепить надо вообще ни одной доки по макросам не прочитать.

Реализацию можно подсмотреть в сорцах StructuralEquality. Там равенство, IEquatable, и GetHashCode.
Nemerle — power of metaprogramming, functional, object-oriented and imperative features in a statically-typed .NET language
Re: Какие виды дублирования кода еще осталось устранить?
От: Vladek Россия Github
Дата: 14.03.16 15:04
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Если же в проекте потребовалось у многих классов сделать override Equals и GetHashCode, то заметно дублирование. Т.е. лишний код, который бы можно было обозначить лишь аттрибутами, к примеру.

Отдельный класс, который выполняет эти операции для других классов. Даже интерфейс есть.

S>Из очевидных решений -- PostSharp. Но им вроде не получится без рефлексии, что значительно замедляет.

Чем же оно очевидно? Обязательно нужно универсальное решение, решающее задачу самым элегантным способом раз и навсегда? У тебя есть ограниченное число классов, для которых эти операции нужны — напиши решение только для них и, скорее всего, забудь о проблеме навсегда.

S>Получается такой вид дублирования кода програмистская наука пока не в силах преодолеть?

В силах. Просто не нужно сразу искать универсального решения, оно вряд ли понадобится.
http://files.rsdn.org/43395/hr-kyle-theisen-04.png
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.