Blogger 站內搜尋

2025年1月18日 星期六

JAVA 7 to 17 Lambda

一、前言

一、前言

返回目錄

Java 8 為了擺脫太囉嗦,匿名類別再進化,但其實是為了函數化(Functional),導入函數式程式設計(Functional programming, FP)理念。

數學與電腦科學中,Lambda的概念很早就提出過,直到解決邏輯一致性問題(簡單類型λ演算),才逐漸奠定λ演算在語言學和電腦科學學界擁有一席之地。

λ-演算結合了兩種簡化方式,使得這個語義變得簡單,變為可計算的函數,明確的計算模型。

第一種簡化是不給予函式一個確定名稱,而「匿名」地對待它們。例如,兩數的平方和函式

s q u a r e _ s u m ( x , y ) = x 2 + y 2 square\_sum(x, y)=x^2+y^2

可以用匿名的形式重新寫為:

( x , y ) ↦ x 2 + y 2 (x,y)\mapsto x^2+y^2

第二個簡化是λ演算只使用單一個參數輸入的函式。如果普通函式需要兩個參數,例如 s q u a r e _ s u m {\displaystyle square\_sum} 函式,可轉成接受單一參數,傳給另一個函式中介,而中介函式也只接受一個參數,最後輸出結果。例如,

( x , y ) ↦ x 2 + y 2 (x,y)\mapsto x^2+y^2

可以重新寫成:

x ↦ ( y ↦ x 2 + y 2 ) x\mapsto(y\mapsto x^2+y^2)

這是稱為柯里化的方法,對於柯里化轉換版的計算方式如下

( ( x , y ) ↦ x 2 + y 2 ) ( 3 , 2 ) = ( ( x ↦ ( y ↦ x 2 + y 2 ) ) ( 3 ) ) ( 2 ) = ( y ↦ 3 2 + y 2 ) ( 2 ) / / 在內層表達式中 x 的定義為 3 ,這就像 β − 歸約一樣。 = 3 2 + 2 2 / / y 的定義為 2 ,再次如同 β − 歸約。 = 13 \begin{split} \big((x,y)\mapsto x^2+y^2\big)(3,2)&=\Big(\big(x\mapsto(y\mapsto x^2+y^2)\big)(3)\Big)(2)\\ &=(y\mapsto 3^2+y^2)(2) \space //在內層表達式中{\displaystyle x}的定義為{\displaystyle 3},這就像β-歸約一樣。\\ &=3^2+2^2 \space //{\displaystyle y}的定義為{\displaystyle 2},再次如同β-歸約。\\ &=13 \end{split}

lambda演算中的所有函式都是匿名的,它們沒有名稱,它們只接受一個輸入變數,柯里化用於實現有多個輸入變數的函式。

目錄

2025年1月12日 星期日

Java 7 to 17 Overview New Features And Changes

一、前言

一、前言

返回目錄

很久沒有關注Java的更新,從學完Java7後,進入職場時Oracle釋出Java8,但工作上也沒有進行升級,也對Java升級的版本沒有過多的關注。

後來Oracle Java針對商業用途收費的消息鬧得沸沸揚揚,公司也暫緩對Java升級,轉向使用OpenJDK。2023 年 1 月 23 日 Oracle Java SE 調升訂閱制價格,其價格是按員工數來算,費用可不便宜。

“Your company has a total employee count of 28,000 as detailed in the Employee for Java SE Universal Subscription definition below. This includes 23,000 full-time, part-time and temporary employees plus 5,000 agents, contractors and consultants. Therefore, the price would be 28,000 X $USD 6.75/month X 12 months = $USD 2,268,000/year.”

為什麼會再繼續關注更新議題呢?
因為Spring框架 Spring boot 與資安議題,Spring修復弱點進行版本更新,Spring 6.x 和 Spring Boot 3.x 版本最低要求為Java17,不得已還是得要被迫更新(小腦袋瓜)。

目錄

VSCode-Extensions-Markdown

一、前言

一、前言

在現今的軟體開發、文件撰寫、筆記記錄等領域, Markdown 已經成為一種不可或缺的輕量級標記語言。它以其簡潔、易讀、易寫的特性,廣受歡迎。相較於傳統的富文本格式 (如 Word),Markdown 使用純文字來表示格式,能專注於內容創作,並減少排版上的干擾。

Visual Studio Code (VS Code) 作為一款強大的程式碼編輯器,通過豐富的擴充功能,對 Markdown 提供了極佳的支援。無論是撰寫技術文件、筆記,或是 README 檔案,VS Code 都能提供流暢、高效的 Markdown 編輯體驗。

本文件將介紹如何在 VS Code 中安裝和使用 Markdown 相關的插件,並示範如何透過這些工具來提升 Markdown 的編輯效率,讓您能更輕鬆地享受 Markdown 的便捷性。

為何選擇 Markdown?

  • 簡潔易學: Markdown 語法簡單直觀,容易上手,您不必花費太多時間學習。
  • 純文字格式: Markdown 文件是純文字格式,可以在任何文字編輯器中開啟,並且易於版本控制。
  • 專注內容: Markdown 讓您專注於內容的撰寫,而非複雜的排版。
  • 跨平台相容: Markdown 文件可以在各種平台和應用程式中無縫轉換和顯示。
  • 廣泛應用: Markdown 已廣泛應用於部落格、技術文件、筆記軟體、社群平台等,是一種通用的文件格式。

為何選擇 VS Code 編輯 Markdown?

  • 強大的編輯器: VS Code 是一款功能強大、可高度自訂的程式碼編輯器,提供了良好的 Markdown 編輯體驗。
  • 豐富的擴充功能: VS Code 的擴充功能生態系統非常活躍,有許多 Markdown 相關的插件可以提升編輯效率。
  • 即時預覽: VS Code 可以即時預覽 Markdown 文件,讓您隨時看到呈現效果。
  • 跨平台支援: VS Code 可以在 Windows、macOS 和 Linux 等多個平台上使用。

目錄

2025年1月5日 星期日

Markdown標記語言-全面解析

一、前言

一、前言

返回目錄

Markdown是一種羽量級標記語言,排版語法簡潔,讓人們更多地關注內容本身而非排版。 它使用易讀易寫的純文本格式編寫文檔,可與HTML混編,可匯出 HTML、PDF 以及本身的 .md 格式的檔。 因簡潔、高效、易讀、易寫,Markdown被大量使用,如Github、Wikipedia、簡書等。

千萬不要被「標記」、「語言」嚇到,Markdown的語法十分簡單,常用的標記符號不超過十個,用於日常寫作記錄綽綽有餘,不到半小時就能完全掌握。

就是這十個不到的標記符號,卻能讓人優雅地沉浸式記錄,專注內容而不是糾結排版,達到「心中無塵,碼字入神」的境界。

讓我們開始學習吧。

目錄

返回目錄

2020年8月11日 星期二

Maven-項目建構過程練習


更新時間:08/11/2020

前言

上一篇安裝了Maven,此篇先來實作一下,感受一下專案管理及自動構建工具的魅力吧!

一、創建 Maven 專案

1.1 建立 Hello 專案:
1.1.1) 首先建立Hello項目,同時建立Maven約定的目錄結構和pom.xml文件。
在CMD中使用命令,建構Maven預設的專案(maven-archetype-quickstart),來達到快速建立約定的目錄結構和pom.xml文件。操作流程如下圖所示:
i.) 打開CMD
ii.) 使用上述指令:mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4
iii.) 設定groupId,通常為公司網域翻轉。例如公司網域為www.google.com,則設定groupId就會變成com.google。
iv.) 設定artifactId,此為專案名稱。此篇文章使用Hello。
v.) 設定version,此篇文章不輸入,直接按Enter。
vi.) 設定package,此篇文章不使用多層目錄結構,但其預設為您的groupId目錄結構,故移除預設目錄,打上../../../,代表以現在的目錄再往回三層。
vii.) 確定(iii)~(vi)輸入的資料是否正確,正確打上y,不正確打上n

2020年5月10日 星期日

Maven-環境建置


更新時間:05/10/2020

前言

Apache Maven,是一個專案管理及自動構建工具(特別是Java軟體)。Maven專案使用專案物件模型(Project Object Model,POM)來組態。專案物件模型儲存在名為 pom.xml 的檔案中。
通過在 pom.xml 配置一小段描述訊息來管理項目的建構(編譯、測試、報告、打包、部署),然後把Source Code放到默認的目錄中,最後下下幾個指令即可。
理想的項目構建是高度自動化,跨平台,可重用的組件,標準化的,使用maven就可以幫我們完成上述所說的項目構建過程。

2020年5月6日 星期三

Maven-開篇


更新時間:05/06/2020

前言、pom.xml?可以拿來做什麼嗎?

第一次碰到專案時,發現有一個pom.xml檔案,裏頭密密麻麻的文字,完全不瞭解其意義...。只好詢問開發人員,但卻被冷冷地回應:「Java不是都這樣開發的嗎?」,他也沒再多解釋什麼,默默地走掉了!
What the hell!?這種配置我從來沒有見過,懵了!還是繼續寫Code去...

2019年12月22日 星期日

Java OpenJDK 安裝與環境設置


更新時間:12/22/2019

前言

擔心 Oracle JDK 要收費?別擔心!Java 社群還是非常活耀!使用 OpenJDK 吧!

一、比較活耀的 Open JDK

1.1 Zulu:Zulu OpenJDK
推薦使用。
Azul System 這家公司推出基於 Open JDK 開發的開源 Zulu,標榜通過官方 TCK 認證,與 Java SE 完全相容,開放免費下載及使用,Azul 公司則靠技術支援服務營利。

2018年12月26日 星期三

Java SE 入門教學 - 圖形介面開發

更新時間:12/26/2018

前言

人是視覺動物(誤) 感性的物種,擁有獨自的喜好,看順眼與不順眼都很主觀,但唯一相同的是直覺性地操作工具,當接觸到未知的工具時,總是從看得見得開始摸索,並慢慢發覺隱藏在背後的功能,最後可以非常靈活使用工具。

程式設計師生產出來的產品也是一樣,如果一個系統只能使用文字介面操作,那它的使用對象一定是"工程師",一般使用者可不買單這種純文字的操作,操作一個功能還要查找要使用那個命令,這實在是太麻煩了!

圖形使用者介面(Graphical User Interface, GUI)是指採用圖形方式顯示的電腦操作用戶介面。與早期電腦使用的命令列介面相比,圖形介面對於使用者來說在視覺上更易於接受,以「各種美觀、而不單調的視覺訊息」提示使用者「狀態的改變」,勢必比純文字來得精彩。

2018年12月25日 星期二

Java SE 入門教學 - 執行緒(2)

更新時間:12/25/2018

前言

在前篇 執行緒(1) 初次介紹了執行緒,並提出執行緒的競速情況(Race Condition)。在此篇文章會介紹簡單、靈活地操作執行緒,至於更深入的控制執行緒的剖析,將不在此篇討論。

在執行緒中的"鎖"提供了兩種主要特性:互斥(mutual exclusion)和可見性(visibility)。

互斥即一次只允許一個執行緒持有某個特定的鎖,因此可使用該特性實作對共享數據的協調訪問協議,這樣,一次就只有一個執行緒能夠使用該共享數據。

可見性要更加複雜一些,它必須確保釋放鎖之前對共享數據做出更改,對於隨後獲得該鎖的另一個執行緒是可見的。如果沒有同步機制提供的這種可見性保證,執行緒看到的共享變數可能是修改前的值或不一致的值,這將引發許多嚴重問題。