亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

編程技巧:嘗試不用 If 語句編程

jackwang / 3610人閱讀

摘要:兩個(gè)例子比較而言,語句的實(shí)現(xiàn)可能更具兼容性,可以適應(yīng)于數(shù)組元素是小數(shù)的情況。若數(shù)組元素為浮點(diǎn)類型,第二個(gè)例子就無法正常使用。開發(fā)環(huán)境推薦是基于瀏覽器的集成式開發(fā)環(huán)境,支持絕大部分編程語言,包括小程序等等,無需下載安裝程序,一鍵切換開發(fā)環(huán)境。

Coding Tip: Try to Code Without If-statements

現(xiàn)在開始,請嘗試盡量避免使用if語句來實(shí)現(xiàn)我們的業(yè)務(wù)

你可能會(huì)疑問不使用if有什么好處?額~,可能也沒啥很明顯的好處,就是換種思考方式來解決問題。if-else并沒有錯(cuò),但在某些情況下大量的if-else可能會(huì)降低代碼可讀性。下面會(huì)列舉一些實(shí)例帶你感受其中的奧妙。

Challenge #1: 統(tǒng)計(jì)數(shù)值數(shù)組中共有多少個(gè)奇數(shù)

已知一個(gè)整數(shù)類型數(shù)組,統(tǒng)計(jì)該數(shù)組中奇數(shù)的個(gè)數(shù)

const arrayOfIntegers = [1, 4, 5, 9, 0, -1, 5];

if實(shí)現(xiàn)

let counter = 0;
arrayOfIntegers.forEach((integer) => {
  const remainder = Math.abs(integer % 2);
  if (remainder === 1) {
    counter++;
  }
});
console.log(counter);

非if實(shí)現(xiàn)

let counter = 0;
arrayOfIntegers.forEach((integer) => {
  const remainder = Math.abs(integer % 2);
  // 偶數(shù)除2的余數(shù)為零,奇數(shù)的余數(shù)為一
  counter += remainder;
});
console.log(counter);

記: 上述兩個(gè)例子,forEach是會(huì)改變原數(shù)組的,方法是可變的,違背了當(dāng)下所提倡的函數(shù)式編程immutable理念,不用在意,不是本文關(guān)注點(diǎn)。兩個(gè)例子比較而言,if語句的實(shí)現(xiàn)可能更具兼容性,可以適應(yīng)于數(shù)組元素是小數(shù)的情況。若數(shù)組元素為浮點(diǎn)類型,第二個(gè)例子就無法正常使用。

Challenge #2: 判斷一個(gè)日期是周末還是工作日

實(shí)現(xiàn)一個(gè)函數(shù),日期對象 new Date()作為輸入,根據(jù)不同日期返回當(dāng)天是工作日還是周末。

if實(shí)現(xiàn)

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實(shí)現(xiàn)

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語句中的數(shù)字代表哪天是周末,判定條件分布的較為零散,我們需要做的是將數(shù)字和周末或工作日類型對應(yīng)起來,如例子2,可以使用一個(gè)對象或者map來存儲(chǔ)對應(yīng)關(guān)系。

上述兩個(gè)例子對比,可以明顯看出非if代碼實(shí)現(xiàn)具有更好的可讀性和擴(kuò)展性

Challenge #3: The doubler function (here be dragons),翻譯不出來~尬~

實(shí)現(xiàn)一個(gè)doubler函數(shù),根據(jù)輸入不同,做如下處理:

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

若輸入是string類型,重復(fù)每個(gè)字符("hello" => "hheelloo")

若輸入是function類型,調(diào)用執(zhí)行兩次函數(shù)

若輸入是array類型,對數(shù)組的每個(gè)元素做doubler處理

若輸入是object類型,對對象的每個(gè)屬性做doubler處理

switch實(shí)現(xiàn)

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實(shí)現(xiàn)

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類似,將條件值聚合在一起做統(tǒng)一處理。

總結(jié)

當(dāng)if-else的判斷條件較多時(shí),將條件做集中處理(用object存儲(chǔ)其對應(yīng)關(guān)系--條件做key,處理做value)。好處是增刪某個(gè)條件變得容易,代碼更加可讀,提倡使用key-value對應(yīng)來取代一部分的if-else的條件判斷。

【開發(fā)環(huán)境推薦】Cloud Studio 是基于瀏覽器的集成式開發(fā)環(huán)境,支持絕大部分編程語言,包括 HTML5、PHP、Python、Java、Ruby、C/C++、.NET 小程序等等,無需下載安裝程序,一鍵切換開發(fā)環(huán)境。 Cloud Studio提供了完整的 Linux 環(huán)境,并且支持自定義域名指向,動(dòng)態(tài)計(jì)算資源調(diào)整,可以完成各種應(yīng)用的開發(fā)編譯與部署。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/107038.html

相關(guān)文章

  • 你試過不用if擼代碼嗎?

    摘要:譯者按試著不用擼代碼,是件很有趣的事,而且,萬一你領(lǐng)會(huì)了什么是數(shù)據(jù)即代碼,代碼即數(shù)據(jù)呢原文譯者為了保證可讀性,本文采用意譯而非直譯。但是,不使用的話,有時(shí)候可以增加代碼的可讀性。 譯者按: 試著不用if擼代碼,是件很有趣的事,而且,萬一你領(lǐng)會(huì)了什么是數(shù)據(jù)即代碼,代碼即數(shù)據(jù)呢? 原文: Coding Tip: Try to Code Without If-statements 譯者:...

    I_Am 評論0 收藏0
  • 我喜歡的5個(gè)編程技巧

    摘要:更多信息嵌套三元運(yùn)算符之前改造后我承認(rèn),一開始,使用嵌套三元運(yùn)算符的想法的確令人倒胃口。當(dāng)然使用三元運(yùn)算符具有兩面性,但就我個(gè)人而言,嵌套三元運(yùn)算符真的越來越吸引我了。 在這篇文章中,我介紹了一些編程時(shí)嘗試使用的模式。這些模式是多年來我自己在工作中實(shí)踐的結(jié)果,也有是從同事那里偷偷學(xué)到的。 這些模式?jīng)]有特定的順序,只是一個(gè)簡單的集合。 提前退出(early exits) function...

    Aceyclee 評論0 收藏0
  • 用函數(shù)式編程對JavaScript進(jìn)行斷舍離

    摘要:函數(shù)式編程一開始我并不理解。漸漸地,我熟練掌握了使用函數(shù)式的方法去編程。但是自從學(xué)習(xí)了函數(shù)式編程,我將循環(huán)都改成了使用和來實(shí)現(xiàn)。只有數(shù)據(jù)和函數(shù),而且因?yàn)楹瘮?shù)沒有和對象綁定,更加容易復(fù)用。在函數(shù)式的中,這些問題不復(fù)存在。 譯者按: 當(dāng)從業(yè)20的JavaScript老司機(jī)學(xué)會(huì)函數(shù)式編程時(shí),他扔掉了90%的特性,也不用面向?qū)ο罅?,最后發(fā)現(xiàn)了真愛啊?。?! 原文: How I rediscov...

    dkzwm 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<