開心一笑
【兒子和爸爸看電視,劇中男主角跪下向女主角求婚。 兒子好奇地問:“爸爸,你向媽媽求婚時有沒有下跪?” 爸爸:“沒有。你媽媽說以后跪的機會多著呢,不差這一次。】
提出問題
代碼整潔之道對函數(shù)整潔的幾點總結和觀點????
解決問題
下面是看《代碼整潔之道》后,自己總結的幾點關于函數(shù)整潔之道的總結:
1)Function should do one thing. They should do it well. They should do it only. "
(函數(shù)只應該做一件事情,把一件事情做好,而且只由它來做這一件事情);
例:
/**
* 只做好一件事
*/
public void onlyDoOneThing(){
}
2)短小,以行數(shù)來要求似乎有些苛刻,一個行數(shù)在20行以內被稱為小函數(shù),或是要在5行以內才是小函數(shù),有一些極端.
3)函數(shù)中的縮進層級不應該多于一層或者兩層;
例:
/**
* 只做一件事
*/
public void onlyDoOneThing(){
String ay = "";
Boolean flag = true;
/** 第一層級 不錯 **/
if(flag){
/** 第二層級 還能接受 **/
if(flag){
/** 第三層級 沒法接受了 **/
if(flag){
}
}
}
}
4)函數(shù)參數(shù):應該少于2個,如果函數(shù)超過2元:應該將其中的某些參數(shù)封裝成類;
例:
/**
* 只做一件事
* @param arg1 參數(shù)1
*/
public void onlyDoOneThing(String arg1){
System.out.println("一個參數(shù),不錯!!!");
}
/**
* 只做一件事
* @param arg1 參數(shù)1
* @param arg2 參數(shù)2
*/
public void onlyDoOneThing(String arg1,String arg2){
System.out.println("兩個參數(shù),能接受和理解!!!");
}
/**
* 只做一件事
* @param arg1 參數(shù)1
* @param arg2 參數(shù)2
* @param arg3 參數(shù)3
* @param arg4 參數(shù)4
*/
public void onlyDoOneThing(String arg1,String arg2,String arg3,String arg4){
System.out.println("3個或3個以上的參數(shù),沒法接受!!!");
}
解決方法
Class XXX{
private String arg3;
privte String arg4;
//省略set get方法
}
5)一個函數(shù)要么做一件事(指令),要么回答一件事(詢問)
package com.hwy.test;
/**
* 代碼整潔之道
* Created by Ay on 2016/7/11.
*/
public class CodeCleanTest {
public static void main(String[] args) {
/** 約會 **/
engagementWithMe();
/** 表白(詢問) **/
boolean isMerryMe = canMerryMe();
if(isMerryMe){
/** 結婚(指令) **/
getMarried();
}
}
/**
* 約會
*/
public static void engagementWithMe(){
System.out.println("約會");
}
/**
* 表白
*/
public static boolean canMerryMe(){
return true;
}
/**
* 結婚
*/
public static void getMarried(){
System.out.println("結婚");
}
}
6)使用描述性的名字,函數(shù)名字:動/名詞形式;
7)分離try/catch塊:集中在一個函數(shù)中;
例:
package com.hwy.test;
/**
* 代碼整潔之道
* Created by Ay on 2016/7/11.
*/
public class CodeCleanTest {
public static void main(String[] args) {
try{
/** 約會 **/
engagementWith();
}catch (Exception e){
logError(e);
}
}
/**
* 約會
*/
public static void engagementWith(){
System.out.println("約會");
}
/**
* 處理異常
* @param e
*/
public static void logError(Exception e){
System.out.println(e.getMessage());
}
}
8)使用異常代替返回錯誤碼:這樣錯誤代碼可以從主路徑代碼中分離出來,避免嵌套;
/**
* 更新決策
* @param dePolicyDecisionDTO
* @return
* @throws IllegalAccessException
* @throws NoSuchMethodException
* @throws InvocationTargetException
*/
@Override
public DePolicyDecisionDTO update(DePolicyDecisionDTO dePolicyDecisionDTO) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {
DePolicyDecision exists = policyDecisionRepository.findByMatterNameAndType(dePolicyDecisionDTO.getMatterName(), dePolicyDecisionDTO.getType());
if(exists!=null&&!exists.getId().equals(dePolicyDecisionDTO.getId())){
/** 這里使用異常,錯誤代碼可以從主路徑代碼中分離出來,BusinessExceptio是公司自己封裝的異常類 **/
throw new BusinessException(ErrorCode.De.alreadyTypeExists);
}
DePolicyDecision dePolicyDecision = new DePolicyDecision();
PropertyUtils.copyProperties(dePolicyDecision, dePolicyDecisionDTO);
policyDecisionRepository.saveAndFlush(dePolicyDecision);
return policyDecisionDAO.findDtoById(dePolicyDecisionDTO.getId());
}
9)閱讀代碼,自頂向下規(guī)則:每個函數(shù)后面都跟著下一個抽象層的函數(shù);
努力
讀書感悟
來自《解憂雜貨店》
- 心,一旦離開了,就再不會回來。
- 人與人之間情斷義絕,并不需要什么具體的理由。就算表面上有,也很可能只是心已經(jīng)離開的結果,事后才編造出的借口而已。因為倘若心沒有離開,當將會導致關系破裂的事態(tài)發(fā)生時,理應有人努力去挽救。如果沒有,說明其實關係早已破裂。
- 這么多年咨詢信看下來,讓我逐漸明白一件事。很多時候,咨詢的人心里已經(jīng)有了答案,來咨詢只是想確認自己的決定是對的。所以有些人讀過回信后,會再次寫信過來,大概就是因為回答的內容和他的想法不一樣。
- 就算是恨,也是一種很抽象的感情。
其他
如果有帶給你一絲絲小快樂,就讓快樂繼續(xù)傳遞下去,歡迎轉載,點贊,頂,歡迎留下寶貴的意見,多謝支持!