您现在的位置是:Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款 > 

01 CUS在外貿中是什么意思(保存失敗 Value at 0 is null. 什么意思?)

Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-04-30 03:09:15【】3人已围观

简介保存失敗Valueat0isnull.什么意思?‍作者|聶曉龍(率鴿)01前言前天回家路上,有輛車強行插到前面的空位,司機大哥暴躁地拍著方向盤吐槽道“加塞最可惡了”,我問“還有更可惡的嗎”

保存失敗 Value at 0 is null. 什么意思?

作者 | 聶曉龍(率鴿)

01 前言

前天回家路上,有輛車強行插到前面的空位,司機大哥暴躁地拍著方向盤吐槽道“加塞最可惡了”,我問“還有更可惡的嗎”,司機大哥淡定說道“不讓自己加塞的”。似乎和我們很類似,我們程序員屆也有這 2 件相輔相成的事:最討厭別人不寫注釋,更討厭讓自己寫注釋。

一段糟糕的代碼,往往大家最低的預期是把注釋寫清楚,最合理的做法通常應該對代碼做優化。如果我們將代碼真正做到了優秀,我們是否還需要注釋?

02 注釋的意義

;

**

; * RAMinit Release 2.0

*

; * Copyright (c) 1989-1994 by Yellow Rose Software Co.

*

; * Written by Mr. Leijun

*

; * Press HotKey to remove all TSR program after this program

*

;

**

; Removed Softwares by RI:

; SPDOS v6.0F, WPS v3.0F

; Game Busters III, IV

; NETX ( Novell 3.11 )

; PC-CACHE

; Norton Cache

; Microsoft SmartDrv

; SideKick 1.56A

; MOUSE Driver

; Crazy (Monochrome simulate CGA program)

; RAMBIOS v2.0

; 386MAX Version 6.01

注釋是對代碼的解釋和說明,本質目的是為了增強程序的可讀性與可解釋性。注釋會隨著源代碼,在進入預處理器或編譯器處理后會被移除。這是雷布斯 1994 年寫的一段 MASM 匯編代碼,注釋與代碼整體結構都非常清晰。如果說代碼是為了讓機器讀懂我們的指令,那注釋完全就是為了讓我們了解我們自己到底發出了哪些指令。

03 爭議與分歧

注釋的起源非常早,我們甚至已經查閱不到注釋的由來,但現在任何一種語言,甚至幾乎任何一種文本格式都支持各式各樣的注釋形式。

04 壞代碼的救命稻草

The proper use of 買粉絲ments is to 買粉絲pensate for our failure to express ourself in 買粉絲de. -- Robert C. Martin 《Clean Code》 譯:注釋的恰當用法是彌補我們在用代碼表達意圖時遭遇的失敗

Clean Code 的作者 Robert C. Martin 可以說是注釋的極力否定者了,他認為注釋是一種失敗,當我們無法找到不用注釋就能表達自我的方法時,才會使用注釋,任何一次注釋的使用,我們都應該意識到是自己表達能力上的失敗。

PH&V 的系統架構師和負責人 Peter Vogel,同樣也是一名堅定的注釋否定著,他發表了一篇文章 why 買粉絲menting 買粉絲de is still bad 來表述為代碼添加注釋在某種程度上可能是必要的,但確實沒有價值。

事實上,我們也確實經歷著非常多無價值的注釋,以及完全應由代碼來承擔解釋工作的“職能錯位”的注釋。

01 零注釋

糟糕的代碼加上完全不存在的注釋,我喜歡稱呼它們為『我和上帝之間的秘密』,當然過 2 個月后也可以稱之為『上帝一個人的秘密』。

壓垮程序員最后一根稻草的,往往都是零注釋。可以沒有文檔,可以沒有設計,但如果沒有注釋,我們每一次閱讀都是災難性的。當我們抱怨它一行注釋都沒有時,其實我們是在抱怨我們很難理解代碼想要表達的含義,注釋是直接原因,但根本原因是代碼。

零注釋往往和壞代碼一起生活,“沒有注釋”的吐槽,其實本質上直擊的是那堆歪七扭八的英文字母,到底它們想表達什么!

02 無用注釋

/

**

* returns the last day of the month

* @return the last day of the month

*/

public Date getLastDayOfMonth(Date date) {

Calendar calendar = new GregorianCalendar();

calendar.setTime(date);

calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));

return calendar.getTime();

}

03 代碼優于注釋

"Comments Do Not Make Up for Bad Code" -- Robert C.Martin 《Clean Code》 譯:注釋不能美化糟糕的代碼

當需要為一段代碼加上注釋時,說明代碼已經不能很好的表達意圖,于是大家開始為這段代碼添加注釋。Robert C.Martin 在 Clean Code 中提出一個觀點:注釋不能美化糟糕的代碼。能用代碼表達的直接用代碼表達,不能用代碼表達的,你再想想,如何能用代碼表達。

復雜的代碼最直接的表現就是不夠直觀、難以理解,加上注釋后往往會清晰很多,但你是愿意看這段代碼:

// 判斷是否活躍用戶

if((customer.getLastLoginTime().after(dateUtils.minusDays(new Date(),15)) && customer.getCommentsLast30Days() > 5)

|| orderService.買粉絲untRecentDaysByCustomer(customer,30) > 1)

還是這段代碼?

if(customer.isActive())

糟糕代碼的存在,通常是我們寫注釋的常見動機之一。這種試圖粉飾可讀性差的代碼的注釋稱之為『拐杖式注釋』,即使大名鼎鼎的 JDK,也存在這樣的拐杖式注釋。

public synchronized void setFormatter(Formatter newFormatter) {

checkPermission();

// Check for a null pointer

newFormatter.getClass();

formatter = newFormatter;

}

這是取自 JDK java.util.logging.Handler 類的 setFormatter 方法,作者為了不讓空指針異常下傳,提前做一次空指針檢查。沒有這段注釋我們完全不知道游離的這句 newFormatter.getClass() 到底要做什么,這段注釋也充分表達了作者自己也知道這句代碼難以理解,所以他加上了注釋進行說明。但我們完全可以用 Objects.requireNonNull() 來進行替代。同樣的代碼作用,但可讀性可理解性大不一樣,JDK 里的這段代碼,確實讓人遺憾。

04 注釋否定論

"If our programming languages were expressive enough, or if we had the talent to subtly wield those languages to express our intent, we would not need 買粉絲ments very much—perhaps not at all." -- Robert C.Martin 《Clean Code》 譯:若編程語言足夠有表達力,或者我們長于用這些語言來表達意圖,就不那么需要注釋--也許根本不需要

通過代碼進行闡述,是注釋否定論的核心思想。當你花功夫來想如何寫注釋,讓這段代碼更好的表達含義時,我們更應該重構它,通過代碼來解釋我們的意圖。每一次注釋的編寫,都是對我們代碼表達能力上的差評,提升我們的歸納、表達、解釋能力,更優于通過注釋來解決問題。當代碼足夠優秀時,注釋則是非必須的。并且需求在不斷調整,代碼一定會隨之變動,但注釋可能慢慢被人遺忘,當代碼與注釋不匹配時,將是更大的災難。

05 軟件設計的烏托邦

01 好吧你很優秀

曾經我的確對優秀的代碼不斷鉆研,對代碼本身所蘊含的能量無比堅信。如同當科學代替鬼神論走上歷史舞臺時,即使存在有科學解釋不了,我們依然堅信只是科學還需要發展。當代碼別人無法理解時,我會認為是我表述不夠精準,抽象不夠合理,然后去重構去完善。

有一次給老板 review 代碼,當時老板提出,“你的代碼缺缺少注釋”,我說不需要注釋,代碼就能自解釋。于是老板現場讀了一段代碼,“query-customer-list 查詢客戶”、“transfer-customer-to-sales 分發客戶到銷售”、“check-sales-capacity 檢查銷售庫容”,每一個類每一個函數,一個單詞一個單詞往外蹦時,你會發現好像確實都能讀懂,于是老板回了一個“好吧”。

02 美麗的烏托邦

"'good 買粉絲de is self-documenting' is a delicious myth" -- John Ousterhout《A Philosophy of Software Design》 譯:‘好的代碼自解釋’是一個美麗的謊言

在軟件設計中,總有一些軟件工程師所堅信的詩和遠方,有的是大洋彼岸的美好國度,有的或許是虛無縹緲的理想烏托邦。John Ousterhout 教授在 A Philosophy of Software Design 中提到一個觀念,‘好的代碼自解釋’是一個美麗的謊言。

我們可以通過選擇更好的變量名,更準確的類與方法,更合理的繼承與派生來減少注釋,但盡快如此,我們還是有非常多的信息無法直接通過代碼來表達。這里的信息,或許不單單只是業務邏輯與技術設計,可能還包括了我們的觀感,我們的體驗,我們的接納程度以及第一印象帶來的首因效應。

06 好代碼的最佳僚機

You might think the purpose of 買粉絲menting is to 'explain what the c

很赞哦!(6)

Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款的名片

职业:程序员,设计师

现居:河北省张家口桥东区

工作室:小组

Email:[email protected]