摘要:在當年流行的學院式語言也是我第一種實際使用的語言中,特意區(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
摘要:良好的排序算法具有進行最少的比較和交換的特征。冒泡排序是一個基于比較的排序算法,被認為是效率最低的排序算法之一。現(xiàn)在讓我們使用實現(xiàn)冒泡排序算法。插入排序到目前為止,我們已經(jīng)看到了兩種基于比較的排序算法。 預警 本文適合對于排序算法不太了解的新手同學觀看,大佬直接忽略即可。因為考慮到連貫性,所以篇幅較長。老鐵們看完需要大概一個小時,但是從入門到完全理解可能需要10個小時(哈哈哈,以我自己...
摘要:實現(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ù)來...
閱讀 2324·2021-11-22 12:01
閱讀 2001·2021-11-12 10:34
閱讀 4526·2021-09-22 15:47
閱讀 2837·2019-08-30 15:56
閱讀 2870·2019-08-30 15:53
閱讀 2411·2019-08-30 13:53
閱讀 3387·2019-08-29 15:35
閱讀 3132·2019-08-29 12:27