私はJavaでプログラムを書いており、その一部はタンパク質配列の切断を評価する必要があります。切断がどちらかの側の特定のグループで発生するかどうかを評価する必要があります。これにより、if、else/elseif ステートメントがいくつかの場所での煩わしい論理、ネスト、またはいくつかの「if」および/または「else」のいずれかになります。切断が発生するたびにいくつかの「if」と論理 (&&、||) を評価する必要がある代わりに、switch を使用しました (このループは、文字通り何百万回も、何千万回も何億回も繰り返されます)。
コードのチャンクは次のとおりです: -.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;
}