摘要:在當(dāng)年流行的學(xué)院式語(yǔ)言也是我第一種實(shí)際使用的語(yǔ)言中,特意區(qū)分了有無(wú)返回值的過(guò)程有返回值的是函數(shù),無(wú)返回值的叫做過(guò)程。但是,純粹的比這樣的方法有重大的優(yōu)勢(shì)僅僅使用參數(shù)表和返回值和外界溝通的函數(shù)是最獨(dú)立復(fù)用性最高的函數(shù)。
在閱讀一些 Java 代碼中,發(fā)現(xiàn)有無(wú)數(shù)方法的返回值類型是 void:沒(méi)有返回值。
在當(dāng)年流行的學(xué)院式語(yǔ)言 Pascal (也是我第一種實(shí)際使用的語(yǔ)言)中,特意區(qū)分了有無(wú)返回值的過(guò)程:有返回值的是 function (函數(shù)),無(wú)返回值的叫做 procedure (過(guò)程)。對(duì)于過(guò)程式的語(yǔ)言,procedure 意味著必須通過(guò)某種全局變量或者直接的 IO 過(guò)程來(lái)實(shí)現(xiàn)它的目標(biāo),當(dāng)然是邪惡的了。這也是區(qū)別這兩種語(yǔ)義的設(shè)計(jì)原因。對(duì)于 Pascal 程序員,盡量提高 function 的比例、降低 procedure 的數(shù)量,是一個(gè)設(shè)計(jì)的目標(biāo)。
可是到了 OO 時(shí)代,大量使用的成員變量讓程序員們有了某種幻覺(jué):既然可以通過(guò)成員變量來(lái)和外界溝通,對(duì)象的方法就可以光明正大地使用 void 返回值,使用 procedure 了。但是,純粹的 function 比這樣的方法有重大的優(yōu)勢(shì):
僅僅使用參數(shù)表和返回值和外界溝通的函數(shù)是最獨(dú)立、復(fù)用性最高的函數(shù)。它對(duì)環(huán)境無(wú)要求,非常容易查錯(cuò)。
它沒(méi)有多線程同步的問(wèn)題:由于沒(méi)有共享的數(shù)據(jù),所有內(nèi)部變量都不需要通過(guò)鎖定等復(fù)雜機(jī)制來(lái)保護(hù)。
因此,即使使用 Java 這樣的 OO 語(yǔ)言,盡量提高 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); } }
簡(jiǎn)單得過(guò)分的一個(gè) 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); } }
這個(gè) hello 方法就可以隨意復(fù)制到其他地方去了。當(dāng)然,你可能注意到現(xiàn)在這個(gè)方法可以標(biāo)識(shí)為靜態(tài),你甚至不需要一個(gè)對(duì)象實(shí)例就可以使用它。
public static String hello(String name)
現(xiàn)在開始就請(qǐng)欣賞你代碼中增多的 static function,將 void 返回值的 procedure 視作代碼中應(yīng)盡力避免的壞味道吧!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/64097.html
摘要:良好的排序算法具有進(jìn)行最少的比較和交換的特征。冒泡排序是一個(gè)基于比較的排序算法,被認(rèn)為是效率最低的排序算法之一?,F(xiàn)在讓我們使用實(shí)現(xiàn)冒泡排序算法。插入排序到目前為止,我們已經(jīng)看到了兩種基于比較的排序算法。 預(yù)警 本文適合對(duì)于排序算法不太了解的新手同學(xué)觀看,大佬直接忽略即可。因?yàn)榭紤]到連貫性,所以篇幅較長(zhǎng)。老鐵們看完需要大概一個(gè)小時(shí),但是從入門到完全理解可能需要10個(gè)小時(shí)(哈哈哈,以我自己...
摘要:實(shí)現(xiàn)是中的一種異步編程實(shí)現(xiàn)方式,中異步編程主要是指瀏覽器事件處理,等,通過(guò)傳入回調(diào)函數(shù)來(lái)實(shí)現(xiàn)控制反轉(zhuǎn)。對(duì)象符合編程規(guī)范,目的是為異步編程提供統(tǒng)一接口,它最大的優(yōu)點(diǎn)就是避免了回調(diào)金字塔。 promise實(shí)現(xiàn) Promise是Javascript中的一種異步編程實(shí)現(xiàn)方式,js中異步編程主要是指瀏覽器DOM事件處理,setTimeout/setInterval,ajax等,通過(guò)傳入回調(diào)函數(shù)來(lái)...
閱讀 2373·2021-11-22 12:01
閱讀 2096·2021-11-12 10:34
閱讀 4609·2021-09-22 15:47
閱讀 2916·2019-08-30 15:56
閱讀 2921·2019-08-30 15:53
閱讀 2469·2019-08-30 13:53
閱讀 3472·2019-08-29 15:35
閱讀 3182·2019-08-29 12:27