程式設計技巧 嘗試不用 If 語句程式設計

2021-09-14 03:13:17 字數 2808 閱讀 9851

現在開始,請嘗試盡量避免使用if語句來實現我們的業務

你可能會疑問不使用if有什麼好處?額~,可能也沒啥很明顯的好處,就是換種思考方式來解決問題。if-else並沒有錯,但在某些情況下大量的if-else可能會降低**可讀性。下面會列舉一些例項帶你感受其中的奧妙。

已知乙個整數型別陣列,統計該陣列中奇數的個數

const arrayofintegers = [1, 4, 5, 9, 0, -1, 5];
if實現

let counter = 0;

arrayofintegers.foreach((integer) =>

});console.log(counter);

非if實現

let counter = 0;

arrayofintegers.foreach((integer) => );

console.log(counter);

記: 上述兩個例子,foreach是會改變原陣列的,方法是可變的,違背了當下所提倡的函式式程式設計immutable理念,不用在意,不是本文關注點。兩個例子比較而言,if語句的實現可能更具相容性,可以適應於陣列元素是小數的情況。若陣列元素為浮點型別,第二個例子就無法正常使用。

實現乙個函式,日期物件new date()作為輸入,根據不同日期返回當天是工作日還是週末

if實現

const weekendorweekday = inputdate => 

return 'weekday';

// or, for ternary fans:

// return (day === 0 || day === 6) ? 'weekend' : 'weekday';

};console.log(weekendorweekday(new date()));

非if實現

const weekendorweekday = (inputdate) => ;

weekendorweekday.labels = ;

console.log(weekendorweekday(new date()));

有沒有注意到,if語句中的數字代表哪天是週末,判定條件分布的較為零散,我們需要做的是將數字和週末或工作日型別對應起來,如例子2,可以使用乙個物件或者map來儲存對應關係。

上述兩個例子對比,可以明顯看出非if**實現具有更好的可讀性和擴充套件性

實現乙個doubler函式,根據輸入不同,做如下處理:

若輸入是number型別, 做翻倍處理(5 => 10, -10 => -20)

若輸入是string型別,重複每個字元('hello' => 'hheelloo')

若輸入是function型別,呼叫執行兩次函式

若輸入是array型別,對陣列的每個元素做doubler處理

若輸入是object型別,對物件的每個屬性做doubler處理

switch實現

const doubler = (input) => 

};console.log(doubler(-10));

console.log(doubler('hey'));

console.log(doubler([5, 'hello']));

console.log(doubler());

console.log(

doubler(function() ),

);

switch實現

const doubler = (input) => ;

doubler.operationsbytype = ,

object: (input) => ,

};console.log(doubler(-10));

console.log(doubler('hey'));

console.log(doubler([5, 'hello']));

console.log(doubler());

console.log(

doubler(function() ),

);

和challenge #2類似,將條件值聚合在一起做統一處理。

if-else的判斷條件較多時,將條件做集中處理(用object儲存其對應關係--條件做key,處理做value)。好處是增刪某個條件變得容易,**更加可讀,提倡使用key-value對應來取代一部分的if-else的條件判斷。

【開發環境推薦】

嘗試ruby程式設計

1.安裝好ruby1.8.7 在命令列中ruby v 顯示版本號,就說明ruby已經安裝好了。雙擊路徑下的irb.bat檔案,進入命令視窗,進行互動式ruby 2.簡單用法 1 puts puts hello world 回車 hello world puts 1 3 4puts 2 3 6 2 d...

C語言程式設計嘗試

1.余弦 include includemain return 0 yy遍歷次數為高度 x從0到62為橫軸範圍 需要列印的點為兩個余弦點和乙個直線點 可能有交點 余弦對應點為x m和x 62 m 直線對應點為x n 在x遍歷到62後進行換行 2.思考題 正弦和余弦 include includein...

函式式程式設計 只用 表示式 ,不用 語句

把函式當作普通的運算子使用。2.只用 表示式 不用 語句 表示式 expression 是乙個單純的運算過程,總是有返回值 語句 statement 是執行某種操作 更多的是邏輯語句。沒有返回值。函式式程式設計要求,只使用表示式,不使用語句。也就是說,每一步都是單純的運算,而且都有返回值。原因是函式...