| 臨摹 | 演算法 | 程式人 | Kata | 重構 | 林信良.程式學習 | 開發

程式臨摹的三個姿勢

學習書法等新的技能時,我們經常會用到「臨摹」,而在開發應用程式時,也不例外,對於資深人員而言,可以獲得更多認識和技巧,也能有更多機會去實現不同的演算法

2020-04-16

| 程式學習 | 程式人 | 林信良 | 巨集 | foreach | 前置處理器指令 | preprocessor directive | C語言

巨集與語法糖

我們可以運用巨集,來消除重複,也就是透過前置處理器指令去定義文字替換的規則,產生另一組程式碼,甚至還能創造語言本身沒有的語法,就像自定語言的語法糖!

2020-04-09

| 剖析器 | 剖析樹 | LL | LR | 程式學習 | 林信良 | 程式人

LL/LR不神祕

對於文字剖析處理,也是設計語言時,會接觸到的工作,因為描述文字結構的方式就是語言的文法,而在實現剖析器之際,就已在設計文法。不過,為何還有LL剖析器與LR剖析器之別?

2020-04-02

| 程式人 | 林信良 | 規則表示式 | 文法 | 程式學習

語言文法淺淺談

想要撰寫程式碼,我們可以試著自行構造語言,要如何著手呢?關鍵在於文法的設計,事實上,如果在程式開發過程中,我們曾訂定數學公式與規則表示式的經驗,就已經涉及語言的定義

2020-03-19

| 程式人 | 林信良 | 垃圾收集 | 程式學習 | C++智慧指標

從智慧指標到垃圾收集

程式碼執行之後,若要回收不會再繼續使用的記憶體資源,可透過程式語言的垃圾收集來進行,以C++而言,先前並未有這樣的機制,從C++ 11開始可用智慧型指標來處理,但這之前是如何處理的?

2020-03-13

| 程式學習 | 程式語言 | 林信良 | 程式人 | C++ | 傳遞函式 | 函子 | Functor | lambda運算式 | 函式物件

從C++看一級函式

在程式語言C++當中,關於函式的傳遞,目前有很多種可行的作法,而依照開發者當下應用目的不同,函式指標、函子、lambda運算式,都可以是選擇

2020-03-05

| 程式學習 | 林信良 | 程式人 | Pass by value | 傳值 | 傳參 | Pass by reference | C++ | Java

傳值?傳參?

在不同的程式語言當中,若剛好有同名的術語存在,應該搞清楚它在該語言中確切的定義,而不是硬用其他語言中的定義,甚至是不清楚來源的名詞來理解。

2020-02-27

| C++ | Unicode | 程式學習 | 林信良 | 程式人

C++與Unicode

在C++中wchar_t、char16_t、char32_t用於儲存Unicode碼點,char用於儲存UTF編碼實現的碼元,若能清楚掌握何者為儲存碼點,何者是字元編碼實現,就能釐清之間的差別

2020-02-13

| Go | Unicode | UTF | 程式開發 | 程式學習 | 程式人 | 林信良

從Go學Unicode、UTF

在多國語言的編碼上,很多人看到Unicode、UTF,總感到難以區分,因為程式語言隱藏了處理細節,並且對於這部份的定義很模糊,此時,不妨從Go的相關套件著手,也有助於理解之間的差異

2020-01-23

| 鴨子定型 | Duck typing | Go語言

有個性的Go鴨子

編譯時期的鴨子定型,代表著開發者對於型態的掌握,實際上還是有其必要的,因為,如此才能知道複雜度被藏在哪裡,以及問題會發生在編譯時期或執行時期

2020-01-16

| 程式語言 | Go | 函式錯誤 | 錯誤處理

Go的錯誤處理實踐

表面上,程式語言Go以值傳回錯誤的作法,會造成程式碼中四處檢查錯誤的麻煩,實際上,這麼做可以帶來更多的設計方式,讓你優雅地處理錯誤

2020-01-09

| 林信良程式人程式開發程式學習 | JavaScrip | 函數式

解開對函數式的誤解

使事情單純化,是傳遞函式的目的之一,若要強制開發者寫出意圖單一、實作單純的簡明函式,我們在實作時會採用不可變特性,而這麼做的最重要目的,在於釐清副作用函式與純函式的界線

2019-12-26