優(yōu)勢(shì):
1.不需聲明,甚至匿名方式原地定義。編碼量少。
這一條在C++中尤其明顯,以綁定一個(gè)回調(diào)為例,需要聲明,定義,調(diào)用綁定,三處代碼。雖然C++11中支持lambda表達(dá)式,對(duì)于回調(diào)的寫法有很大改進(jìn)。但是其他地方依然蛋疼。
2.弱類型語(yǔ)言,一般情況下,不需關(guān)心實(shí)際類型。Debug時(shí)除外。
在使用C++這種強(qiáng)類型語(yǔ)言的開發(fā)中,尤其是寫功能代碼時(shí),類型檢查遠(yuǎn)不如想象中那么有用,很多時(shí)候反而是問(wèn)題根源,編譯不通過(guò)時(shí),很大一部分時(shí)間是在對(duì)變量類型,由此還衍生出一些特殊技術(shù)手段,比如適配器模式等等。
使用JS這種弱類型語(yǔ)言,只要接口名稱能對(duì)上,那么在對(duì)象的函數(shù)被調(diào)用時(shí)就認(rèn)為是正確的。簡(jiǎn)單說(shuō),只要長(zhǎng)得像某一類型就行了,不需要必須是某一類型。
C++11中auto關(guān)鍵字也可以提升編碼速度(和JS的var很類似,可以隨時(shí)無(wú)腦輸出),不過(guò)看了一下引擎附帶的幾個(gè)例子代碼,好像有濫用auto的趨勢(shì)。
3.腳本語(yǔ)言動(dòng)態(tài)擴(kuò)展能力強(qiáng),可以不必構(gòu)造很多臨時(shí)類型和消息類型。
比如,在大型游戲中,全局使用消息機(jī)制時(shí),C++可能用結(jié)構(gòu)體,自定義類,或者我們以前直接丟JSON對(duì)象過(guò)去。在JS里面就很簡(jiǎn)單了,直接扔JSON對(duì)象吧。
在運(yùn)行時(shí)可以動(dòng)態(tài)給一個(gè)對(duì)象添加函數(shù)和屬性,而不需要重新構(gòu)造新類和初始化。JSON源自JS,JSON是天然的消息對(duì)象,非常合適。當(dāng)然JSON有自身的缺點(diǎn),訪問(wèn)父節(jié)點(diǎn)和兄弟節(jié)點(diǎn)不太方便。并且JSON的結(jié)構(gòu)和二維表沒法完全兼容,這是一直讓策劃和工具程序員頭痛的一個(gè)問(wèn)題。
4.語(yǔ)法靈活,可以支持各種編碼方式。隨機(jī)應(yīng)變。
業(yè)界普遍認(rèn)為面向?qū)ο笤趫D像編程是最好的。但對(duì)于事件處理邏輯處理AI處理來(lái)說(shuō),面向?qū)ο髣t是羅嗦的要死。比如,我實(shí)在對(duì)觀察者模式提不起興趣,Qt中的信號(hào)槽機(jī)制優(yōu)雅的多。又比如我曾經(jīng)做了一個(gè)A*算法代碼,想改成好用的面向?qū)ο蠓绞?,發(fā)現(xiàn)很痛苦。
JS很靈活,適合什么樣的編碼方式,就用什么樣的方式。
5.在語(yǔ)言級(jí)別天生集成了兩種最有用的數(shù)據(jù)結(jié)構(gòu),向量和映射表。
記得在KJava時(shí)代,MIDP的里面只有很少的數(shù)據(jù)結(jié)構(gòu),里面就有向量和哈西表。這兩種是最為常用的。JS在語(yǔ)言層面提供了支持,編碼極其方便。
6.腳本語(yǔ)言無(wú)需編譯,大量節(jié)約了開發(fā)時(shí)間。
如果你在Mac上,并且開了虛擬機(jī)然后編譯VS的話,應(yīng)該有那個(gè)恐怖的按小時(shí)計(jì)算的編譯時(shí)間長(zhǎng)度經(jīng)驗(yàn)。Clang雖然速度比VC快很多,但是每次如果clean一下然后編譯幾十上百個(gè)文件也需要若干分鐘。
一些問(wèn)題:
1.太靈活,更容易出爛代碼。
2.調(diào)試問(wèn)題與IDE問(wèn)題。
目前在cocos2d-x領(lǐng)域,還缺乏好用的支持JS的IDE?,F(xiàn)在目前暫時(shí)還是用cocos2d-html5版本做調(diào)試(兩者的接口已經(jīng)高度一致化),未來(lái)會(huì)有基于c++的IDE做的JS調(diào)試插件(比如在Eclipse上面的)。
3.善變的this
this關(guān)鍵字絕對(duì)是JS里面的變形金剛。根據(jù)不同的上下文,經(jīng)常會(huì)變成其他東西。
這個(gè)經(jīng)常會(huì)和回調(diào)函數(shù)問(wèn)題糾纏不清,如果再加上閉包,三合一,夠你喝一壺的。
4.閉包
閉包很強(qiáng)大,無(wú)限制傳參,抓取快照。
但是閉包本身的問(wèn)題也不小,首先是閱讀和理解上的困難,面向?qū)ο蟮某绦騿T一上來(lái)很難理解這東西,從他們的角度看閉包的代碼也很丑。
還有就是效率問(wèn)題,同事測(cè)了一下SpiderMonkey中的閉包在生成大對(duì)象時(shí)效率不太高。
目前在cocos2d-x前端開發(fā)中,為了防止出現(xiàn)問(wèn)題,對(duì)于缺乏經(jīng)驗(yàn)的程序員,盡量不要使用閉包代碼。
我個(gè)人在回合制戰(zhàn)報(bào),生成動(dòng)畫里是用了一些閉包的,不過(guò)那是一次性代碼。
5.變量生命周期不明確
變量生命周期問(wèn)題,因?yàn)椴恍枰暶?,很多時(shí)候也沒有特別明顯的初始化,并不能通過(guò)閱讀代碼明確知道,一個(gè)變量的生存周期,這是所有腳本語(yǔ)言和GC語(yǔ)言的特性,有些時(shí)候?qū)φ{(diào)試會(huì)形成麻煩。
6.原型繼承
難以理解的原型繼承。熟悉面向?qū)ο蟮娜艘话愣紝?duì)這個(gè)東西莫名其妙。
從靜態(tài)語(yǔ)言過(guò)度到動(dòng)態(tài)腳本語(yǔ)言,一般程序員會(huì)疑惑在幾個(gè)地方,this,閉包,原型繼承,以及如何靈活地使用腳本語(yǔ)言的動(dòng)態(tài)性進(jìn)行編碼,我觀察了一下,很多人寫JS像靜態(tài)語(yǔ)言,還是c++風(fēng)格或者Java風(fēng)格。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
文章題目:【cocos2d-x從c++到j(luò)s】08:JS腳本語(yǔ)言的優(yōu)勢(shì)與一些問(wèn)題-創(chuàng)新互聯(lián)
文章出自:http://aaarwkj.com/article4/cdhdie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、品牌網(wǎng)站制作、網(wǎng)站維護(hù)、做網(wǎng)站、網(wǎng)站營(yíng)銷、全網(wǎng)營(yíng)銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容