- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
if ( $MonitorMode eq \">=\" )
{
if ( $NbrProcesses < $ProcNumber )
{
$Rule->Status(TRUE);
}
}
elsif ( $MonitorMode eq \"<=\" )
{
if ( $NbrProcesses > $ProcNumber )
{
$Rule->Status(TRUE);
}
}
else
{
if ( $NbrProcesses != $ProcNumber )
{
$Session->Value(\"PROCESSMODE\", \"\" );
$Rule->Status(TRUE);
}
};
Dummy00001 09.08.2017 14:50 # +1
нормальный код. просто и понятно. по нему можно учится как из мух слонов не делать. но я догадываюсь что из простого и понятного большой карьеры не сделаешь, почему этот код и говно. тем более, если его каждый индус может понять и - еще хуже - поменять, то карьера закончится еще скорее. быстрее апгрейдим все на энтерпрайз! https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition
rjhdby 09.08.2017 16:58 # +2
Да, в кавычках - оно часть конфигурационного файла лежащего в БД
Dummy00001 09.08.2017 17:21 # +1
э? ты про что?
$MonitorMode это очевидно состояние, а как во всех нормальных fsm первая проверка, это проверка состояния.
> цикломатическую сложность
каким именно из 73 мне известных определений вы пользуетесь? поройтесь немного, найдете себе определение маккэйба по которому этот код будет просто само совершенство.
rjhdby 09.08.2017 17:38 # +1
У исходного кода она, грубо, 16, а при уходе от внутренних if'ов - уже 6.
Ну и на счет состояния можно с тем же успехом утверждать, что состояние - это $ProcNumber, а $MonitorMode- это модификатор влияющий на способ проверки этого состояния
Dummy00001 09.08.2017 17:43 # +1
классическое определение не уточняет что именно является нодом этого графа. и каждая тулза определяет по своему. я эвалюацию делал ~2 года назад - может только и на однострочниках эти тулзы соглашались о метрике. на всем нетривиальном - разброд и шатание.
с другой стороны, ты тогда должен радоватся что тут не switch/case. иначе бы сложность была 123123123123123, плюс/минус 1.
rjhdby 09.08.2017 17:58 # +2
вот такой вариант на порядок читабельнее и способствует пониманию происходящего при беглом просмотре, без спотыкания на ненужной лестнице :)
roman-kashitsyn 09.08.2017 19:58 # +3
В этом варианте статус выставляется во всех ветках. В топике если мод >=, но условие на число процессов не выполнено, ничего не произойдёт, т.к. альтернативные ветки не будут просматриваться.
rjhdby 10.08.2017 09:11 # +1
($MonitorMode eq ">=") && ($NbrProcesses < $ProcNumber) - это одно логическое выражение, атомарное относительно if. Если оно ЦЕЛИКОМ не выполняется, то управление передается следующему elsif
roman-kashitsyn 10.08.2017 11:55 # +4
> Если оно ЦЕЛИКОМ не выполняется, то управление передается следующему elsif
Вот именно поэтому.
Давай проверим на конкретных значениях. Допустим, выполнены условия:
$MonitorMode = ">="
$NbrProcesses > $ProcNumber
В коде из топика мы войдём в первую ветку (if ( $MonitorMode eq \">=\" )), проверим условие ( $NbrProcesses < $ProcNumber ), сочтём его ложным и на этом успокоимся. Остальные условия проверяться не будут, потому что самый первый if уже сработал.
В твоём коде мы получим false в первой и во второй ветках, в итоге сработает последняя и выставит Status(TRUE).
Видишь, код не эквивалентный.
rjhdby 10.08.2017 12:47 # +3
И ведь хотел другой вариант предложить изначально, но, так как давно с перлом не общался, решил не выделываться :)
AS учитывая, что там в коде сначала по умолчанию FALSE устанавливается
rjhdby 10.08.2017 13:00 # +1
Тогда оно и работать корректно будет и определяем условие явно, что тоже плюс
sos 12.08.2017 00:15 # +2
rjhdby 12.08.2017 22:44 # +1
bormand 13.08.2017 01:43 # +2
А вот это годный фикс. В оригинальном коде он бы тоже не помешал. А то сиди и думай, что там в else обрабатывается - "==" или "!=".
roman-kashitsyn 09.08.2017 17:18 # +1
Dummy00001 09.08.2017 17:24 # +1
ЗЫ ты and/or думаю перепутал. ты хотел &&/||. но вроде у тебя тут это к багу не ведет.
roman-kashitsyn 09.08.2017 17:31 # +1
Dummy00001 09.08.2017 17:38 # +1
roman-kashitsyn 09.08.2017 18:42 # +1
roman-kashitsyn 09.08.2017 20:37 # +2
Ты прав, код сильно проще не сделаешь.
Dummy00001 09.08.2017 20:47 # +2
оригинальный код подоходит к правилам "явного программирования" (которые никто никогда конкретно не сформулировал). это когда у тебя на одну строчку одно выражение, и нет никаких/минимальные побочные эффекты.
guest8 25.06.2019 23:41 # −999
PA3yMHblu_nemyx 26.06.2019 19:36 # 0
Красной водой поливает восход,
Кленёночек маленький матке
Зелёное вымя сосёт.
guest8 26.06.2019 19:41 # −999
PA3yMHblu_nemyx 26.06.2019 19:44 # 0
Рвётся образ с языка:
Отелившееся небо
Лижет красного телка.
guest8 26.06.2019 21:35 # −999
Floating_cockerel 26.06.2019 21:39 # +1
HEMECTHblu_nemyx 10.08.2019 18:53 # 0
guest8 10.08.2019 23:08 # −999
guest8 10.08.2019 23:16 # −999
petux 10.08.2019 23:19 # 0
Действительно, монголы же не к нему выехали.
HEMECTHblu_nemyx 11.08.2019 01:58 # 0
petux 11.08.2019 02:24 # 0
HEMECTHblu_nemyx 11.08.2019 02:34 # 0
raMagPuJI 04.10.2019 02:06 # 0
HeMecTHbIu 09.08.2019 09:34 # 0
1. Проверяется один режим, а проверка, по-факту, выполняется другая. Для ясности перевернул второе условие.
2. Совершенно не ясно, являются ли эти случаи попарно равнозначными
HeMecTHbIu 09.08.2019 09:36 # 0