java胜任理由_Java在几乎所有方面均能胜任本机响应
java勝任理由
我與一位同事討論了Java與JavaScript的話題,這是一個有問題的話題。 然后他提到React Native多么出色,我決定我必須研究一下,也許要為Codename One掌握一些想法……
那里有一些不錯的主意,但是它們都不是革命性的或例外的,而且對于在Java 8中運(yùn)行的Codename One開發(fā)人員來說,大多數(shù)都不是什么新鮮事。
我喜歡的一件事是React演示代碼看起來有多短,所以我將其移植到Codename One上,最終得到了大致相同數(shù)量的代碼,并且可以說是更好/更簡單的代碼!
退房的完整列表,在文章的結(jié)尾,或在github上的項(xiàng)目在這里 ,但讓我們首先回顧了為什么Java代碼是“更好”。
同步執(zhí)行
JavaScript愛好者討厭這一點(diǎn),但它仍然是一個事實(shí),即同步代碼更易于閱讀,跟蹤和調(diào)試。 例如,這是獲取數(shù)據(jù)的代碼的React Native版本:
fetchData: function() {fetch(REQUEST_URL) .then((response) => response.json()) .then((responseData) => { this.setState({ dataSource: this.state.dataSource.cloneWithRows(responseData.movies), loaded: true, }); }) .done(); },我有20多年的專業(yè)編程經(jīng)驗(yàn),這仍然很難遵循。 顯然,如果省略done() ,您將不會得到任何錯誤處理?
它很奇怪且容易出錯。 我覺得這背后隱藏著許多代碼,這使簡潔性比簡化更為混亂(有點(diǎn)像通過Twitter進(jìn)行政治辯論)。 對我來說,我們的代碼是這樣簡單:
react.add(BorderLayout.CENTER, new InfiniteContainer() {public Component[] fetchComponents(int index, int amount) {try {Collection data = (Collection)ConnectionRequest.fetchJSON(REQUEST_URL).get("movies");Component[] response = new Component[data.size()];int offset = 0;for(Object movie : data) {response[offset] = createMovieEntry(Result.fromContent((Map)movie));offset++;}return response;} catch(IOException err) {Dialog.show("Error", "Error during connection: " + err, "OK", null);}return null;} });請注意,這與上面的代碼并不完全相同,因?yàn)槲覀冞€創(chuàng)建了組件,將它們添加到UI并處理所產(chǎn)生的錯誤! 比較公平的比較是:
try {Collection data = (Collection)ConnectionRequest.fetchJSON(REQUEST_URL).get("movies");... } catch(IOException err) {... }這實(shí)際上是一行代碼,甚至可能更短,之后我們得到結(jié)果……沒有流程,沒有回調(diào)!
開發(fā)人員經(jīng)常討厭Java的檢查異常功能,我必須同意它們有時會很痛苦(如果InterruptedException是愚蠢的),但這是為什么檢查異常很重要的一個很好的例子。 我們必須正確地處理錯誤,并且直到我們的代碼以這種可愛的“ TODO”注釋正式投入生產(chǎn)時,我們才不能忽略它,沒有人會打擾閱讀。
一種語言-更少的代碼
清單的大小大致相等,但是您會注意到react代碼在處理JavaScript代碼時會忽略本機(jī)特定于平臺的代碼。 我們的清單包含所有內(nèi)容,不需要其他代碼,也不需要其他樣板,項(xiàng)目等。
React Native通過將標(biāo)簽與JavaScript代碼混合來進(jìn)一步有效地將聲明性代碼混合到常規(guī)流中。 是的,它縮短了代碼,但也消除了聲明式編程價值的很大一部分,即職責(zé)分離。
重新加載==應(yīng)用代碼更改
可以通過重新加載來調(diào)試React Native,這在使用糟糕的 Android模擬器時會有所幫助。 幸運(yùn)的是,Codename One不需要該模擬器,也不需要重新啟動應(yīng)用程序即可重新加載已編譯的更改…例如,在NetBeans中,只需在調(diào)試器中使用“ Apply Code Changes”即可,您的更改將立即鏡像到正在運(yùn)行的應(yīng)用程序中。
腳本語言在“設(shè)備上”存在問題
這并不是“ React Native”特有的rant語,它與將JavaScript打包在應(yīng)用程序捆綁包中的所有工具有關(guān)。 腳本語言非常適合網(wǎng)絡(luò)使用,就像“管道膠帶”一樣。 告訴我一個不喜歡膠帶的黑客!
發(fā)行帶有這種膠帶的應(yīng)用程序的誘惑很大,但是與網(wǎng)絡(luò)不同,在Web上,您可以通過部署新的更新來修復(fù)生產(chǎn)中的“奇怪的未定義”錯誤。 使用應(yīng)用程序時,您需要通過蘋果的審批流程…這意味著在您觀察評分下降時,仍會存在生產(chǎn)錯誤。
是的,單元測試,lint和許多其他解決方案應(yīng)該可以解決這些問題,但是當(dāng)您使用現(xiàn)代IDE時,由于嚴(yán)格的語言語法,它可以檢測到潛在的null推理,這真是太神奇了!
例如,關(guān)于JavaScript簡化問題的一個很好的例子就是這樣的代碼:
function reduce(var a) {if(...) {a = a - 1;} else {a = a + 1;} }如果這是Java代碼,那么我們可以確切地知道這里會發(fā)生什么……在JavaScript中情況并非如此! 讓我們假設(shè)由于錯誤,只要條件為真(某種情況下在所有測試用例中都是這樣),a就是某種方式為"11"的字符串,那么它將像數(shù)字一樣起作用。 例如a將變?yōu)?#34;10" 。 但是在生產(chǎn)中,如果條件由于某種原因變?yōu)榧?#xff0c;則a將變?yōu)?#34;111" 。 如果a代表某種有價值的東西(例如債務(wù),信用等),那么在商店中有一個帶有此錯誤的應(yīng)用可能真的很痛苦。
環(huán)境
React native使用本地開發(fā)環(huán)境,這意味著它需要Mac才能進(jìn)行iOS開發(fā)。 這也意味著您需要在Android IDE中完成部分工作,在Xcode中完成部分工作,并使用文本編輯器來完成JavaScript工作。 讓我感到驚訝的是,開發(fā)人員愿意放棄30年的IDE演變以獲取一些語法上的糖果??? 我們是否受到Eclipse的傷害? 今天的IDE令人贊嘆,您可以通過單個IDE跟蹤/調(diào)試整個代碼這一事實(shí)非常寶貴。 我們團(tuán)隊具有立即查看誰使用了什么軟件以及出于什么目的的功能,這真是令人震驚,我無法理解一個這樣的事情是如何由超過2個人的團(tuán)隊使用的,尤其是在分散的員工隊伍中。
我喜歡JavaScript的地方
我真正喜歡使用JavaScript的一件事是使用JSON的便捷性,而在下面的代碼中,我將其大大減少到幾乎與它一樣優(yōu)雅的大小。 我仍然不喜歡鴨子類型或腳本語言,但我真的很想將諸如屬性對象之類的東西添加到Codename One中,并改進(jìn)集成的解析。
最后的話
我在簡潔的編程中發(fā)現(xiàn)的問題之一是,人們使用它來隱藏基本概念,以至于太多的事情以“不言而喻”的方式發(fā)生。 不幸的是,這使得簡潔的代碼像Tweet一樣易于閱讀,不幸的是,即使您需要表達(dá)一個中等復(fù)雜的想法,Twitter都不會削減它,而其中某些API就是一個大問題。
React native有它的粉絲,畢竟它可能比PhoneGap更好,PhoneGap有其自身的局限性。 但是,它仍然是腳本基礎(chǔ)架構(gòu)的雞腿上的一個有限的概念。 與Codename One相比,它沒有真正的優(yōu)勢,并且存在一些明顯的潛在問題。
Java清單
public class ReactDemo {private static final String REQUEST_URL = "https://raw.githubusercontent.com/facebook/react-native/master/docs/MoviesExample.json";private Form current;private EncodedImage placeholder;public void init(Object context) {UIManager.initFirstTheme("/theme");}public void start() {if(current != null){current.show();return;}placeholder = EncodedImage.createFromImage(Image.createImage(53, 81, 0), false);Form react = new Form("React Demo", new BorderLayout());react.add(BorderLayout.CENTER, new InfiniteContainer() {public Component[] fetchComponents(int index, int amount) {try {Collection data = (Collection)ConnectionRequest.fetchJSON(REQUEST_URL).get("movies");Component[] response = new Component[data.size()];int offset = 0;for(Object movie : data) {response[offset] = createMovieEntry(Result.fromContent((Map)movie));offset++;}return response;} catch(IOException err) {Dialog.show("Error", "Error during connection: " + err, "OK", null);}return null;}});react.show();}Component createMovieEntry(Result data) {Container entry = BorderLayout.center(BoxLayout.encloseY(new SpanLabel(data.getAsString("title"), "Line1"), new Label(data.getAsString("year"), "Line2"))).add(BorderLayout.WEST, URLImage.createToStorage(placeholder, data.getAsString("id"), data.getAsString("posters/thumbnail")));return entry;} public void stop() {current = Display.getInstance().getCurrent();}public void destroy() {} }翻譯自: https://www.javacodegeeks.com/2015/11/java-is-superior-to-react-native-in-practically-every-way.html
java勝任理由
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的java胜任理由_Java在几乎所有方面均能胜任本机响应的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三国志英杰传安卓版(英杰传安卓版)
- 下一篇: 设置Elasticsearch N-Gr