Day02 為資料命名


為資料命名

  • 三種情況
  • 簡短命名 (short name) 與自証命名 (self-evident name) 的選用
  • 常用的『組合命名法』

三種情況

在寫 Clojure 時,有三種情況,會需要為資料取名:

  1. var
  2. let-bound
  3. function parameter

var 近似於其它語言的全域變數、或是物件的私有變數 。let-bound 近似於其它語言的區域變數。

這邊有一個比較表: O 表示,我們在命名時可以控制。X 表示,我們在命名時無法掌握。sign 表示的是命名的文字本身。referent 表示的是命名所指向的值本身。

sign referent
var O O
let-bound O O
function paramter O X

很明顯的是,function parameter 與其它兩者最大的差異在於,我們可以為它命名,卻無法在命名時掌握 function parameter 日後會指向的『值』。這件事該如何改善呢? 尤其 Clojure 又是一種動態型別的語言。如果我們知道合理的值,它應該有一些不變的特性的話,我們可以用 schema 來檢查。

簡短命名與自証命名的選用

命名如果可以使用清楚的自証命名 (self-evident name),當然很好,看到名字就可以理解意涵。然而,如果一個值會被重複地使用,我們傾向使用簡短命名,而非自証命名。

比方說,下列這一段程式碼,g 因為會被多次使用,刻意使用簡短命名。

(doseq [g (->> planets
               (remove gas-planet?)
               (map surface-gravity))]
  ...)

那,有沒有可以魚與熊掌兼得的方法呢? 又使用自証命名來突顯意涵,又使用簡短命名,讓程式碼容易撰寫。有時候也是可以的,比方說,改成這樣子:

(let [surface-gravities (->> planets
                        (remove gas-planet?)
                        (map surface-gravity))]
  (doseq [g surface-gravities]
     ...))

常用的命名組合法

value name
任意值 x
任意值的序列 xs
函數 f
函數的序列 fs
映射 m
映射的序列 ms
兩個不同的值 a 與 b 構成的向量 a+b
兩個不同的值 student 與 tutor 構成的向量的序列 student+tutors
#name #Clojure
Elements of Clojure 一書,談的不只是 Clojure ,而是 senior programmer 了解、卻不易對他人明說的隱性知識 (tacit knowledge)。






Related Posts

搭配Windows工作排程, 讓Python自動執行

搭配Windows工作排程, 讓Python自動執行

MTR04_0620

MTR04_0620

[ 筆記 ] JavaScript - npm 套件管理工具

[ 筆記 ] JavaScript - npm 套件管理工具

Bicycle Kinematic Model 實作小筆記

Bicycle Kinematic Model 實作小筆記

[0] 寫在一開始,關於這個系列文

[0] 寫在一開始,關於這個系列文

[ 筆記 ] CSS - FlexBox

[ 筆記 ] CSS - FlexBox



Comments