【經驗】用矩陣表示if else邏輯
阿新 • • 發佈:2018-12-24
考慮如下情景:
我要顯示一個表單,其中表單有n種狀態,表單需要顯示m個按鈕,現在需要根據表單的狀態設定按鈕的enabled…
一般的方式可能是:
if(form.status == 1){
setEnabled('button1');
setEnabled('button2');
setEnabled('button4');
setEnabled('button5');
setEnabled('button7');
}else if(form.status == 2){
setEnabled('button2');
setEnabled('button4');
setEnabled ('button6');
}else if(form.status == 3){
setEnabled('button5');
}else if(form.status == 4){
setEnabled('button2');
setEnabled('button4');
setEnabled('button6');
}
.....
或者用switch:
switch(form.status){
case 1:
setEnabled('button1');
setEnabled('button2');
setEnabled('button4');
setEnabled ('button5');
setEnabled('button7');
break;
case 2:
setEnabled('button2');
setEnabled('button4');
setEnabled('button6');
break;
case 3:
setEnabled('button5');
break;
case 4:
setEnabled('button2');
setEnabled('button4');
setEnabled('button6');
break;
......
}
無論哪種實現,都需要寫大量的程式碼,看起來很累,需要改的時候也很麻煩。
這裡提供一種方式,使用矩陣的方式,來實現這種大量且規整的if else邏輯。
var btnStatus = new Object();
btnStatus['button1'] = [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0];
btnStatus['button2'] = [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0];
btnStatus['button3'] = [1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0];
btnStatus['button4'] = [0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0];
for(var i in btnStatus) {
if(btnStatus[i][form.status] == 1) {
setEnabled(i);
}
}
只用短短几行,就用矩陣濃縮了所有程式碼邏輯。其中status在這裡是從0開始的取值,如果status不是從0開始的,或者不是整數,只需對程式碼稍作修改也可以使用。
而且不限於JavaScript語言,Java等其他語言也可以利用這種思路解決大量且規整的if else邏輯。