Pull to refresh

Comments 14

А как ваш анализатор в сравнении в плане функционала со встроенным JetBrains анализатором в Rider IDE? Спасибо.

Встроенные анализаторы от JetBrains для различных языков однозначно хороши. Однако, они просто части инструментов, помогающие ещё продуктивнее программировать. PVS-Studio классический статический анализатор, ориентированный на встраивание в большие старые проекты. В PVS-Studio реализованы такие механизмы, как массовое подавление предупреждений, что позволяет видеть только ошибки в новом и изменённом коде. Это даёт возможность легко начать использовать PVS-Studio на большой кодовой базе, отложив технический долг на потом. PVS-Studio интегрируется с SonarQube и т.д.
А вообще, лучше всего сравнить возможности, взяв и проверив свои проекты с помощью PVS-Studio.
Как всегда качественная статья. И полезно, и напомнили о себе.

1) Не самое красивое(для чтения) решение. Мне кажется удобнее или однострочный if\else, или присваивание значение по умолчанию для «value».
Код
if (String.IsNullOrEmpty(value))
{
this.linker.s3.region = "us-east-1";
return;
}
this.linker.s3.region = value;



2) А нет ли тут ошибки? Возможно нужно было иначе?
Код
IList conditionValues = keyEntry.Value;
if (conditionValues != null && conditionValues.Count == 0)
continue;



Решение
if (conditionValues == null || conditionValues.Count == 0)


UFO just landed and posted this here
UFO just landed and posted this here

Нет, так делать нельзя, нужно же кидать новые исключения, а не одно и то же каждый раз. Можно использовать Dictionary<string, Func<ErrorResponse, Exception, HttpStatusCode, Exception>>, но я бы просто написал switch.

UFO just landed and posted this here
Дело не только в параметрах. Exception — изменяемый тип данных, его нельзя выкидывать несколько раз просто так.

State19 — очевидно автогенерённый код лексера по грамматике, это мусорный варнинг. Автогенерённый код надо исключать из анализа.

Ну и варнинги про нереализованный хэшкод люди не сильно любят. По хорошему стоит выдавать его только если где-то в проекте этот объект действительно используется как ключ для хэша. А если нет, зачем парить мозги разработчикам, отвлекая от реальных проблем?

А с другой стороны, зачем тогда вообще нужен `IEquatable<>`?

Например, чтобы хранить объекты в списках и искать/удалять там? Иногда линейный поиск вполне достаточен. Ну и в целом, чтобы иметь возможность сравнивать объекты. Иногда это нужно без хэш-таблиц. Если объект при этом ещё IComparable, его можно хранить в упорядоченных множествах без хэшкода.

Например, чтобы хранить объекты в списках и искать/удалять там? Иногда линейный поиск вполне достаточен.

А что тогда мешает использовать упорядоченную структуру и реализовать только IComparable?
В этот раз мы имеем дело с гораздо большим объёмом кода, включающим в себя около 34 тысяч cs-файлов, а общее число строк кода (без учета пустых) составляет впечатляющие 5 миллионов.

Какова причина этого? Индусам до сих пор платят за объем кода, или потому-что .NET настолько многословен? Недавно писал библиотеку для GDrive на основе нативного явавского HTTPConnection, вышло на лист где-то, ибо это же просто обвертка для HTTPConnection! А ведь Ява намного более многословна чем тот же .NET, любая библиотека — это же просто обвертка для API, то есть нужно получить контент в JSON, распарсить его какой-нибудь библиотекой (часто она из коробки идет), и сделать что надо с полученными данными, что еще-то? Или они там что, для CORBA что-ли писали (монструозный предшественник REST API)? Но я что-то не помню чтобы Amazon поддерживал Корбу, они вроде с самого начала в JSON все выдавали.
Sign up to leave a comment.