成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一些編程上的策略

開發(fā) 前端 后端
這里將向大家分享的是一些我對編程的思考總結,這些經(jīng)驗在我畢生編程生涯中曾幫助我在無數(shù)的事情上作出正確的決定。這些編程策略有些是很顯然的,但實際編程中往往被人們忽略。
[[76344]]

這里將向大家分享的是一些我對編程的思考總結,這些經(jīng)驗在我畢生編程生涯中曾幫助我在無數(shù)的事情上作出正確的決定。這些編程策略有些是很顯然的,但實際編程中往往被人們忽略。

下面的例子是用Python寫的,但這些概念適用于任何編程語言。

1. 異常處理和if-else語句的用法

編程的時候,有些邊界情況我們需要確保能正確的處理。對這些情況我們通常的做法是使用if語句來檢查是否是這種情況。當程序運行時,這些檢查動作每次都會執(zhí)行,來驗證是否是遇到了這些特殊場景。如果你使用的編程語言有異常處理系統(tǒng)——你可以利用它們來處理這些邊界情況。

C語言里沒有異常處理系統(tǒng)。它依賴于錯誤碼來通知調用的函數(shù)發(fā)生了什么。返回0是成功,負數(shù)則表示失敗。所以,調用者需要用if-else來檢查返回碼。沒有其它的方法。

但對于那些有異常處理系統(tǒng)的編程語言,我們可以很好的利用它們。但我們需要使用if-else配合異常處理機制來處理這些邊界情況或錯誤。

一個簡單的例子

想象有一個后臺運行程序,它在啟動和停止時都會檢查一個pid文件。它會調用下面的函數(shù)來獲取pid。主調函數(shù)使用異常捕獲來確保程序邏輯不會出現(xiàn)意外。

下列情況時這個函數(shù)會被調用 -

  1. 這個后臺程序啟動時
  2. 這個后臺程序停止時

每種情況時主函數(shù)要做的事 -

啟動時

  1. 如果pid文件存在,意味著后臺程序中運行。這個程序自己會停止,會提示有另一個實例已經(jīng)在運行。
  2. 讀取這個文件時如果返回錯誤,這說明沒有pid文件,說明這個程序沒有運行(除非讀取文件時發(fā)生意外)。這時就創(chuàng)建pid文件,啟動程序。

 

 

 

 

停止時

  1. 如果發(fā)現(xiàn)了pid文件,停止前刪除這個文件。如果沒有發(fā)現(xiàn)pid文件,那該怎么辦?這說明后臺程序根本沒有運行。報告給用戶。
  2. 下面就是我們上面提到的主程序會調用的獲取pid的代碼。注意我們使用異常捕獲和if-else語句來處理這些情況。

方法 1

  1. # 這種使用異常的方式不好,屬于被動防御式編程。  
  2. def read_pid_file():  
  3.  
  4.     try:  
  5.         f = open('daemon.pid''r')  
  6.  
  7.         pid = int(f.read())  
  8.         return pid  
  9.  
  10.     # 沒有發(fā)現(xiàn)文件,也可能是IO錯誤  
  11.     except IOError:  
  12.         raise "Faild to Read file" 
  13.  
  14.     # 有人在文件里放的不是數(shù)字,這能怪誰?  
  15.  
  16.     except ValueError:  
  17.         raise WrongPID  
  18.  
  19.     # 捕獲所有其它異常  
  20.     # 這個有點像  
  21.  
  22.     # 過度使用異常處理  
  23.     except Exception:  
  24.         raise SomeUnKnownError 

方法 2

  1. # 使用If/else方法。主調函數(shù)需要檢查無返回值情況  
  2. # 異常情況  
  3.  
  4. def read_pid_file():  
  5.     if os.path.exists('daemon.pid'):  
  6.  
  7.         try:  
  8.             f = open('file.pid''r')  
  9.  
  10.             # 對于支持異常處理機制的編程語言,  
  11.             # 如果有操作失敗,拋出異常  
  12.             # 這里跟C語言有區(qū)別  
  13.             return int(f.read())  
  14.  
  15.         except (ValueError, IOError):  
  16.             pass 

方法 3

  1. # 事實上,我們知道可能會發(fā)生什么,如果pid讀文件  
  2.  
  3. # 文件時有錯誤,主調函數(shù)會捕獲它。  
  4. # 我們使用的編程語言有異常處理機制。  
  5. # 我們可以在這里利用上。  
  6.  
  7. def read_pid_file():  
  8.     f = open('daemon.pid''r')  
  9.  
  10.     return int(f.read()) 
我喜歡方法 3,因為它在大多數(shù)情況下都可行。如果極少的情況下出現(xiàn)了錯誤,主調函數(shù)里的異常處理會捕獲這種情況。

兩種錯誤處理方式都是我們保證程序無誤的重要途徑。

 

 

何時使用if-else語句

當我們知道可能會有什么情況發(fā)生時。也許會分很多種情況。(C語言的錯誤碼機制就是一個很好的例子)。
我們通常是基于輸入值使用if-else來控制執(zhí)行路徑。
何時使用異常處理
你想捕獲一個異常,或者捕獲一些異常但自己不處理,交給系統(tǒng)去處理。支持異常機制的編程語言會在最頂層捕獲這些異常,并報告給用戶。

2. 代碼優(yōu)化

找出程序的主執(zhí)行路徑——你的程序大部分時間都執(zhí)行這些模塊。首先優(yōu)化這部分代碼,但也不要在程序實現(xiàn)的***次迭代中進行優(yōu)化。那些處理邊界情況或失敗/異常處理的地方,這部分代碼不需要優(yōu)化,除非它們引起了值得注意的性能問題。

3. 代碼行數(shù)

不要試圖壓縮代碼行數(shù),但你應該壓縮每個任務的代碼行數(shù)。寫簡單的函數(shù)/方法,每個函數(shù)/方法只完成一個任務,而不是多個,除非你有很好的理由。

人們通常喜歡為了減少代碼行數(shù)而在一個代碼片段里完成大量的工作,這會導致代碼異常復雜,這種代碼試圖支持各種情況的處理,而大多時候只是其中的一種情況會發(fā)生。多余的情況處理會給執(zhí)行造成成本。

4. 多學習操作系統(tǒng)和編譯器知識

了解機器,理解機器內部里事情是如何工作的。這將會幫助理解各種不同瓶頸產(chǎn)生的原因。這能幫助你找到代碼運行時為什么會發(fā)生奇怪的現(xiàn)象。

5. 運用管理技術

在編程中運用管理技術。針對不同目的使用正確的工具。我有自己的喜好,但我努力克服。

6. 忽略上面所有的策略

有時候事情就是這樣!而且這樣并不一定是壞事。我們編程時經(jīng)常這樣——當我們開發(fā)一個新原型,或針對一個特殊問題找一個解決方案,這時我們如何實現(xiàn)并不重要,重要的是在定型后我們如何完成它們。我想大多時候我們都是這樣做的。誰都知道,先打草稿,后動真的。

請在評論里留下你對這些觀點的想法。

英文原文:Some Programming Strategies

譯文鏈接:http://www.aqee.net/some-programming-strategies/

 

責任編輯:林師授 來源: 外刊IT評論
相關推薦

2013-07-02 09:43:02

編程策略

2011-03-28 16:59:16

nagios監(jiān)控服務器

2020-02-04 18:44:37

HDFS流程策略

2021-04-09 10:26:43

Python編程技術

2021-10-13 07:48:23

Options模式編程

2018-07-23 15:55:28

協(xié)議自定義viewSwift

2011-08-31 10:54:25

Java性能

2018-06-08 08:50:35

編程語言并發(fā)編程

2011-09-13 09:41:59

Python

2012-12-04 17:13:21

2014-03-19 15:41:21

編程語言編程規(guī)則

2014-12-26 09:56:50

編程語言

2015-03-30 11:21:27

編程編程反思

2020-12-04 09:11:45

Python加密文件爆破字典

2018-03-15 09:23:24

編程語言程序員Java

2021-06-15 07:10:14

JavaScript異步編程

2018-08-10 10:45:35

編程語言Python程序員

2011-07-22 09:58:18

Oracle數(shù)據(jù)庫優(yōu)化策略

2013-03-29 13:17:53

XCode調試技巧iOS開發(fā)

2011-07-13 09:13:56

Android設計
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 九九亚洲 | 亚洲国产精品一区二区www | 久久6| 亚洲成av人片在线观看 | 国产高清在线精品一区二区三区 | 亚洲一区国产精品 | 欧美视频二区 | 欧美在线a | 国产一级一片免费播放 | 国精产品一区二区三区 | 国产欧美在线播放 | 一区二区播放 | 精品久久久久久 | 亚洲精品一区二区三区在线 | 一级毛片免费完整视频 | 一级大片| 国产精品久久久久久久久免费桃花 | 欧美日韩免费视频 | 久久99精品久久久久久国产越南 | 久久伊人精品 | 亚洲天堂中文字幕 | 超碰日韩 | 日韩av免费在线观看 | 九久久 | 综合久| 黄色片大全在线观看 | 精精精精xxxx免费视频 | 亚洲成人精品视频 | 中文字幕国产一区 | 国产精品视频免费观看 | 久久久久久久久久爱 | 美女黄色在线观看 | 精品视频在线观看 | 久久久久中文字幕 | 国产成人精品久久二区二区91 | 成人性视频免费网站 | 亚洲欧洲在线视频 | 性高湖久久久久久久久3小时 | 国产精品a一区二区三区网址 | 国产精品免费一区二区三区四区 | 国产激情视频网站 |