不用 If 語句的程式設計實例
現在開始,請嘗試盡量避免使用if語句來實現我們的業務
你可能會疑問不使用if有什麼好處?額~,可能也沒啥很明顯的好處,就是換個思考方式來解決問題。 if-else並沒有錯,但在某些情況下大量的if-else可能會降低程式碼可讀性。以下會列舉一些實例帶你感受其中的奧妙。
Coding Tip: Try to Code Without If-statements
Challenge #1: 統計數值陣列中共有多少個奇數
已知一個整數型別數組,統計該數組中奇數的個數
const arrayOfIntegers = [1, 4, 5, 9, 0, -1, 5];
if實作
let counter = 0; arrayOfIntegers.forEach((integer) => { const remainder = Math.abs(integer % 2); if (remainder === 1) { counter++; } }); console.log(counter);
非if實作
let counter = 0; arrayOfIntegers.forEach((integer) => { const remainder = Math.abs(integer % 2); // 偶数除2的余数为零,奇数的余数为一 counter += remainder; }); console.log(counter);
記:上述兩個例子,forEach是會改變原數組的,方法是可變的
,違背了當下所提倡的函數式程式設計immutable
理念,不用在意,不是本文關注點。兩個例子比較而言,if語句
的實作可能更具相容性,可以適應陣列元素是小數
的情況。若數組元素為浮點類型,第二個例子就無法正常使用。
Challenge #2: 判斷日期是週末還是工作日
實作函數,日期物件 new Date()
作為輸入,依照不同日期回傳當天是工作日
還是週末
。
if實作
const weekendOrWeekday = inputDate => { const day = inputDate.getDay(); if (day === 0 || day === 6) { return 'weekend'; } return 'weekday'; // Or, for ternary fans: // return (day === 0 || day === 6) ? 'weekend' : 'weekday'; }; console.log(weekendOrWeekday(new Date()));
非if實作
const weekendOrWeekday = (inputDate) => { const day = inputDate.getDay(); return weekendOrWeekday.labels[day] || weekendOrWeekday.labels['default']; }; weekendOrWeekday.labels = { 0: 'weekend', 6: 'weekend', default: 'weekday' }; console.log(weekendOrWeekday(new Date()));
有沒有註意到,if語句
中的數字代表哪天是週末,判定條件分佈的較為零散,我們需要做的是將數字和週末或工作日
類型對應起來,如範例2,可以使用一個物件或map來儲存對應關係。
上述兩個例子對比,可以明顯看出非if程式碼
實作具有更好的可讀性和擴展性
Challenge #3: The doubler function ( here be dragons),翻譯不出來~Mont~
##實現一個doubler函數,根據輸入不同,做如下處理:- 若輸入是
number
類型,做翻倍處理(5 => 10, -10 => -20)
- 若輸入是
string
類型,重複每個字元('hello' => 'hheelloo')
- 若輸入是
function
類型,呼叫執行兩次函數
- 若輸入是
array
類型,對陣列的每個元素做
doubler處理
- 若輸入是
object
類型,對物件的每個屬性做
doubler處理
#switch實作
const doubler = (input) => { switch (typeof input) { case 'number': return input + input; case 'string': return input .split('') .map(letter => letter + letter) .join(''); case 'object': Object.keys(input) .map(key => (input[key] = doubler(input[key]))); return input; case 'function': input(); input(); } }; console.log(doubler(-10)); console.log(doubler('hey')); console.log(doubler([5, 'hello'])); console.log(doubler({ a: 5, b: 'hello' })); console.log( doubler(function() { console.log('call-me'); }), );
switch實作
const doubler = (input) => { return doubler.operationsByType[typeof input](input); }; doubler.operationsByType = { number: (input) => input + input, string: (input) => input .split('') .map((letter) => letter + letter) .join(''), function: (input) => { input(); input(); }, object: (input) => { Object.keys(input) .map((key) => (input[key] = doubler(input[key]))); return input; }, }; console.log(doubler(-10)); console.log(doubler('hey')); console.log(doubler([5, 'hello'])); console.log(doubler({ a: 5, b: 'hello' })); console.log( doubler(function() { console.log('call-me'); }), );
if-else的判斷條件較多時,將條件做集中處理(用object儲存其對應關係--條件做key,處理做value )。好處是增刪某個條件變得容易,程式碼更可讀,提倡使用
key-value對應來取代一部分的
if-else的條件判斷。
以上是不用 If 語句的程式設計實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

使用正規表示式從PHP數組中移除重複值的方法:使用正規表示式/(.*)(.+)/i匹配並取代重複項。遍歷數組元素,使用preg_match檢查匹配情況。如果匹配,請跳過值;否則,將其添加到無重複值的新數組中。

1、程式設計可用於開發各種軟體和應用程序,包括網站、手機應用程式、遊戲和數據分析工具等。它的應用領域非常廣泛,幾乎涵蓋了所有行業,包括科學研究、醫療保健、金融、教育、娛樂等。 2.學習程式設計可以幫助我們提升問題解決能力和邏輯思考能力。在程式設計過程中,我們需要分析和理解問題,找出解決方案,並將其轉換為程式碼。這種思維方式能夠培養我們的分析和抽象能力,提升我們解決實際問題的能力。

使用Golang建立基於瀏覽器的應用程式Golang結合JavaScript建構了動態的前端體驗。安裝Golang:造訪https://golang.org/doc/install。設定Golang專案:建立一個名為main.go的檔案。使用GorillaWebToolkit:新增GorillaWebToolkit程式碼以處理HTTP請求。建立HTML模板:在templates子目錄中建立index.html,這是主模板。

C++程式設計謎題涵蓋斐波那契數列、階乘、漢明距離、陣列最大值和最小值等演算法和資料結構概念,透過解決這些謎題,可以鞏固C++知識,提升演算法理解和程式設計技巧。

Python透過其易學性和強大功能,是初學者的理想程式設計入門語言。其基礎包括:變數:用於儲存資料(數字、字串、列表等)。資料型態:定義變數中資料的型態(整數、浮點數等)。運算符:用於數學運算和比較。控制流程:控製程式碼執行流程(條件語句、迴圈)。

透過GoGet,可以快速且方便地取得Go模組,步驟如下:在終端機中執行:goget[module-path],其中module-path為模組路徑。 GoGet會自動下載模組及其相依性。安裝的位置由GOPATH環境變數指定。

Go中的錯誤處理包括包裝錯誤和展開錯誤。包裝錯誤允許用一個錯誤類型包裝另一個,提供更豐富上下文的錯誤。展開錯誤遍歷巢狀錯誤鏈,找到最底層錯誤,方便除錯。透過結合這兩種技術,可以有效處理錯誤條件,提供更豐富的錯誤情境和更好的除錯能力。
