干凈的代碼是改出來的


對於程序員來說,最終的也是最基本的目標就是能寫出一手好的代碼。隨着代碼量的增長,自身對什么是好的代碼的認識也漸漸有了不斷的調整。

 

1 注釋真的那么重要么?

最好的注釋就是代碼。這句話確實是沒有錯誤的。如果一個函數占用了一屏的版面,原因是由於各種各樣的注釋和解釋性的 // ** 等說明文檔,確實是比較惱人的。與其花過多的時間花精力在注釋和說明的編寫上面,不如花時間在變量名的編寫上面。

 

不能說沒有注釋的代碼一定是天書。在程序員界來說,其實有許多是大家默認的約定,以php為例子

如果說function getMsgBySsn($msgid, $ssn)

function getMsgs($msgids);

這樣的語句其實不用注釋完全是可以的

 

這說明好的變量名和函數名是最好的注釋!

在做一個完整的項目的時候,看代碼的過程中其實就是接受作者潛意識規約的過程。

如果一個大的項目,所有的數據結構都使用一致的變量名,$msg, $chg, 那么這些變量名就已經賦予了完整的定義了。

比如在一個項目中,在所有表示“消息”這個概念的地方,不管是參數還是返回值,完全都只使用$msg這么一個array()

那么,雖然我沒有在每個引用的地方加大篇幅說明$msg中的key和value是什么,只要讀者追着看到這樣的函數:

function getMsg()

{
    $msgid = self::getMsgid()
    return array(

	‘msgid’ => $msgid,
	'ssn'      => self::getSsn($msgid),
	'title'      => self::getTitle($msgid),
   );

} 

是不是/** Msg包含 msgid,ssn,title **/這樣的注釋更好呢?

 

當然,好代碼在變量都一定會遵循的規則是:一個項目一個意思的東西,一定只有一個規定的變量名

好的代碼會由於一個或兩個變量名起的不對而不惜一次一次的svn commit,最后出現的代碼一定不會讓你失望的

 

2 代碼的簡潔性

你總是能感嘆到為什么有的人寫的代碼是這么讓人舒服。

讓代碼簡單並不是一件容易的事情。這需要相當的代碼能力才能有這樣的能力。

比如這么一個函數,明明可以更簡單的:

function example()
{
	$iMsgid = $this->getMsgid();
	$sTitle = $this->genTitle($iMsgid);
	$sContent = $this->genContent($iMsgid);
	$result = array(
		'msgid' => $iMsgid,
		'title'     => $sTitle,
		'content' => $sContent,
	);
	return $result;
}

我寧可選擇寫成這樣:

function example()
{
	$msgid = $this->getMsgid();
	$title = $this->genTitle($msgid);
	$content = $this->genContent($msgid);
	return compact('msgid', 'title', 'content');
}

不妨能不能用更少的代碼行數寫出一樣功能性的代碼。

代碼的量一旦減少,給的信息就是:犯錯的概率也更少了。

 

 

最近在新項目組有幾個感想:

1

以前經常覺得有很多函數必須要很詳細的參數說明什么的,其實大都都是可以使用OO的方法來使代碼更優美

比如function($msgid, $title, $content, $ssn)

為什么不是使用function($msg)呢?

開始我認為,$msg這樣傳入並不知道里面包含的key和value是什么,對代碼的閱讀性造成障礙

但是后來想想,其實這是因為我在閱讀到這個函數的時候並沒有$msg是一個對象的概念,也就是前面的代碼並沒有在人的潛意識里面栽種下這個對象的概念。那么前面的代碼應該改了…………

 

2 好的代碼不是一次性寫出來的,一定是一次一次svn commit堆積出來的,你會看到某大牛為了一個空格,一個文件名是使用cron還是shell, 一個變量名(比如getMsg($Msgid) => getMsg($msgid))而進行一次又一次的改動

最后得出的代碼真的是“干凈”的!

 

    ----------------------

    作者:yjf512(軒脈刃)

    出處:http://www.cnblogs.com/yjf512/

    本文版權歸yjf512和cnBlog共有,歡迎轉載,但未經作者同意必須保留此段聲明


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM