日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

編寫Linux實(shí)用程序的藝術(shù)( 三 )


有些程序可能合法地讀取一種格式的記錄,但是卻產(chǎn)生完全不同的輸出 。這樣的一個(gè)例子就是將輸入材料劃分為列的實(shí)用程序 。這樣一個(gè)實(shí)用程序可能將輸入中的行視為記錄,但是卻在輸出中的每行上產(chǎn)生多個(gè)記錄 。
并非每個(gè)實(shí)用程序都完全符合這個(gè)模型 。例如,xargs 不是接受記錄而是接受文件名作為輸入,并且所有的實(shí)際處理都是由其他程序完成的 。
通用化
嘗試將任務(wù)看作與您實(shí)際執(zhí)行的任務(wù)類似;如果您能找出這些任務(wù)的通用描述,那么最好嘗試編寫一個(gè)符合該描述的實(shí)用程序 。例如,如果您發(fā)現(xiàn)自己一天在根據(jù)詞法對(duì)文本排序,而另一天在根據(jù)數(shù)字對(duì)文本排序,那么考慮編寫一個(gè)通用排序?qū)嵱贸绦蛞苍S是有意義的 。
對(duì)功能進(jìn)行通用化有時(shí)會(huì)導(dǎo)致您發(fā)現(xiàn):某個(gè)看起來似乎像單個(gè)實(shí)用程序的程序,實(shí)際上卻是配合起來使用的兩個(gè)實(shí)用程序 。這很好 。編寫兩個(gè)設(shè)計(jì)良好的實(shí)用程序可能要比編寫一個(gè)丑陋的或復(fù)雜的實(shí)用程序更容易 。
做好一件事情并不意味著 僅僅 做一件事情 。它意味著處理一致但有用的問題空間 。許多人都使用 grep 。然而,它的大量效用在于執(zhí)行相關(guān)任務(wù)的能力 。grep 的各種選項(xiàng)完成許多小實(shí)用程序的工作,如果這些工作都由單獨(dú)的小實(shí)用程序來完成,最終會(huì)造成大量共享的、重復(fù)的代碼 。
這條規(guī)則,以及做好一件事情的規(guī)則,都是一個(gè)根本原理的必然結(jié)果:無論何時(shí)都要盡可能避免代碼重復(fù) 。如果您編寫半打程序,其中每個(gè)都對(duì)行排序,您最終可能必須六次修復(fù)六個(gè)類似的 bug,而不是去使用一個(gè)得到更好維護(hù)的 sort 程序 。
這是編寫實(shí)用程序的一部分,即把大多數(shù)工作添加到完成該實(shí)用程序的過程中 。您也許沒有時(shí)間在最初就完全通用化一個(gè)實(shí)用程序,但是當(dāng)您一直使用該實(shí)用程序就會(huì)獲得相應(yīng)的回報(bào) 。
有時(shí),向某個(gè)程序添加相關(guān)功能是很有用的,即使這個(gè)功能并不是用來完成完全相同的任務(wù) 。例如,當(dāng)運(yùn)行在終端設(shè)備上時(shí),對(duì)原始二進(jìn)制數(shù)據(jù)進(jìn)行完美打印的程序可能更為有用,因?yàn)樗菇K端進(jìn)入原始模式 。這樣使得測(cè)試涉及鍵盤映射、新鍵盤等的問題變得容易多了 。不確定為什么當(dāng)您按 delete 鍵時(shí)卻得到代字號(hào)(~)嗎? 這是弄清實(shí)際發(fā)送了什么內(nèi)容的容易途徑 。這并不是完全相同的任務(wù),但它足夠類似,因而可能成為一個(gè)附加特性 。
清單 2 中的 errno 實(shí)用程序就是通用化的很好例子,因?yàn)樗瑫r(shí)支持?jǐn)?shù)字和符號(hào)名稱 。
健壯
實(shí)用程序的穩(wěn)定性是很重要的 。容易崩潰或無法處理真實(shí)數(shù)據(jù)的實(shí)用程序不是有用的實(shí)用程序 。實(shí)用程序應(yīng)該能夠處理任意長(zhǎng)度的行、巨型文件,等等 。實(shí)用程序無法處理超過其內(nèi)存容量的數(shù)據(jù)集或許是可以容忍的,但是有些實(shí)用程序不是這樣;例如,sort 通過使用臨時(shí)文件,一般能夠?qū)Ρ绕鋬?nèi)存容量大得多的數(shù)據(jù)集排序 。
應(yīng)該盡量確保弄清楚您的實(shí)用程序可能要操作哪些數(shù)據(jù) 。不要簡(jiǎn)單地忽略無法處理的數(shù)據(jù)的可能性 。應(yīng)該檢查這種情況并診斷您的實(shí)用程序 。錯(cuò)誤消息越明確,您對(duì)用戶就越有幫助 。盡量給用戶提供足夠的信息,以便讓他們知道發(fā)生了什么情況以及如何解決 。當(dāng)處理數(shù)據(jù)文件時(shí),盡量準(zhǔn)確識(shí)別出不良的數(shù)據(jù) 。當(dāng)嘗試解析數(shù)字時(shí),不要簡(jiǎn)單地放棄;應(yīng)該告訴用戶您得到了什么數(shù)據(jù),而且如果可能的話,還應(yīng)該告訴用戶該數(shù)據(jù)位于輸入流中的哪一行上 。
作為一個(gè)很好的例子,請(qǐng)考慮 dc 的兩種實(shí)現(xiàn)之間的區(qū)別 。如果您運(yùn)行 dc /home ,其中一種實(shí)現(xiàn)會(huì)顯示“Cannot use directory as input!”而另一種實(shí)現(xiàn)只是無聲地返回,沒有錯(cuò)誤消息,也沒有不尋常的退出代碼 。當(dāng)您錯(cuò)誤地鍵入一個(gè) cd 命令時(shí),您更希望當(dāng)前路徑中有哪一種實(shí)現(xiàn)呢?類似地,如果您提供某個(gè)目錄中的數(shù)據(jù)流(或許是執(zhí)行 dc

推薦閱讀