Здравствуйте, Codealot, Вы писали:
IT>>Ведь тебе по идее тогда должен раздражать и такой код:
C>Нет, не должен. Там нет такого нагромождения неизвестных.
Ну давай я тебе сразу 5 var'ов напишу один за одним. Будет такое же нагромождение. Ещё раз, не нравится вывод типов — претензии к ФП.
C>Если в коде трудно разобраться без поддержки IDE, то этот код — полное говно. Фичи языка, которые такой код поощряют — тоже полное говно.
Какое наивное заблуждение. Современную производительность программиста обеспечивает не только выразительность языка, но даже в большей степени продвинутость IDE. Времена, когда можно было эффективно навигировать в нотепаде по всем 3-м файлам проекта и запомнить абсолютно все 200 функций и их сигнатуры стандартной библиотеки давно прошли. Лет 40 назад (хотя сигнатуры memcpy и cpymem я так и не запомнил, какая из них какая). Сейчас ни один современный язык не разрабатывается без учёта IDE. Прикинь! Даже C# был переписан через 10 лет его существования с нуля, чтобы облегчить его интеграцию в IDE, т.к. для этой самой интеграции требовалась команда большая, чем команда самого C#. И эта команда всё равно не успевала добавлять новые фичи языка в IDE.
F# вроде не самый плохой язык, но с убогой поддержкой IDE. Результат — на нём пишут только конченные фрики. Я знаю ещё один язык, который не стал популярным и уже приказал долго жить, главным образом благодаря тому, что поддержка IDE оказалась для его команды разработчиков непосильной задачей. Хотя сам язык я до сих пор считаю одним из лучших.
В общем, по такому твоему мнению об IDE складывается впечатление, что проекты сложнее 300-х строк ты никогда не видел. Бывает. Я тебя наверное огорчу, но сегодня IDE — это один из главных инструментов разработчика, не менее важный, чем сам язык. А дальше будет только хуже. Всякие Copilots уже подтягиваются и встраиваются они не в язык, прикинь!, а в IDE.
C>Вот, например, partial methods. Фича крайне сомнительной полезности, и в языке ей просто не место.
Эта фича предназначена и широко применяется совместно с генераторами кода.
Вот классический код для INotifyPropertyChanged, сгенерированный T4:
public partial class WeatherViewModel : INotifyPropertyChanged
{
private string? _location;
public string? Location
{
get { return _location; }
set
{
if (_location != value)
{
BeforeLocationChanged(value);
_location = value;
AfterLocationChanged();
OnLocationChanged();
}
}
}
partial void BeforeLocationChanged(string? newValue);
partial void AfterLocationChanged ();
}
Вот использование
partial class WeatherViewModel
{
partial void AfterLocationChanged()
{
_lastUpdate = DateTime.MinValue;
Update();
}
}
Из двух partial методов вызов генерируется только для одного, который реализуется разработчиком. В результате всё очень гибко и эффективно.
Как по мне, так волне себе качественное решение. А как бы ты сам решал подобную задачу? Какими-нибудь виртуальными методами?