目錄
Challenge #1: 統計數值陣列中共有多少個奇數
Challenge #2: 判斷日期是週末還是工作日
Challenge #3: The doubler function ( here be dragons),翻譯不出來~Mont~
首頁 後端開發 php教程 不用 If 語句的程式設計實例

不用 If 語句的程式設計實例

Feb 01, 2018 pm 02:27 PM
實例 程式設計 語句

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

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

   Coding Tip: Try to Code Without If-statements

不用 If 語句的程式設計實例

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函數,根據輸入不同,做如下處理:

  1. 若輸入是

    number 類型,做翻倍處理(5 => 10, -10 => -20)

  2. 若輸入是

    string類型,重複每個字元('hello' => 'hheelloo')

  3. 若輸入是

    function類型,呼叫執行兩次函數

  4. 若輸入是

    array類型,對陣列的每個元素做doubler處理

  5. 若輸入是

    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');
  }),
);
登入後複製
和Challenge #2類似,將條件值聚合在一起做統一處理。

總結

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

相關推薦:


談談if語句的現況、前景與機會

php基礎之elseif語句的程式碼實例總結

sql中的if語句詳解#

以上是不用 If 語句的程式設計實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

使用正規表示式去除 PHP 數組中的重複值 使用正規表示式去除 PHP 數組中的重複值 Apr 26, 2024 pm 04:33 PM

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

程式設計是乾啥的,學了有什麼用 程式設計是乾啥的,學了有什麼用 Apr 28, 2024 pm 01:34 PM

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

使用 Golang 建立基於瀏覽器的應用程式 使用 Golang 建立基於瀏覽器的應用程式 Apr 08, 2024 am 09:24 AM

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

C++ 程式設計謎題片段:激發思維,提升程式設計水平 C++ 程式設計謎題片段:激發思維,提升程式設計水平 Jun 01, 2024 pm 10:26 PM

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

編碼的關鍵:為初學者釋放 Python 的力量 編碼的關鍵:為初學者釋放 Python 的力量 Oct 11, 2024 pm 12:17 PM

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

使用 Python 解決問題:作為初學者,解鎖強大的解決方案 使用 Python 解決問題:作為初學者,解鎖強大的解決方案 Oct 11, 2024 pm 08:58 PM

Python 讓初學者能夠解決問題。

透過 Go Get 快速方便地取得 Go 模組 透過 Go Get 快速方便地取得 Go 模組 Apr 07, 2024 pm 09:48 PM

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

使用golang的錯誤包裝和展開機制進行錯誤處理 使用golang的錯誤包裝和展開機制進行錯誤處理 Apr 25, 2024 am 08:15 AM

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

See all articles