成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

區(qū)分 procedure 和 function:返回值是函數(shù)最大的資產(chǎn)

lemanli / 3306人閱讀

摘要:在當年流行的學院式語言也是我第一種實際使用的語言中,特意區(qū)分了有無返回值的過程有返回值的是函數(shù),無返回值的叫做過程。但是,純粹的比這樣的方法有重大的優(yōu)勢僅僅使用參數(shù)表和返回值和外界溝通的函數(shù)是最獨立復用性最高的函數(shù)。

在閱讀一些 Java 代碼中,發(fā)現(xiàn)有無數(shù)方法的返回值類型是 void:沒有返回值。

在當年流行的學院式語言 Pascal (也是我第一種實際使用的語言)中,特意區(qū)分了有無返回值的過程:有返回值的是 function (函數(shù)),無返回值的叫做 procedure (過程)。對于過程式的語言,procedure 意味著必須通過某種全局變量或者直接的 IO 過程來實現(xiàn)它的目標,當然是邪惡的了。這也是區(qū)別這兩種語義的設計原因。對于 Pascal 程序員,盡量提高 function 的比例、降低 procedure 的數(shù)量,是一個設計的目標。

可是到了 OO 時代,大量使用的成員變量讓程序員們有了某種幻覺:既然可以通過成員變量來和外界溝通,對象的方法就可以光明正大地使用 void 返回值,使用 procedure 了。但是,純粹的 function 比這樣的方法有重大的優(yōu)勢:

僅僅使用參數(shù)表和返回值和外界溝通的函數(shù)是最獨立、復用性最高的函數(shù)。它對環(huán)境無要求,非常容易查錯。

它沒有多線程同步的問題:由于沒有共享的數(shù)據(jù),所有內(nèi)部變量都不需要通過鎖定等復雜機制來保護。

因此,即使使用 Java 這樣的 OO 語言,盡量提高 function 的數(shù)量,讓程序中大多數(shù)代碼都是 function 的一部分仍然是非常值得提倡的美德。

public class Greeter {
  private String sentence;
  public void hello(String name) {
    sentence = "Hello, " + name;
  }
  public void greeting(String name) {
    hello(name);
    System.out.println(sentence);
  }
  public void sendGreeting() {
    MailSystem.sendMessage(sentence);
  }
}

簡單得過分的一個 Hello, world 例子,但里面的 hello 方法仍然變得依賴具體的成員變量。如果改成這樣:

public class Greeter {
  public String hello(String name) {
    return "Hello, " + name;
  }
  public void greeting(String name) {
    sentence = hello(name);
    System.out.println(sentence);
  }
  public void sendGreeting() {
    MailSystem.sendMessage(sentence);
  }
}

這個 hello 方法就可以隨意復制到其他地方去了。當然,你可能注意到現(xiàn)在這個方法可以標識為靜態(tài),你甚至不需要一個對象實例就可以使用它。

  public static String hello(String name)

現(xiàn)在開始就請欣賞你代碼中增多的 static function,將 void 返回值的 procedure 視作代碼中應盡力避免的壞味道吧!

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/64097.html

相關文章

  • PHP面試:盡可能多說出你知道排序算法

    摘要:良好的排序算法具有進行最少的比較和交換的特征。冒泡排序是一個基于比較的排序算法,被認為是效率最低的排序算法之一。現(xiàn)在讓我們使用實現(xiàn)冒泡排序算法。插入排序到目前為止,我們已經(jīng)看到了兩種基于比較的排序算法。 預警 本文適合對于排序算法不太了解的新手同學觀看,大佬直接忽略即可。因為考慮到連貫性,所以篇幅較長。老鐵們看完需要大概一個小時,但是從入門到完全理解可能需要10個小時(哈哈哈,以我自己...

    objc94 評論0 收藏0
  • 學習promise編寫使用

    摘要:實現(xiàn)是中的一種異步編程實現(xiàn)方式,中異步編程主要是指瀏覽器事件處理,等,通過傳入回調(diào)函數(shù)來實現(xiàn)控制反轉。對象符合編程規(guī)范,目的是為異步編程提供統(tǒng)一接口,它最大的優(yōu)點就是避免了回調(diào)金字塔。 promise實現(xiàn) Promise是Javascript中的一種異步編程實現(xiàn)方式,js中異步編程主要是指瀏覽器DOM事件處理,setTimeout/setInterval,ajax等,通過傳入回調(diào)函數(shù)來...

    aaron 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<