JavaRush /Java Blog /Random-TW /喝咖啡休息#131。Java 在 Web 和行動應用程式開發中的作用。函數式程式設計 - 優點和缺點

喝咖啡休息#131。Java 在 Web 和行動應用程式開發中的作用。函數式程式設計 - 優點和缺點

在 Random-TW 群組發布

Java 在 Web 和行動應用程式開發中的作用

來源:DZone Java 是最常用的程式語言之一。它被積極用於企業、網路和行動應用程式的開發。Java 在從數據科學到 AR/VR 等領先技術產業都有應用。儘管 Java 的企業開發是該語言最受歡迎的用例,但 Web 和行動應用程式也被認為是使用 Java 的領域之一。 喝咖啡休息#131。 Java 在 Web 和行動應用程式開發中的作用。 函數式程式設計 - 優點和缺點 - 1讓我們來看看為什麼 Java 開發在過去二十年在 Web 和行動裝置上變得如此流行。在 Web 和行動裝置上使用 Java 的主要原因之一是它是一種高效能程式語言。它確保您的應用程式可以快速運行並且沒有任何處理錯誤。還有其他原因:

1. 開源

作為一種開源程式語言,Java 具有許多優點。首先,它降低了應用程式開發過程的成本。其次,由於它是開源的,開發人員很容易改變語言並經常更新。此外,Java 具有易於閱讀的語法,可輕鬆為 Web 和行動裝置開發應用程式。最後,開發人員可以使用現有的語言程式碼庫並對其進行改進。

2. 跨平台

Java 程式設計的另一個好處是它是一種跨平台語言。開發人員可以在 Windows 上編寫程式碼並在 macOS 和 Linux 上運行。「編寫一次,到處運行」的原則在這裡適用。這使得開發人員可以更輕鬆地在不同系統上工作,並簡化在不同機器上進行測試的過程。例如,開發人員可以測試程式是否能夠在不同的螢幕尺寸和作業系統上正確運作。

3. 行動友善

Java 是行動應用程式的熱門技術。Android應用程式開發人員主要使用Java語言,因為它易於實現、具有安全特性和跨平台功能。Android 需要強大的語言來擴展應用程序,但 Java 提供了驚人的擴展功能。它還簡化了 Android 應用程式的測試過程。所有這些都表明它是一種用於創建行動應用程式的可靠且動態的程式語言。

4. 工具和函式庫

Java 最顯著的優點之一是它與各種工具的兼容性。Spring、Hibernate、Struts、Spark 等框架極大地簡化了開發過程。所有這些工具都提供了用於創建互動式和動態應用程式的各種功能。Apache Commons、Java Standard Libraries、Maven、Jackson 等程式庫允許開發人員添加功能,而無需從頭開始編寫程式碼。

5.活躍的社區

全球有超過 760 萬名 Java 開發人員。他們不斷更新程式語言並為其添加新功能。由於Java每6個月更新一次,開發人員有機會快速學習並創造更好的產品。您也可以使用 Java 社群來尋找各種問題的答案。

Java 在 Web 應用程式開發中的崛起

自 1995 年由 Sun Microsystems 創建以來,Java 語言已成為程式設計產業的優先發展方向之一。如今,世界各地的公司都使用這種程式語言來創建 Web 應用程式。Google、Netflix、Spotify 和 Pinterest 只是少數在其技術堆疊中使用 Java 的公司。專家估計,超過 60% 的 IT 公司以某種形式使用 Java。此外,由於它在其他 Web 開發領域(即雲端運算、社交媒體、企業開發、AR、VR 等)的採用,它仍然是一種流行的程式語言。它是一種優秀且強大的程式語言,適用於現在需要基於雲端的架構的企業。當與 JavaScript 結合使用時,Java 可讓您建立可以在任何平台上執行的高效能 Web 應用程式。

Java 在現代用例中的崛起

除了 Web 開發和行動開發之外,Java 還在現代科技世界中留下了自己的印記。如今,Java 是一種對於科學應用來說非常有用的程式語言。它為科學計算提供了安全、快速和便攜的環境。MATLAB 是基於 Java 的科學應用程式中最受歡迎的程式庫之一。
  • Java 在科學應用程式的前端和後端開發中也很有用。您可以使用 Struts 和 Java Server Pages 進行前端開發,使用 Java Core 進行科學應用程式的後端開發。

  • Java 對於資料分析也很有用。它允許開發人員使用各種庫和工具創建數據分析解決方案。如今,Java 已在物聯網領域中得到應用。它是智慧卡和感測器等嵌入式系統的關鍵技術。因此,公司在家庭自動化行業中使用這種程式語言。此外,它也積極用於串流媒體設備技術和智慧電視的開發。

  • Hadoop大數據平台是用Java寫的。由於它是一種開源且物件導向的語言,因此它是大數據應用程式的基石。像Scala這樣的程式語言可以輕鬆地運行在Java虛擬機器上,讓大數據分析變得更容易。

  • 遊戲是一個新興且快速發展的行業,Java 廣泛用於各種遊戲應用程式。例如,它提供對 jMonkeyEngine(最大的開源 3D 遊戲開發引擎)的支援。此外,Dalvik 虛擬機器 (DVM) 主要由 Java 支持,用於創建 Android 互動遊戲。

函數式程式設計 - 優點和缺點

來源:Dev.to 儘管我傳統上對不熟悉的技術持懷疑態度,但我認識到函數式程式設計的好處。以下是描述此程式設計範例的優點的大致清單。 喝咖啡休息#131。 Java 在 Web 和行動應用程式開發中的作用。 函數式程式設計 - 優點和缺點 - 2

安全並行

函數式方法鼓勵安全性並發,即能夠在單獨的執行緒中執行作業,而不會導致執行緒衝突或修改衝突。原因是,與物件方法不同,您不共用其狀態可以在處理過程中變更的物件。有入口,也有出口,入口不會因你而改變。在Java中,即使你使用「線程安全」的對象,你也不能保證它們在你的方法被呼叫時具有相同的值。在下面的範例中,我們可以看到一次處理一個元素的迴圈可以使用執行緒內的 lambda 函數輕鬆並行處理。
for( String item : items ) {
   process(item);
}
現在變成了:
items.parallelStream().forEach( item -> process(item) );

快速輸入/輸出

函數式程式設計支援與多執行緒不同的方法。這意味著我們不再有單獨的執行緒等待 I/O 回應,例如資料庫呼叫。也就是說,我們最大化 CPU 和頻寬的使用。對於高效能應用程式來說,這是一個明顯的優勢。這是透過函數呼叫可以傳回 Future 來實現的,它不是呼叫的實際結果,而是在未來某個時刻傳回結果的承諾。在未來的某個時刻,將獲得運行該函數的返回值。這意味著處理器執行緒不會等待資料庫或 REST 呼叫完成,而是可以執行其他操作。

表達簡潔

軟體開發人員希望能夠優雅地表達複雜的想法。函數式程式設計可以讓你簡潔地做到這一點。例如,諸如 for 迴圈之類的常見構造可以用執行緒替換,執行緒抽象化了使用迴圈的常見 for 操作。毫無疑問,Java 中加入 Lambda 函數和線程擴展了表達以前不可能的想法的能力。

為什麼不成為功能性的?

只是重申一下上面的內容:函數式編碼有很多好處,因此本文並不是試圖將所有內容概括為一種情況,並說您絕對應該進行函數式編程,反之亦然。必須在清楚了解過渡的原因和潛在問題的情況下做出這項決定。

總是很難直觀地理解

當你寫程式碼時,你是否試圖與電腦進行通訊?如果與電腦的通訊對您來說如此重要,為什麼不用機器碼編寫呢?當然,這是非常困難的,因此發明了電腦語言以使其變得更容易。它們還允許程式設計師創建其他程式設計師可以理解的表達式。隨著軟體變得越來越大、越來越複雜,我們需要策略來管理複雜性。我們透過抽象和資訊隱藏來實現這一點。在 Java 中用於發送電子郵件的類別相當複雜,但該類別的介面很簡單。它隱藏了詳細的實現,只向我們展示了控制項的外部。大括號和方括號等語言功能告訴我們條件語句和迴圈等結構。只是現在我們將循環(或更確切地說是遞歸)和條件移動到函數中:
for( String item : items ) {
    System.out.println(item);
}
事實證明:
items.foreach( item -> System.out.println(item) );
串流和 lambda 方法肯定更短。您可以用更少的程式碼來表達相同的功能。問題是我們現在將實際行為隱藏在我們需要知道的方法中。Java 中的循環使用關鍵字。另一方面,lambda 函數可以實現各種形式的遞歸,這裡僅透過名稱表示它的作用。例如:
boo.fooble( item -> System.out.println(item) );
你不能再僅僅透過閱讀程式碼來理解結構。這使得追蹤執行流程變得困難。另一個功能是函數鏈,其中一個函數的結果是下一個函數的輸入,而不分配中間變數。
boolean result = boo
    .fooble( /*some code*/ )
    .bobble( /*some code*/)
    .goober( /*some code*/);
這對這段程式碼的作者來說可能是有意義的,因為他似乎已經編寫了每個函數並且知道它的作用。然而,對於那些剛接觸程式碼的人來說,這並沒有告訴你太多關於每個函數的參數、過程或傳回值的資訊。但是,如果您在分配類型的內容中編寫相同的內容,您將獲得:
Car car = boo.fooble( /*some parameters*/);
Tyre tyre = car.bobble( /*some parameters*/);
int pressure = tyre.goober( /*some parameters*/);
這可能不是一個完美的類比,因為參數和匿名函數不是同一件事,但這裡的要點是,如果不更深入地理解下面描述的函數的作用,那麼結果和參數未知的長句子很難閱讀。因此,函數式程式設計可能在令人驚訝的短程式碼片段中具有很高的表達能力,但對於剛接觸該軟體的人來說卻難以理解。類別和介面的目的是隱藏數據,創建可重複使用的程式碼片段,不需要開發人員理解甚至不需要查看實作。它們的存在是為了讓開發人員可以輕鬆處理大型、複雜的系統。這是組織與特定實體關聯的程式碼的便捷方法。然而,我對函數式程式設計如何幫助建​​立大型複雜專案知之甚少。這可能有主觀原因。

用你的技能給別人留下深刻印象

有些軟體開發人員對自己的技能非常缺乏信心,以至於他們試圖透過編寫不必要的複雜程式碼來給人留下深刻的印象。作為一名高級開發人員,我並不特別欽佩其他嘗試編寫智慧程式碼的軟體開發人員。當然,這不僅適用於函數式程式設計;也適用於函數式程式設計。同樣的事情可能發生在任何編碼風格中。但我注意到函數式程式設計支持者中存在著一定的智力虛榮心。關鍵是軟體開發人員並不是在真空中工作。這種「智慧」程式碼需要維護,如果難以理解,那麼將難以閱讀和更改,並且難以調試。在管理團隊時,我們有各個層級的人員,因此最明智的做法是以每個參與人員都能理解的方式編寫程式碼。這就是為什麼我們有明確的長變數名,因此我們限制方法的長度。「聰明」的程式碼會佔用額外的時間,所以寫起來並不是很聰明。我相信函數式程式設計使用了 Perl 多年前提出的關於簡潔而強大的表達式的相同論點。Perl 的支持者對其表現力感到自豪,他們可以用幾行程式碼編寫出非常強大的程式。這是真的。問題是它們很難理解。也許函數式程式設計也陷入了同樣的陷阱。

因為它是一種新時尚

總是有“熱門”的新技術或範例。新技術、語言和方法不斷湧現。我們必須不斷挑戰自我,學習新事物。作為軟體開發人員意味著先進的技術。但身為軟體開發人員,我們必須自己評估創建產品需要哪些技術。僅僅因為一項新的流行技術流行就去學習它並不是明智的時間利用方式。這並不意味著您不應該學習函數式編程,而是您應該針對您正在編寫的應用程式評估此範例的優缺點。

因為這是唯一正確的方法

以前很多次,我看到開發人員將這種或那種方法宣傳為唯一正確的方法。但正如一位朋友告訴我的,不同的工作需要不同的工具。例如,我個人使用Python和PyTorch進行人工智慧,儘管還有很多其他工具和技術,各有其優缺點。有充分的理由將函數式程式設計視為需要顯著可擴展性的服務的一種選擇。這是由於這種方法提供的並發安全性。但您也應該意識到成本和潛在風險。幾年前,我在依賴注入方面也有類似的經歷,Spring 被認為是這項工作的最佳選擇。當我問 Spring 支持者它帶來什麼好處時,他們沒有給我明確的答案。我現在在一些函數式程式設計純粹主義者身上看到了類似的情況,他們似乎正在從事某種宗教運動,而不是對技術進行公正的評估。順便說一句,依賴注入是一個好主意,我現在可以清楚地識別它的好處。同樣,我認為我對函數式程式設計的擔憂與它的使用方式有關,而不是它是否是一種有用且有效的方法。

結論

本文的目的不是要為是否應該進行函數式程式設計的問題提供明確的答案。關鍵是你如何評估任何新技術或方法。最重要的是:不要讓你的自我阻礙你進行客觀評估。軟體開發並不能證明您的智力或個人品質。這是關於在現實世界中創造價值。如果函數式程式設計對您有幫助,那麼就使用它。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION