為資料命名

  • 三種情況
  • 簡短命名 (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







Related Posts

Leetcode 刷題 pattern - Fast & Slow Pointer

Leetcode 刷題 pattern - Fast & Slow Pointer

[day 04] Class & constructor: 吃語法糖別噎到

[day 04] Class & constructor: 吃語法糖別噎到

週末台中聚加完成第 7 週卡關作業

週末台中聚加完成第 7 週卡關作業




Sponsored



Comments