2012-01-17 4 views
-2

Есть ли способ упростить этот код? оператор «elseif», похоже, не работает и вызывает мое приложение для исключения ошибок.Любой способ упростить этот код, более эффективный?

if(@@Employee_Position=="Manager") { 

    if(@@CER_BioMed == "Y" && @@CER_PO == "Y") 
     @%ISINDEX=5; 
    elseif(@@CER_BioMed == "Y" && @@CER_PO != "Y") 
     @%ISINDEX=4; 
    elseif(@@CER_BioMed != "Y" && @@CER_PO == "Y") 
     @%ISINDEX=4; 
    else 
     @%ISINDEX=3; 
    } 
else { 
    if(@@CER_BioMed == "Y" && @@CER_PO == "Y") 
     @%ISINDEX=6; 
    elseif(@@CER_BioMed == "Y" && @@CER_PO != "Y") 
     @%ISINDEX=5; 
    elseif(@@CER_BioMed != "Y" && @@CER_PO == "Y") 
     @%ISINDEX=5; 
    else 
     @%ISINDEX=4; 
} 

ОБНОВЛЕНИЕ: Извините, что не ясны. Первая публикация здесь. Это в php-языке. Это php-триггер для ProcessMaker BPS.

+2

Вы помечено это как PHP и JavaScript ... Что это? Я угадываю php? –

+7

На каком языке это? –

+1

похоже на шаблон, который будет заполнен либо я угадываю PHP или JavaScript. О, нет, подождите .. это * * код! – Anurag

ответ

0

Ну, основываясь на том, что дал, я бы что-то вроде этого:

if(@@CER_BioMed == "Y" && @@CER_PO == "Y") 
    @%ISINDEX=5; 
elseif(@@CER_BioMed != "Y" XOR @@CER_PO != "Y") 
    @%ISINDEX=4; 
else 
    @%ISINDEX=3; 

if(@@Employee_Position=="Manager") 
    @%ISINDEX-=1; 

Предполагая, что на каком бы языке это поддерживает оператор -=.

5

Поскольку я не знаю, что язык, который я буду держать его несколько язык агностиком:

isindex = 3; 
if (employee_position != 'manager') { 
    isindex++; 
} 
if (cer_biomed == 'y') { 
    isindex++; 
} 
if (cer_po == 'y') { 
    isindex++; 
} 
+0

Это немного хрупко и подвержено взлому, когда код пересматривается позже. – Joe

0

Я не знаю, на каком языке это, но:

elseif(@@CER_BioMed == "Y" && @@CER_PO != "Y") 
       @%ISINDEX=4; // or 5 
      elseif(@@CER_BioMed != "Y" && @@CER_PO == "Y") 
       @%ISINDEX=4; // or 5 

кажется ясным случаем OR:

elseif(@@CER_BioMed == "Y" || @@CER_PO == "Y") 
       @%ISINDEX=4; // or 5 
+0

Хотя в контексте первого оператора 'if' это не имеет значения, это будет фактически случай XOR, а не' OR'. – animuson

+0

@animuson Да, вся логика должна быть переписана, это просто попалось мне на глаза ... – jeroen

0

Вычислить число от 0 до 7, используя

lookup_table_index = (
    ((@@Employee_Position=="Manager") << 2) 
    | ((@@CER_BioMed == "Y") << 1) 
    | (@@CER_PO == "Y")) 

, а затем использовать это в качестве индекса в массиве длины 8 со значениями для @% INDEX.

lookup_table = [4, 5, 5, 6, 3, 4, 4, 5] 

, а затем вы можете вычислить ваш индекс

INDEX = lookup_table[lookup_table_index] 
Смежные вопросы