我用java编写了一个程序,其中一部分必须评估蛋白质序列中的切割。我必须评估分裂是否发生在两端的某些组中,这会导致 if、else/elseif 语句在几个地方带有烦人的逻辑、嵌套或只有几个“if”和/或“else”。我使用 switch 作为每次发生分裂时必须评估几个“if”和逻辑(&&,||)的替代方案(这个循环将逐字迭代数百万次,可能是数千万或数亿次)。
继承人的代码块: -.getSeq() 获取一个表示蛋白质序列的字符串 -startPos 和 endPos 是任一端的切割的索引 - 对不起,如果 if 语句行被分成多行或复杂,但那是我的案例和关于逻辑的观点。
/**0: non-tryptic, 1: half-tryptic, 2: fully tryptic**************/
public boolean checkPep(int trypticity){
boolean evaluator = false;
int prev = 0;
if (startPos != 0){
prev = 1;
}
switch(trypticity){
/**do not check cleavage if peptide can be non-tryptic*/
case 0:
evaluator = true;
break;
/***half-tryptic*/
/**check if either the start OR end cleavage is tryptic*/
case 1:
switch(protein.getSeq().charAt(startPos-prev)){
case 'K':
evaluator = true;
break;
case 'R':
evaluator = true;
break;
default :
switch(protein.getSeq().charAt(endPos)){
case 'K':
evaluator = true;
break;
case 'R':
evaluator = true;
break;
default:
evaluator = false;
break;
}
break;
}
break;
/**fully tryptic*/
/**if first cleavage is tryptic, check end cleavage*/
/**evaluator = true IFF both cleavages are tryptic*******/
case 2:
if(((protein.getSeq().charAt(startPos-1)) == 'K') || ((protein.getSeq().charAt(startPos-1)) == 'R')){
if(((protein.getSeq().charAt(endPos)) == 'K') || ((protein.getSeq().charAt(endPos)) == 'R')){
evaluator = true;
}else{
evaluator = false;
}
}else{
evaluator = false;
}
break;
}
return evaluator;
}