国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

區分 procedure 和 function:返回值是函數最大的資產

lemanli / 3296人閱讀

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

在閱讀一些 Java 代碼中,發現有無數方法的返回值類型是 void:沒有返回值。

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

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

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

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

因此,即使使用 Java 這樣的 OO 語言,盡量提高 function 的數量,讓程序中大多數代碼都是 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 方法就可以隨意復制到其他地方去了。當然,你可能注意到現在這個方法可以標識為靜態,你甚至不需要一個對象實例就可以使用它。

  public static String hello(String name)

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

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

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

相關文章

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

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

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

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

    aaron 評論0 收藏0

發表評論

0條評論

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