1. 程式人生 > >【經驗】用矩陣表示if else邏輯

【經驗】用矩陣表示if else邏輯

考慮如下情景:
我要顯示一個表單,其中表單有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邏輯。