Вопрос

У меня есть эти два фрагмента кода, какой из них более читаем?

  1. для каждого

    decimal technicalPremium = 0;
    foreach (Risk risk in risks)
    {
         technicalPremium = technicalPremium + risk.TechnicalPremium;
    }
    return technicalPremium;
    
  2. Линк

    return risks.Sum(risk => risk.TechnicalPremium);
    
Это было полезно?

Решение

Если команда, работающая над кодом, знает, что делает версия Linq, и знает ее внутреннюю работу, тогда она будет более читабельной.

Другие советы

Используйте то, что предпочитаете, но скройте его в методе:

return risks.SumTechnicalPremium();

Ни один.Первый вариант более подробный и понятен каждому.Второй более краток и понятен каждому, даже обладающему поверхностными знаниями linq.

Я бы сказал, что вы можете основывать свой выбор на среде, в которой находитесь.

Для тех, кто умеет читать LINQ, LINQ.

Для тех, кому приходится интерпретировать код шаг за шагом (используя intellisense/документацию, используйте более короткий вариант.

Используйте linq.Если вы считаете, что это требует объяснения, об этом позаботится однострочный комментарий.По мере того, как люди привыкают к linq, необходимость в комментариях отпадает.

Код LINQ очень удобен для чтения и самодокументируется.

Первый вариант более понятен более широкому кругу людей.Второй вариант имеет «входной барьер», заключающийся в том, что читатель может знать и понимать LINQ.Он более краток и, возможно, будет лучше, если ваша аудитория преодолеет этот входной барьер.

Я думаю, что второй вариант лучше, поскольку он должен быть более эффективным.Однако то, что происходит, менее очевидно (по крайней мере, для меня).

Я бы сказал первое, так как не знаю linq.Рискуя чрезмерно документировать, я бы использовал это с кратким описанием того, что происходит.Или просто скажите, что это linq для людей, которые, возможно, понятия не имеют.

Если вы предоставите комментарий, объясняющий его цель, я бы выбрал вариант Linq.

Первый, если вы не знакомы с Linq.Любой разработчик может прочитать и понять первый вариант.

Здесь нет проблем с читабельностью.Нажмите «Сумма» и нажмите F1.

Линк за победу.

В каждом языке есть соглашения о том, как лучше всего кодировать такие вещи, поэтому то, что наиболее удобно для чтения людям, которые регулярно используют этот язык, не является универсальным.Для Java-программиста или обычного программиста C# первый вариант более читабелен.Для тех, кто привык к LINQ или функциональному программированию, второй вариант более читабелен.

Я не знаю C#, но вторая альтернатива кажется мне намного чище, и я могу понять, что она делает (хорошо, с некоторыми догадками и перекрестной проверкой с первой версией).Вероятно, из-за какой-то функциональной подоплеки.Но в первую очередь надо искать технический Премиум в 4(!) местах.Второй намного короче и его легче понять, если вы просто читаете код.

или

десятичная техническая премия = 0;

foreach (Риск риска в рисках) техническаяПремиум = техническаяПремиум + риск.ТехническаяПремиум;

возврат технической премии;

Я вижу, как люди говорят, что им нравится первый вариант, «если вы не знаете Linq».Да, и первое невозможно прочитать, если вы не знаете C#.Это не вопрос «что более читабельно», а вопрос «какими языковыми функциями нам удобно пользоваться?»

Начните с обсуждения со своей командой тех частей языка/фреймворка/набора инструментов, которые все ненавидят, и объявите их запретными.Все остальное считается частью стандартного словарного запаса, и ожидается, что все будут свободно владеть им.Этот список должен находиться в вашем документе по стандартам кодирования, рядом с «никогда не создавайте изменяемые типы значений" и "не беспокойтесь о тривиальных свойствах для непубличных членов".

Пока Linq нет в вашем списке исключений, второй пример: далеко читабельнее первого.Почему?Потому что он декларирует назначение кода, а не просто представляет механизм, который читатель должен расшифровать.

Если ваша цель — сделать его более читабельным для «любого», кто может прийти после вас, используйте foreach.Я интерпретирую слово «более читабельно» как означающее, что любой, у кого есть опыт в основах языка, сможет его понять.Для человека, незнакомого с linq и все еще использующего VS2005 или более раннюю версию, синтаксис linq может сбить с толку.

Я бы сказал, что первый кусок кода определенно более читабелен, и он был бы еще читабельнее, если бы вы переименовали хотя бы переменную Risk так, чтобы у нее было другое имя, чем у класса.Вероятно, было бы лучше, если бы вы переименовали массив Risks.

Я согласен с теми, кто говорит, что второе будет легко понять по мере того, как Linq станет более широко распространенным.Это, конечно, более лаконично.

Однако меня беспокоит простота отладки.Кажется, гораздо проще просмотреть код в foreach, чтобы точно увидеть, что он делает на каждом проходе.

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

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

Я думаю, что по мере того, как лямбда-выражения станут более распространенными в программировании .NET, эта проблема станет менее серьезной.В нынешнем виде я думаю, что для понимания основ использования лямбда-выражений в .NET требуется очень небольшой период обучения.

Второе, однозначно.Наличие такого большого блока кода для таких простых операций, как суммирование, просто ненужно.Я также не знаю, что такое LINQ, но мне он прекрасно читается.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top