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

資訊專(zhuān)欄INFORMATION COLUMN

我喜歡的5個(gè)編程技巧

Aceyclee / 559人閱讀

摘要:更多信息嵌套三元運(yùn)算符之前改造后我承認(rèn),一開(kāi)始,使用嵌套三元運(yùn)算符的想法的確令人倒胃口。當(dāng)然使用三元運(yùn)算符具有兩面性,但就我個(gè)人而言,嵌套三元運(yùn)算符真的越來(lái)越吸引我了。

在這篇文章中,我介紹了一些編程時(shí)嘗試使用的模式。這些模式是多年來(lái)我自己在工作中實(shí)踐的結(jié)果,也有是從同事那里偷偷學(xué)到的。

這些模式?jīng)]有特定的順序,只是一個(gè)簡(jiǎn)單的集合。

提前退出(early exits)
function transformData(rawData) {
  // check if no data
  if (!rawData) {
    return [];
  }

  // check for specific case
  if (rawData.length == 0) {
    return [];
  }

  // actual function code goes here
  return rawData.map((item) => item);
}

我將這種模式稱(chēng)為“提前退出(early exits)”,但有些人也將此稱(chēng)為“保鏢模式(the Bouncer Pattern)”或“保護(hù)條款("guard clauses)”。撇開(kāi)命名不談,該模式采用的方法是首先檢查無(wú)效的情況,然后從該函數(shù)返回,否則它將繼續(xù)使用該函數(shù)的預(yù)期情況并執(zhí)行。

對(duì)我來(lái)說(shuō),這種方法有一些我非常喜歡的優(yōu)點(diǎn):

有助于思考無(wú)效和邊界情況,以及在這種情況下該如何處理。

避免對(duì)意外情況進(jìn)行意外和不必要的代碼處理

這樣使我更能清楚地處理每種情況

一旦使用這種方式,您就可以快速地瀏覽函數(shù)并理解流程和執(zhí)行,這通常遵循自頂向下的方法,即從無(wú)效的情況—>小情況—>預(yù)期情況。

更多信息:保鏢模式(the Bouncer Pattern)

2. 用對(duì)象字面量替代 Switch
// Switch
let createType = null;
switch (contentType) {
  case "post":
    createType = () => console.log("creating a post...");
    break;
  case "video":
    createType = () => console.log("creating a video...");
    break;
  default:
    createType = () => console.log("unrecognized content type");
}

createType();

// Object literal
const contentTypes = {
  post: () => console.log("creating a post..."),
  video: () => console.log("creatinga  video..."),
  default: () => console.log("unrecognized content type")
};

const createType = contentTypes[contentType] || contentTypes["default"];
createType();

接下來(lái)就是要移除 Switch。在寫(xiě) case 的時(shí)候我經(jīng)常會(huì)犯錯(cuò)誤,也會(huì)忘記寫(xiě) break,這會(huì)引起各種有趣的問(wèn)題。當(dāng)我編寫(xiě)代碼時(shí),switch語(yǔ)句并沒(méi)有體現(xiàn)太多的價(jià)值。

我更喜歡使用對(duì)象字面量,原因如下:

不用擔(dān)心 cacebreak。

更容易閱讀并快速了解正在發(fā)生的事情

對(duì)象字面量很容易寫(xiě)

代碼量少

3. 用一次循環(huán)處理兩個(gè)數(shù)組
const exampleValues = [2, 15, 8, 23, 1, 32];
const [truthyValues, falseyValues] = exampleValues.reduce((arrays, exampleValue) => {
  if (exampleValue > 10) {
    arrays[0].push(exampleValue);
    return arrays;
  }

  arrays[1].push(exampleValue);
  return arrays;
}, [[], []]);

這種模式?jīng)]什么特別的,我應(yīng)該早點(diǎn)意識(shí)到,但我發(fā)現(xiàn)自己過(guò)濾一組元素,以獲得所有匹配特定條件的元素,然后在另一種情況下要再做一次。這意味著對(duì)一個(gè)數(shù)組進(jìn)行兩次循環(huán),但我可以只做一次。

原來(lái)它有一個(gè)名字(bifurcate),我從 30secondsofcode.org借鑒過(guò)來(lái)的。如果你從未去過(guò)那個(gè)網(wǎng)站,我建議你去那里。有很多有用的信息和代碼。

我知道 reduce 可能會(huì)讓人望而生畏,也不太清楚會(huì)發(fā)生什么,但如果你能適應(yīng)它,在遍歷集合時(shí),您可以真正利用它來(lái)構(gòu)建所需的任何數(shù)據(jù)結(jié)構(gòu)。他們應(yīng)該叫它 builder 而不是 reduce

4. 不要用 foo 做變量
// bad
const foo = y && z;

// good
const isPostEnabled = isPost && postDateValid;

這看起來(lái)很明顯,但我相信我們都見(jiàn)過(guò)這樣做的代碼?;c(diǎn)時(shí)間,盡你最大的努力取個(gè)合適的名字。

這對(duì)于在職的專(zhuān)業(yè)人士或處于教育他人位置的人來(lái)說(shuō)尤其重要。應(yīng)該使用變量命名來(lái)幫助解釋?zhuān)诖a的上下文中發(fā)生了什么事情。

別人能夠在閱讀您的代碼時(shí),并大致可以理解要解決的問(wèn)題。

更多信息:The art of naming variables

5. 嵌套三元運(yùn)算符
// 之前
let result = null;
if (conditionA) {
  if (conditionB) {
    result = "A & B";
  } else {
    result = "A";
  }
} else {
  result = "Not A";
}
// 改造后
const result = !conditionA
  ? "Not A"
  : conditionB
  ? "A & B"
  : "A";

我承認(rèn),一開(kāi)始,使用嵌套三元運(yùn)算符的想法的確令人倒胃口。它看起來(lái)是一種編寫(xiě)條件的巧妙方式。

然后我開(kāi)始編寫(xiě)業(yè)務(wù)邏輯,發(fā)現(xiàn)自己使用了嵌套的 if else 語(yǔ)句和一些非??梢傻臈l件邏輯。

我認(rèn)為使用 ifelse更容易閱讀,因?yàn)樗鼈兪菍?shí)際的單詞,有語(yǔ)義化,但當(dāng)它們嵌套后,我開(kāi)始很難理解發(fā)生了什么,并在心里默默跟蹤所有情況。

我認(rèn)為這種模式取決于你、你的團(tuán)隊(duì)的偏好。我在代碼庫(kù)中也很好的使用這種方式。當(dāng)然使用三元運(yùn)算符具有兩面性,但就我個(gè)人而言,嵌套三元運(yùn)算符真的越來(lái)越吸引我了。

更多信息:Nested Ternaries are Great by Eric Elliot

如果對(duì)你有幫助,請(qǐng)關(guān)注【前端技能解鎖】:

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

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

相關(guān)文章

  • 想做就馬上做,喜歡就堅(jiān)持做 —— 我編程之路

    摘要:負(fù)責(zé)部門(mén)大大小小的事務(wù),大到方案制定與落實(shí),小到吃飯喝酒大保健。這都是我喜歡的表現(xiàn)行動(dòng)。想做就馬上做,喜歡就堅(jiān)持做希望年后的你們不會(huì)后悔你現(xiàn)在的決定有點(diǎn)胡說(shuō)八道了,大家多多體諒本文參與了我的編程之路計(jì)劃,歡迎正在閱讀的你也加入,一起分享。 爆照 showImg(https://segmentfault.com/img/bVtmco); 有女朋友,但是不能爆照。哈哈哈哈...... 目前...

    taowen 評(píng)論0 收藏0
  • JavaScript 函數(shù)式編程技巧 - 柯里化

    摘要:作為函數(shù)式編程語(yǔ)言,帶來(lái)了很多語(yǔ)言上的有趣特性,比如柯里化和反柯里化。在一些函數(shù)式編程語(yǔ)言中,會(huì)定義一個(gè)特殊的占位變量。個(gè)人理解不知道對(duì)不對(duì)延遲執(zhí)行柯里化的另一個(gè)應(yīng)用場(chǎng)景是延遲執(zhí)行。不斷的柯里化,累積傳入的參數(shù),最后執(zhí)行。作為函數(shù)式編程語(yǔ)言,JS帶來(lái)了很多語(yǔ)言上的有趣特性,比如柯里化和反柯里化。 這里可以對(duì)照另外一篇介紹 JS 反柯里化 的文章一起看~ 1. 簡(jiǎn)介 柯里化(Currying)...

    edgardeng 評(píng)論0 收藏0
  • 5個(gè)優(yōu)秀編碼挑戰(zhàn)幫你訓(xùn)練大腦,你敢嘗試嗎?

    摘要:可能是世界上最受歡迎的編碼挑戰(zhàn)網(wǎng)站,自十多年前首次推出以來(lái)它一直都是幾十萬(wàn)用戶(hù)的家。在線(xiàn)評(píng)測(cè)是成千上萬(wàn)的編碼挑戰(zhàn)的寶庫(kù),這讓你忙上幾個(gè)星期。允許用戶(hù)添加自己的挑戰(zhàn),組織編程競(jìng)賽,并爭(zhēng)取最高的排名。 原文地址:https://www.evget.com/article...每個(gè)人都知道編程正在成為幾乎每個(gè)行業(yè)的重要組成部分,它對(duì)組織的幫助和對(duì)大型系統(tǒng)的維護(hù)是獨(dú)一無(wú)二的,因此越來(lái)越多的人開(kāi)...

    makeFoxPlay 評(píng)論0 收藏0
  • 分享國(guó)外Python大咖如何在5個(gè)月內(nèi)找到一份薪水翻番工作

    摘要:六個(gè)月前,我辭掉了初級(jí)開(kāi)發(fā)者的工作,并去東南亞旅行了五個(gè)月。我的目標(biāo)了解更多資料我原本計(jì)劃去東南亞旅行個(gè)月,我也有信心在旅行回來(lái)后能夠找到一份更好的工作。申請(qǐng)工作我下一站旅行地是老撾境內(nèi)一個(gè)偏遠(yuǎn)的攀爬區(qū)。 金三銀四,謹(jǐn)以此文獻(xiàn)給所有正在準(zhǔn)備跳槽的你。 showImg(https://segmentfault.com/img/bVbhXVQ?w=640&h=640);六個(gè)月前,我辭掉了初...

    Anleb 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

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