日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java胜任理由_Java在几乎所有方面均能胜任本机响应

發布時間:2023/12/3 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java胜任理由_Java在几乎所有方面均能胜任本机响应 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java勝任理由

我與一位同事討論了Java與JavaScript的話題,這是一個有問題的話題。 然后他提到React Native多么出色,我決定我必須研究一下,也許要為Codename One掌握一些想法……

那里有一些不錯的主意,但是它們都不是革命性的或例外的,而且對于在Java 8中運行的Codename One開發人員來說,大多數都不是什么新鮮事。

我喜歡的一件事是React演示代碼看起來有多短,所以我將其移植到Codename One上,最終得到了大致相同數量的代碼,并且可以說是更好/更簡單的代碼!

退房的完整列表,在文章的結尾,或在github上的項目在這里 ,但讓我們首先回顧了為什么Java代碼是“更好”。

同步執行

JavaScript愛好者討厭這一點,但它仍然是一個事實,即同步代碼更易于閱讀,跟蹤和調試。 例如,這是獲取數據的代碼的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多年的專業編程經驗,這仍然很難遵循。 顯然,如果省略done() ,您將不會得到任何錯誤處理?

它很奇怪且容易出錯。 我覺得這背后隱藏著許多代碼,這使簡潔性比簡化更為混亂(有點像通過Twitter進行政治辯論)。 對我來說,我們的代碼是這樣簡單:

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;} });

請注意,這與上面的代碼并不完全相同,因為我們還創建了組件,將它們添加到UI并處理所產生的錯誤! 比較公平的比較是:

try {Collection data = (Collection)ConnectionRequest.fetchJSON(REQUEST_URL).get("movies");... } catch(IOException err) {... }

這實際上是一行代碼,甚至可能更短,之后我們得到結果……沒有流程,沒有回調!

開發人員經常討厭Java的檢查異常功能,我必須同意它們有時會很痛苦(如果InterruptedException是愚蠢的),但這是為什么檢查異常很重要的一個很好的例子。 我們必須正確地處理錯誤,并且直到我們的代碼以這種可愛的“ TODO”注釋正式投入生產時,我們才不能忽略它,沒有人會打擾閱讀。

一種語言-更少的代碼

清單的大小大致相等,但是您會注意到react代碼在處理JavaScript代碼時會忽略本機特定于平臺的代碼。 我們的清單包含所有內容,不需要其他代碼,也不需要其他樣板,項目等。

React Native通過將標簽與JavaScript代碼混合來進一步有效地將聲明性代碼混合到常規流中。 是的,它縮短了代碼,但也消除了聲明式編程價值的很大一部分,即職責分離。

重新加載==應用代碼更改

可以通過重新加載來調試React Native,這在使用糟糕的 Android模擬器時會有所幫助。 幸運的是,Codename One不需要該模擬器,也不需要重新啟動應用程序即可重新加載已編譯的更改…例如,在NetBeans中,只需在調試器中使用“ Apply Code Changes”即可,您的更改將立即鏡像到正在運行的應用程序中。

腳本語言在“設備上”存在問題

這并不是“ React Native”特有的rant語,它與將JavaScript打包在應用程序捆綁包中的所有工具有關。 腳本語言非常適合網絡使用,就像“管道膠帶”一樣。 告訴我一個不喜歡膠帶的黑客!

發行帶有這種膠帶的應用程序的誘惑很大,但是與網絡不同,在Web上,您可以通過部署新的更新來修復生產中的“奇怪的未定義”錯誤。 使用應用程序時,您需要通過蘋果的審批流程…這意味著在您觀察評分下降時,仍會存在生產錯誤。

是的,單元測試,lint和許多其他解決方案應該可以解決這些問題,但是當您使用現代IDE時,由于嚴格的語言語法,它可以檢測到潛在的null推理,這真是太神奇了!

例如,關于JavaScript簡化問題的一個很好的例子就是這樣的代碼:

function reduce(var a) {if(...) {a = a - 1;} else {a = a + 1;} }

如果這是Java代碼,那么我們可以確切地知道這里會發生什么……在JavaScript中情況并非如此! 讓我們假設由于錯誤,只要條件為真(某種情況下在所有測試用例中都是這樣),a就是某種方式為"11"的字符串,那么它將像數字一樣起作用。 例如a將變為"10" 。 但是在生產中,如果條件由于某種原因變為假,則a將變為"111" 。 如果a代表某種有價值的東西(例如債務,信用等),那么在商店中有一個帶有此錯誤的應用可能真的很痛苦。

環境

React native使用本地開發環境,這意味著它需要Mac才能進行iOS開發。 這也意味著您需要在Android IDE中完成部分工作,在Xcode中完成部分工作,并使用文本編輯器來完成JavaScript工作。 讓我感到驚訝的是,開發人員愿意放棄30年的IDE演變以獲取一些語法上的糖果??? 我們是否受到Eclipse的傷害? 今天的IDE令人贊嘆,您可以通過單個IDE跟蹤/調試整個代碼這一事實非常寶貴。 我們團隊具有立即查看誰使用了什么軟件以及出于什么目的的功能,這真是令人震驚,我無法理解一個這樣的事情是如何由超過2個人的團隊使用的,尤其是在分散的員工隊伍中。

我喜歡JavaScript的地方

我真正喜歡使用JavaScript的一件事是使用JSON的便捷性,而在下面的代碼中,我將其大大減少到幾乎與它一樣優雅的大小。 我仍然不喜歡鴨子類型或腳本語言,但我真的很想將諸如屬性對象之類的東西添加到Codename One中,并改進集成的解析。

最后的話

我在簡潔的編程中發現的問題之一是,人們使用它來隱藏基本概念,以至于太多的事情以“不言而喻”的方式發生。 不幸的是,這使得簡潔的代碼像Tweet一樣易于閱讀,不幸的是,即使您需要表達一個中等復雜的想法,Twitter都不會削減它,而其中某些API就是一個大問題。

React native有它的粉絲,畢竟它可能比PhoneGap更好,PhoneGap有其自身的局限性。 但是,它仍然是腳本基礎架構的雞腿上的一個有限的概念。 與Codename One相比,它沒有真正的優勢,并且存在一些明顯的潛在問題。

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勝任理由

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的java胜任理由_Java在几乎所有方面均能胜任本机响应的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。