現在開始,請嘗試盡量避免使用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 是執行某種操作 更多的是邏輯語句。沒有返回值。函式式程式設計要求,只使用表示式,不使用語句。也就是說,每一步都是單純的運算,而且都有返回值。原因是函式...