日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

淺談JavaScript編程過程Function函數的幾種編程風格

來源: 責編: 時間:2023-08-14 22:00:49 335觀看
導讀想了解更多關于開源的內容,請訪問:51CTO 開源基礎軟件社區https://ost.51cto.com聲明JavaScript編程過程中函數是一個很有趣的點,JavaScript的函數與其他如:C、Java等語言有很大區別。對于從別的編程語言轉來的同學可能

Q4n28資訊網——每日最新資訊28at.com

想了解更多關于開源的內容,請訪問:Q4n28資訊網——每日最新資訊28at.com

51CTO 開源基礎軟件社區Q4n28資訊網——每日最新資訊28at.com

https://ost.51cto.comQ4n28資訊網——每日最新資訊28at.com

聲明

JavaScript編程過程中函數是一個很有趣的點,JavaScript的函數與其他如:C、Java等語言有很大區別。對于從別的編程語言轉來的同學可能會存在一定的“坑”,如function函數與=>函數的區別。function函數this關鍵字的占用等。Q4n28資訊網——每日最新資訊28at.com

在下文的案例中可能會使用這些知識,但我因為篇幅限制將不會對這些語法進行討論,只討論不同編碼方式的風格問題。Q4n28資訊網——每日最新資訊28at.com

測試環境申明

測試工具:DevEco Studio 3.1.1 Release 構建版本:3.1.0.501
測試平臺:HarmonyOS Api9 x86 虛擬機
測試語言:ArkTS(只測試JavaScript語法部分)Q4n28資訊網——每日最新資訊28at.com

簡介

因為JavaScript編程風格的靈活性。在一個簡單的求和函數、在JavaScript中可以使用很多不同的風格表示。
小編將會以函數式編程、面向對象編程、面向對象鏈式編程、申明式編程等多個不同的方式表示出來。
以下代碼僅作為拋磚引玉的效果,不代表實際開發代碼,也不代表當下所有的編碼風格,小編只談論我了解的幾種。在實際開發過程中每一種編碼風格也會存在更多的細分風格。Q4n28資訊網——每日最新資訊28at.com

過程式編程

代碼

// 過程式編程function add(...is: number[]) {  // 總和  let sum = 0;  // 求和  for (let index = 0; index < is.length; index++)     sum += is[index];  // 返回總和  return sum;}/** * 使用樣例 * console.log(add(11, 22, 33)); */

解讀

過程式編程是最簡單粗暴直接的編程方式,在所有主流編程語言中都支持使用過程式編程。Q4n28資訊網——每日最新資訊28at.com

過程式編程往往需要編程者擁有過硬的編程素養與對業務的深刻理解才可以保證代碼的持續性的可維護性、可擴展性。Q4n28資訊網——每日最新資訊28at.com

在業務不確定、實現邏輯經常變化、實現方案不穩定的部分不建議使用這種編碼風格,因為它很容易導致代碼失控。Q4n28資訊網——每日最新資訊28at.com

但是在算法實現上,筆者強烈建議各位使用這種編碼風格。它簡單可靠,可以節約編程者的許多心智。Q4n28資訊網——每日最新資訊28at.com

柯里化編程

代碼

// 自動柯里化機,可以自動把函數轉化為柯里化風格。function curry(fn) {  return function curried(...args) {    if (args.length >= fn.length) {      return fn.apply(this, args);    } else {      return function (...nextArgs) {        return curried.apply(this, args.concat(nextArgs));      }    }  }}// 獲得轉化后的函數export const curriedAdd = curry(add2);/** * 使用樣例 * console.log(curriedAdd(1)(2)); // 3 * console.log(curriedAdd(1, 2)); // 3 * console.log(curriedAdd(1)(2, 3)); // 3 */

解讀

柯里化編程有一個有特色的地方是函數的連續嵌套,這是前端開發非常熱門的一種編程方式。但小編極力反對這種編程方式具體原因有一下幾點:Q4n28資訊網——每日最新資訊28at.com

  • 柯里化編程雖然確實提高了開發的靈活性,但是它也降低了函數的可修改性,導致后續重構可能會牽一發而動全身。
  • 柯里化有一個很大的特點是函數嵌套,這不符合"never nester"不嵌套主義的編程理念。嵌套會大幅降低可讀性。

如果你真的打算使用柯里化的編程風格。小編建議你,寫全注釋!
一直寫到,我不需要讀你的函數,就知道你這個函數想做什么、有幾個參數、想返回什么、什么情況下會結束柯里化。Q4n28資訊網——每日最新資訊28at.com

面向對象編程風格函數

代碼

// 面向對象風格函數export function count() {  // 總和屬性  this._sum = 0;  // 添加方法方法  this.add = (i) => this._sum += i;  // 返回總和方法  this.get = () => this._sum;  // 返回構造對象  return this;}/*// 使用樣例* a = count();* console.log(a.add(10));* console.log(a.add(20));* a.add(30);* console.log(a.get());*/

解讀

相對于下文提到的鏈式編程、更加正統的面向對象風格。每一次運算結果清晰、類型明確,在現代化的編程工具幫助下,編程效率很高。Q4n28資訊網——每日最新資訊28at.com

面向對象風格函數、鏈式編程

代碼

//面向對象鏈式編程風格// 構造函數export function count2() {  // 總和屬性  this._sum = 0;  // 添加方法  this.add = (is) => ((this._sum += is), this);  // 求和方法  this.get = () => this._sum  // 返回構造對象  return this;}/*使用樣例console.log(count().add(10).add(20).add(30).get());*/

解讀

我之所以將它從面向對象單獨拎出來,是因為面向對象鏈式風格編程、基本可以代替柯里化編程。Q4n28資訊網——每日最新資訊28at.com

這種編程風格相對于柯里化更加扁平,可讀性更高,還具備一定的可拓展性。Q4n28資訊網——每日最新資訊28at.com

所以,如果在可以選的情況下為什么要使用柯里化呢?Q4n28資訊網——每日最新資訊28at.com

聲明式風格函數

代碼

// 聲明式風格函數export function sum3(is, get) {  let ans = 0;  // 這里可以使用任何實現方式,可以使用異步等方式實現  is.forEach(element => {    ans += element;  });  // 無論用任何方式實現,最后所有運算結束后都使用get函數作為回調。  get(ans)}

解讀

聲明式風格的函數特點不在于它代碼是怎樣的,而是在于它提供了哪些參數供開發者調用。開發者不在去關心實現的順序,如何實現、因為如何實現根本不重要,實現順序也不重要。你想要的只有答案,和得到答案。實現可以使用任何方式實現,內部可以使用多線程、異步、或者等等的方法實現。Q4n28資訊網——每日最新資訊28at.com

總結

現代編碼風格的演變,無非就是隨著需要處理問題的改變,產生了關注的點的改變。去改變開發者的注意力,讓開發者放置跟多的精力在自己的業務上。不是越先進的編碼風格就越好用,在合適的地方選擇合適的編碼風格才是最重要的。Q4n28資訊網——每日最新資訊28at.com

想了解更多關于開源的內容,請訪問:Q4n28資訊網——每日最新資訊28at.com

51CTO 開源基礎軟件社區Q4n28資訊網——每日最新資訊28at.com

https://ost.51cto.comQ4n28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-5705-0.html淺談JavaScript編程過程Function函數的幾種編程風格

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: DNS檢查如何幫助開發人員?

下一篇: 虛擬現實技術在工作場所的未來

標簽:
  • 熱門焦點
  • 石頭智能洗地機A10 Plus體驗:雙向自清潔治好了我的懶癌

    一、前言和介紹專為家庭請假懶人而生的石頭科技在近日又帶來了自己的全新旗艦新品,石頭智能洗地機A10 Plus。從這個產品名上就不難看出,這次石頭推出的并不是常見的掃地機器
  • 印度登月最關鍵一步!月船三號今晚進入環月軌道

    8月5日消息,據印度官方消息,月船三號將于北京時間今晚21時30分左右開始近月制動進入環月軌道。這是該探測器能夠成功的最關鍵步驟之一,如果成功將開始圍
  • JavaScript 混淆及反混淆代碼工具

    介紹在我們開始學習反混淆之前,我們首先要了解一下代碼混淆。如果不了解代碼是如何混淆的,我們可能無法成功對代碼進行反混淆,尤其是使用自定義混淆器對其進行混淆時。什么是混
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 講故事上個月我寫過一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,當時用的是 GDIView + WinDbg 把問題搞定,前者用來定位泄露資源,后者用來定位泄露代碼,后面有朋友反
  • 共享單車的故事講到哪了?

    來源丨??素斀浥c共享充電寶相差不多,共享單車已很久沒有被國內熱點新聞關照到了。除了一再漲價和用戶直呼用不起了。近日多家媒體再發報道稱,成都、天津、鄭州等地多個共享單
  • 拼多多APP上線本地生活入口,群雄逐鹿萬億市場

    Tech星球(微信ID:tech618)文 | 陳橋輝 Tech星球獨家獲悉,拼多多在其APP內上線了&ldquo;本地生活&rdquo;入口,位置較深,位于首頁的&ldquo;充值中心&rdquo;內,目前主要售賣美食相關的
  • 新電商三兄弟,“抖快紅”成團!

    來源:價值研究所作 者:Hernanderz 隨著內容電商的概念興起,抖音、快手、小紅書組成的&ldquo;新電商三兄弟&rdquo;成為業內一股不可忽視的勢力,給阿里、京東、拼多多帶去了巨大壓
  • 英特爾Xe-HP項目終止,將專注Xe-HPC/HPG系列顯卡

    據10 月 31 日消息報道,英特爾高級副總裁兼加速計算系統和圖形事業部總經理 表示,Xe-HP“ Arctic Sound” 系列服務器 GPU 已經應用于 oneAPI devcloud 云服
  • DRAM存儲器10月價格下跌,NAND閃存本月價格與上月持平

    10月30日,據韓國媒體消息,自今年年初以來一直在上漲的 DRAM 存儲器的交易價格僅在本月就下跌了近 10%,此次是全年首次降價,而NAND 閃存本月價格與上月持平。市
Top 主站蜘蛛池模板: 黄大仙区| 元朗区| 奈曼旗| 馆陶县| 泸溪县| 遵化市| 灵石县| 师宗县| 吉安县| 龙口市| 沧源| 辽中县| 九龙坡区| 芷江| 清镇市| 松桃| 绥滨县| 宁国市| 古丈县| 修文县| 礼泉县| 江川县| 化州市| 拜城县| 志丹县| 桂林市| 高要市| 南汇区| 南平市| 河东区| 庄浪县| 赤壁市| 望江县| 中卫市| 海南省| 苏州市| 巨野县| 英吉沙县| 江永县| 宁晋县| 蓝山县|