Jul 28Functional Programming in Kotlin (3)命令式程式設計 VS 宣告式程式設計 — 探討這兩種程式設計之前,我們先看一個範例,假設有一個列表,這個列表裡面儲存著每個學生的分數,其中包含數學、國語以及英文,如果我們希望將這個列表轉換成由姓名與數學分數組成的 Map,而我們只希望取前三名即可。 其中,這個列表裡面所儲存的類別為 Score,內容如下: data class Score(val name: String, val math: …Kotlin5 min read
Jul 18Functional Programming in Kotlin (2)FP 的三大類函式 — 前一篇文章介紹 FP 的概念,接下來繼續介紹的是在使用 FP 時,一定會出現的三大類函式,這三大類函式分別是: 過濾(filter) 轉換(transform) 合併(combine) 下面的文章,我將一一介紹這三類函式的差異。 過濾 (Filter) 過濾,是把我們傳入的 List 根據條件篩選出我們希望留下來的值。所以它的類型並不會改變,例如原本輸入的值為 List<In …Kotlin10 min read
Jul 16Functional Programming in Kotlin (1)與 FP 的第一次接觸 — 什麼是 Function? 在進入 Functional Programming 之前,我們要先了解什麼是 Function,Function 的中文翻譯是「函式」,而它的概念是從數學的領域所引進的,在程式語言以外,我們可以在很多地方都能夠看到函式的存在,下面以一個一元一次方程式作範例: f(x) = x*2 + 3 這個方程式的內容是在等號右邊的 x*2 + 3 ,左邊的 f( …Kotlin9 min read
May 25十分鐘帶你快速認識 Kotlin — Coroutine前言 開發 Android 的開發者或多或少一定有遇過 ANR(Application Not Response),你知道出現 ANR 的原因嗎?主執行緒大約 16ms 更新畫面一次,而一次大約是 60 幀。當我們執行的任務太耗時,佔用太多主執行緒 (Main Thread) 的時間,那麼就會因為主執行緒一直忙著運算該耗時任務,而沒有時間更新畫面。輕者 …Kotlin Coroutines9 min read
Feb 14[從 Effective Java 了解 Kotlin] 覆寫 equals 以及 hashCode 方法Item 10 — Obey the general contract when overriding equals 在 Java 中,所有物件的源頭是 Object ,而 Kotlin 則是 Any,雖然這兩個的名稱不同,但是共同的點是,它們都有共同的函式: equals() , hashCode(), toString() 。(Kotlin 的 Any 只有這三個函式,而 Java 的 Object 還包含其他的函式)。 為什麼這三個函式是必要的呢? equal …Kotlin10 min read
Jan 17[從 Effective Java 了解 Kotlin] — 其實你不需要建造模式(Builder Pattern)Item 2: Consider a builder when faced with many constructor parameters — 物件導向的語言中,我們可以用類別 (class) 定義真實世界的東西,如下: 這個類別(User)是用來定義使用者的基本資料,在這個類別中,我們定義了幾個屬性:姓名(name)、年紀(age)、性別(gender)、地址(address)、電話(phone)、備註(note) public class User { enum Gender { …Kotlin10 min read
Jan 15[從 Effective Java 了解 Kotlin]— 用 Companion Object 來重複使用物件Item 1: Consider static factory methods instead of constructors — Java 與 Kotlin 都是屬於物件導向的程式語言。在物件導向的程式語言中,「物件」可謂是這種形式的語言的關鍵,我們知道所謂的物件,是將真實世界的東西抽象成一個類別(在 Java 與 Kotlin 中都是以 class 關鍵字定義),而在程式中,我們就可以將這些類別產生出一個又一個的物件。所以說,類別就是定義這個東西的樣貌,我們使用屬性(Pr …Kotlin6 min read
Nov 13, 2021[Kotlin 小撇步 #9] Value class — 數值類別在寫程式時,有時候我們會需要將某些值包起來,讓程式的可讀性更好。譬如,我們用來儲存密碼的資料型態為字串,我們通常會在我們的類別中宣告一個變數,並讓這個變數的型別設定為字串。 class Login(val password: String) 這樣做沒有什麼不好,為了更好的可讀性,我們可以用一個類別將密碼包起來。如下: data class Passwo …Kotlin5 min read
Oct 29, 2021Kotlin 的序列化工具Json (JavaScript Object Notation) Json 格式是用來讓 Server 與 Client 溝通的方式之一,而在多數的網站 Api 中,至少都會以 Json 作為發送的格式,之所以會那麼多地方使用,我想一方面是跟它的格式有關。 它是採用鍵-值(key-value) 的方式儲存數值,以及它的樣式是讓人類容易讀的,所以當我們取得一筆用 Json 編碼的資料時,不需任何的轉碼,我們就可以 …Kotlin23 min read
Aug 21, 2021在 ViewModel 處理 BroadcastReceiver 的資料MVVM 是將程式的架構分成 ViewModel-View-Model, View 層是負責繪製畫面, ViewModel 是資料與畫面中間的橋樑,在 ViewModel 中會使用 LiveData 存放資料,View 則會 Observe 在 ViewModel 層中的 LiveData,當資料有更新的時候,有在 View 中被 Observe …Android6 min read