自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

命令式和聲明式代碼有什么區(qū)別

開發(fā) 前端
在日常工作中,你應(yīng)該努力實(shí)現(xiàn)什么樣的編碼方式?首先讓我們來談?wù)勀阍谡麄€(gè)編程生涯中想要避免的一種編碼風(fēng)格,無論你只是為自己或?yàn)樗司帉懘a。

你的日常工作中應(yīng)該使用哪種編碼風(fēng)格?讓我們討論一下你應(yīng)該選擇哪個(gè)以及為什么。

在日常工作中,你應(yīng)該努力實(shí)現(xiàn)什么樣的編碼方式?

這是一個(gè)在編程中不常被問到的問題,但這是一個(gè)重要的問題。

首先讓我們來談?wù)勀阍谡麄€(gè)編程生涯中想要避免的一種編碼風(fēng)格,無論你只是為自己或?yàn)樗司帉懘a。

什么是命令式和聲明式代碼?

我們可以把我們寫代碼的方式歸為傾向于兩種風(fēng)格中的一種。

要說明的是,一個(gè)人的代碼從來不會(huì)嚴(yán)格地歸為一類或另一類,但它是一種有用的方式,指的是我們的代碼方式,根據(jù)誰或什么最適合。

編寫的代碼有兩種,稱為命令式代碼或聲明式代碼。這些聽起來很復(fù)雜的詞代表了非常簡(jiǎn)單的概念:命令式代碼是指我們編寫的代碼更適合計(jì)算機(jī),而聲明式代碼是指對(duì)人更容易讀懂的代碼。

更具體地說,命令式代碼是指我們告訴JavaScript(或任何你正在編碼的語言)要做什么以及如何做。

命令式代碼以及為什么應(yīng)避免使用它

命令式編碼是你應(yīng)該避免的一種樣式。

假設(shè)我們有很多人想寫一個(gè)生日派對(duì)的邀請(qǐng)。先創(chuàng)建我們的人員列表。

接下來,我們也要保存每個(gè)書面邀請(qǐng),因此我們?yōu)橐胖玫难?qǐng)函(invitations)創(chuàng)建一個(gè)邀請(qǐng)數(shù)組。

  1. const people = [‘Doug’, ‘Fred’, ‘Jane’]; 
  2. const invitations = []; 

你可能已經(jīng)猜到了,我們需要遍歷此數(shù)組以實(shí)現(xiàn)我們的目標(biāo)。首先,我們將按照J(rèn)avaScript生命周期中大部分時(shí)間都需要使用的方式:使用for循環(huán)。如下:

  1. for (let i = 0; i < people.length; i++) { 
  2.   invitations[i] = `Hi ${people[i]}, come to my party!`; 

根據(jù)我提到的步驟,我們要對(duì)一個(gè)數(shù)組進(jìn)行循環(huán)(迭代),得到每一個(gè)元素,一個(gè)人的名字,我們將其添加到一個(gè)消息(上面的字符串)中,然后將其添加到一個(gè)新的數(shù)組中。

但是代碼講的是同樣的故事嗎?

如果我們要讀這段代碼,我們是將一個(gè)變量 i 設(shè)置為0,檢查它是否小于數(shù)組的當(dāng)前長(zhǎng)度,在 i 上加1,將數(shù)組的第 i 個(gè)值賦值為一個(gè)字符串,并將其放在新數(shù)組的相同索引中。

這些都是必須的,我們告訴JavaScript做什么和怎么做。所有這些代碼都是正確的。

如果我們運(yùn)行它,我們將收到所有消息,就像我們想要的一樣。

然而,你對(duì)這段代碼的第一直覺(就像我們?cè)S多人第一次看到for循環(huán)一樣)可能是它看起來不太對(duì)。

盡管如此,它無疑是該語言生命周期中最流行的遍歷數(shù)組的方式。然而,閱讀和記憶是必要的和具有挑戰(zhàn)性的。

聲明式代碼以及為什么要以聲明式風(fēng)格編寫

如果我們以聲明性的方式編寫它,那會(huì)是什么樣?

聲明式代碼則不同。正如名稱所示,我們用它來聲明我們想要完成的內(nèi)容,JavaScript會(huì)完成它——就這么簡(jiǎn)單。

換句話說,它對(duì)我們?nèi)祟愂强勺x的,而不僅僅是對(duì)計(jì)算機(jī)。事實(shí)上,它對(duì)其他開發(fā)者的可讀性正是我們?cè)噲D用更多的聲明式寫作所追求的。

讓我們用一種你可能一開始就想使用的風(fēng)格重寫我們的代碼,如果你熟悉很多JavaScript有用的數(shù)組方法的話。

這是為一系列人員創(chuàng)建一系列邀請(qǐng)的一種(多種)聲明式方法。

  1. const invitations = people.map((person) => `Hi ${person}, come to my party!`); 

這一切都在一條線上,但同時(shí)也更容易理解。它更加簡(jiǎn)潔,易于書寫(和記憶),同時(shí)又非常清晰。

這就是追求聲明式代碼風(fēng)格所能提供的。

與第一個(gè)例子不同的是,我們不需要?jiǎng)?chuàng)建任何混亂的變量(如 i),也不需要告訴JavaScript如何通過數(shù)組。我們只需對(duì)數(shù)組進(jìn)行映射(或迭代),將每個(gè)人的名字添加到我們的邀請(qǐng)函中,然后返回給我們。

最后

那么我們想用哪種方式編寫代碼?

讓我們回顧一下我們的示例:特別是當(dāng)我們第一次查看這段代碼時(shí),什么更容易理解?什么更令人難忘?

隨著時(shí)間的推移,我們都不得不回顧如何編寫for循環(huán),因?yàn)檫@是必要的。為了我們和其他人,聲明式風(fēng)格是我們想要追求的。這看似一個(gè)令人困惑的概念,但是我們之所以要區(qū)分,是因?yàn)橐粋€(gè)重要原因:我們編寫代碼的方式應(yīng)該是為閱讀和使用代碼的人量身定做的,而不是計(jì)算機(jī)。

仔細(xì)檢查和重讀你的代碼,以確保其可讀性和理解性,就像你寫一篇文章一樣,你希望每個(gè)人都能理解你的代碼,甚至是非程序員,并努力使你的代碼更具聲明式的做法。

它不僅能幫助周圍的人,還能幫助你自己,尤其是當(dāng)你在多年后重新審視代碼時(shí),你早已忘記了它的作用。

原文:

https://medium.com/code-artistry/what-is-the-difference-between-imperative-and-declarative-code-7273681effc4

 

責(zé)任編輯:趙寧寧 來源: 今日頭條
相關(guān)推薦

2020-12-17 07:59:46

聲明式代碼命令式代碼代碼

2009-06-22 14:59:51

AOP實(shí)現(xiàn)原理聲明式編程命令式編程

2018-04-03 10:10:45

UPS后備式在線式

2025-04-09 08:15:00

分布式系統(tǒng)微服務(wù)架構(gòu)

2023-10-07 00:26:09

2020-10-29 18:53:38

HDFSNameNodeDataNode

2013-06-27 09:31:37

聲明式編程命令式編程編程

2021-03-03 14:09:57

API命令式聲明式

2024-01-05 08:31:08

C語言

2022-01-12 09:31:18

Go 變量方式

2020-11-14 15:38:38

JavaScript代碼技術(shù)

2022-12-14 17:26:43

2020-03-09 20:56:19

LoRaLoRaWAN無線技術(shù)

2018-07-13 17:05:22

SQLMySQL數(shù)據(jù)庫

2023-10-13 15:48:17

OT系統(tǒng)

2022-06-06 14:53:02

LoRaLoRaWAN

2022-09-07 18:32:57

并發(fā)編程線程

2020-11-09 14:07:53

PyQtQt編程

2022-09-08 18:38:26

LinuxWindowsmacOS

2009-06-22 09:01:57

Spring聲明式事務(wù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)