易讀(Readable)心理

Readable


Members 的存取權限在 class 中的位置按何順序排列為佳?
  • 如果把私有成員定義放在後面,讀者閱讀會更容易。因為人們認識一個事物的通常過程都是從一般到特殊,從抽象層次來說,是從高層次到低層次的認識過程。如果你倒過來的話,讀者就不能從整體上把握事物,也不能抓住事物的本質,只能在一堆具體的片段中迷失。
  • 整體的抽象讓你忽略了細節。抽象的層次越高,你可以忽略越多的細節。讀者閱讀一個類時可以忽略的細節越多他會越高興。腦袋裡填充太多的細節是痛苦的,所以細節越少越好。因此,將私有成員放在最後會顯得更富有同情心,因為這樣阻止了不必要的細節顯露給讀者。

本來C++程序的習慣也是像Java一樣把private成員放在最開始。然而,C++社區迅速的認識到這是一個有害的規範,這個規範現在已經被修正。

public 接口應該放在class的最開始,其次是protected成員,最後是private成員。原因是:

  ◆程序員應該更關心接口而不是具體實現。

  ◆當程序員需要用一個類的時候,他們需要的是接口而不是實現。

  把接口放在開始是非常有意義的。把實現部分,私有部分,放在開始是一個歷史遺留問題。最後還是要反覆強調一下,一個類的接口的重要性超過實現細節。

  同樣,倫敦大學帝國學院關於C++的指面中也說到:把公有的部分放在前面,讀者會更感興趣閱讀,然後是保護的部分,最後是私有的部分。

  有人會持反對意見,認為讀者可以使用程序文檔來理解類,而不是直接看源代碼。這種理由似乎不成立,因為程序文檔中沒有相關的實現細節,這時看源代碼是很有必要的。

  所有的技術文檔,通常都把難理解的資訊放在開頭,比如抽象的學術論文。為什麼Java不打破這種常規呢?把私有成員放在最開頭部分看起來是不是打破常規的好習慣。這種習慣似乎是sun早期的編碼規範造成的。

  將代碼按照javadoc的順序編排是非常好的:首先是構造方法,然後是非私有方法,最後是私有部分和方法。這樣讀者閱讀的時候很自然的從抽象層次的高向低運動。

Comments