概述:
跟js差別不大,但Object\Array\Value默認(rèn)定義好就是不可變的髓绽。沒(méi)有變量敛苇,只有綁定像lisp。但需要副作用顺呕,副作用是get\set函數(shù)的Object枫攀。
比如字符串對(duì)象,可能是char[]+Length的對(duì)象株茶,只存儲(chǔ)最簡(jiǎn)與自己相關(guān)的數(shù)據(jù)来涨,操作集成在第三方庫(kù)中,如String\Object\Array启盛。
結(jié)構(gòu)體不應(yīng)該取部分蹦掐,只能用.操作符訪問(wèn)與傳遞,可以構(gòu)造成為其它的部分僵闯?卧抗?
對(duì)寫(xiě)編寫(xiě)者友好了,能更大范圍地明確哪些受了副作用的影響鳖粟,但仍然存在副作用且可傳遞副作用社裆。是沒(méi)有希望的,還得寄望得類似vue-react這種樹(shù)狀的局部副作用語(yǔ)言牺弹。
實(shí)現(xiàn)上浦马,強(qiáng)類型結(jié)構(gòu)體,是結(jié)構(gòu)化語(yǔ)言张漂,一經(jīng)構(gòu)造(類似js的Object與Array的構(gòu)造)后只讀不可打開(kāi)晶默。結(jié)構(gòu)體更像契約。由于沒(méi)有類航攒,函數(shù)使用閉包替代類磺陡。組件-類有確定的構(gòu)造函數(shù),而不是js的Object或Array式構(gòu)造。構(gòu)造函數(shù)的參數(shù)卻是契約的币他、臨時(shí)調(diào)用實(shí)現(xiàn)坞靶、js的Object或Array的。比如
//聲明返回特定類型
var a=function(p){
var me={
};
return me;
};
//調(diào)用時(shí)的參數(shù)是臨時(shí)構(gòu)造蝴悉、滿足契約
a({
});
強(qiáng)類型的好處自然是字典向數(shù)組方向的編譯優(yōu)化彰阴。
默認(rèn)構(gòu)造函數(shù){}或[],自定義構(gòu)造函數(shù)(用函數(shù)封裝)拍冠,是否可能函數(shù)參數(shù)也有自定義構(gòu)造函數(shù)呢(不太好尿这,注入只能是某個(gè)鍵)
還有閉包回調(diào)的參數(shù)-函數(shù)體實(shí)現(xiàn)。
函數(shù)調(diào)用必須帶鍵庆杜,傳統(tǒng)的類C++語(yǔ)言沒(méi)有鍵射众,只有a.setB(xx).setC(yy).setD(xx).build()的構(gòu)造過(guò)程,我覺(jué)得不好晃财,易遺漏叨橱,默認(rèn)值。而kotlin的擴(kuò)展函數(shù)的注入——結(jié)果很好看断盛,整體不喜歡罗洗,不喜歡面向?qū)ο螅豢煞指畹闹皇亲钚o(wú)冗余集合郑临,其它第三方庫(kù)函數(shù)都通過(guò)這個(gè)最小集合來(lái)組裝實(shí)現(xiàn)栖博。
必須改造函數(shù),使?jié)M足結(jié)構(gòu)化的強(qiáng)類型厢洞,同時(shí)有構(gòu)造過(guò)程仇让。類就是覆蓋結(jié)構(gòu)體的默認(rèn)構(gòu)造過(guò)程(js式的構(gòu)造)
//默認(rèn)構(gòu)造函數(shù)即為{x:xxx,y:xxx}
struct A {}
//重寫(xiě)默認(rèn)構(gòu)造函數(shù)
struct B{} function(p){}
//更完整的
B:Struct{//返回結(jié)構(gòu)體}function(p){//構(gòu)造函數(shù)}Struct{//參數(shù)結(jié)構(gòu)體}
因?yàn)橛兄荡鎯?chǔ)、字典存儲(chǔ)躺翻、數(shù)組存儲(chǔ)丧叽,外延有文件存儲(chǔ)、數(shù)據(jù)庫(kù)存儲(chǔ)等副作用公你。又比如DOM上節(jié)點(diǎn)的屬性存取踊淳,如果不知道內(nèi)部實(shí)現(xiàn),都是調(diào)用函數(shù)陕靠,調(diào)用函數(shù)傳遞不變結(jié)構(gòu)體迂尝,永遠(yuǎn)只是創(chuàng)造與消耗,但因?yàn)閯?chuàng)建實(shí)例剪芥,相當(dāng)于動(dòng)態(tài)創(chuàng)建了函數(shù)垄开。函數(shù)是不可變實(shí)體唯一引用,有唯一副作用效果税肪,有副作用的函數(shù)是針對(duì)性的溉躲,而不是類似+-*/有普適性榜田,因?yàn)楹瘮?shù)依賴創(chuàng)建的閉包環(huán)境,不同運(yùn)算結(jié)果出來(lái)時(shí)代碼中同一處函數(shù)不同锻梳。
JSON萬(wàn)能箭券,比lisp好,有字典類型疑枯,但需要訪問(wèn)字典類型的鍵的方法辩块,點(diǎn)訪問(wèn)符甚至不必是數(shù)組的[]訪問(wèn)。