Что лучший способ состоит в том, чтобы уменьшить цикломатическую сложность при проверке данных? [закрытый]

Подход OP

=TEXT(LEFT(A1;FIND(" ";A1));REPT("0";FIND(" ";A1)-2)&"#")

Версия с запятой

=TEXT(LEFT(A1,FIND(" ",A1)),REPT("0",FIND(" ",A1)-2)&"#")

Предыдущие версии поднимали вопрос, где теряется место в конце.

Версия VBA

Function LZERO(ZeroString As String) As String
    LZERO = Split(ZeroString)(0)
End Function

Например. =LZERO(A1)

7
задан rjzii 15 October 2008 в 13:41
поделиться

5 ответов

Что относительно того, чтобы использовать Дополнительные Методы.

Imports System.Runtime.CompilerServices

Module Extensions

    <Extension()> _
    Public Function TryGetString(ByVal row As IDataRecord, i As Integer) As String
        If row.IsDBNull(i) Then
            Return null
        End If
        Return row.GetString(i);
    End Function

End Module

Затем можно просто записать:

row("Field") = oraData.TryGetString(4)

Это читает гладко и уменьшает цикломатическую сложность на Ваших функциях.

2
ответ дан 7 December 2019 в 07:52
поделиться

Разложитесь на функции, возможно, что-то вроде этого:

//Object Pascal
procedure UpdateIfNotNull( const fldName: String; fldIndex : integer );
begin
  if oraData.IsDBNull( fldIndex ) then
    row( fldName ) := oraData.GetString(fldIndex);
end;

Конечно, можно расширить подпись процедур так, чтобы "oraData" и "строка" могли, передал как параметры.

2
ответ дан 7 December 2019 в 07:52
поделиться

Первый вопрос: Почему Вы "подвешиваетесь" на CC? Это - инструмент, чтобы оценить, насколько плотный код, и эмпирическое правило должно быть "не слишком высоко cc числа".

Это, вероятно, поражает все они "ЕСЛИ" s и поднимает то число - поэтому сократите количество IFS путем вызывания функции переноса, которая извлекает данные из набора результатов, который обрабатывает пустой указатель, или измените запрос, таким образом, это не возвращается, аннулирует.

Следует иметь в виду, что аннулирует, предоставляют информацию и не бесполезны. Например, республиканец или демократ? использование пустого указателя не говорит никакой выбор.

2
ответ дан 7 December 2019 в 07:52
поделиться

Возможно осуществить рефакторинг если в отдельную служебную функцию для сокращения CC. Много функций или функция, полагающаяся на дифференцирование типа, могли бы потребоваться, чтобы обрабатывать различные типы БД (строка, интервал и т.д.)

Однако я утверждал бы, что любое решение приведет к меньшему количеству удобного в сопровождении или читаемого кода (т.е. Вы могли бы ухудшить другие метрики!) и был бы как QA позволять этому передавать согласно этому выравниванию.

0
ответ дан 7 December 2019 в 07:52
поделиться

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

Я определенно согласился бы с другими предложениями здесь: если существуют повторенные операторы, которые могут быть аккуратно упакованы в функции/процедуры, которые могли бы быть одним подходом для взятия, пока Вы только смещаете CC вокруг. Я не уверен, что Вы получили слишком много, если Вы перемещаетесь от одного proc с CC 35 к трем procs с CCS 15, 10, и 10. (Это не плохой первый шаг, но идеально Вы смогли бы упростить что-то на большем объеме для сокращения общего CC в той области системы.)

1
ответ дан 7 December 2019 в 07:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: