Mar 31 2008

表頭檔要不要?拿速度來換!

本文要提出的內容,是一個非常基礎的程式觀念:表頭檔 (Header Files) 與編譯依存關係的課題。雖然對於許多程式設計者來說,這個觀念技巧應該是相當基本而且必備的基礎知識,但在現實世界中,我卻時常看到許多人忽略了這個問題的重要性,因而造成專案開發流程中的重大災難。

來看看實際的範例。例如在專案中有一個 GameObject 類別,用來實作遊戲物件的相關操作行為:

// @ GameObject.h
#include < string >

class GameObject
{
public:
    int GetType();
    std::string& GetName();

private:
    int m_iType;
    std::string m_kName;
};

有了基礎的遊戲物件類別之後,自然會陸續建構並且實作出其他的類別。當 GameObject 需要使用或包含其他的類別時,可能會在類別中定義一個該類別的成員變數,以結合 GameObject 類別進行更複雜的操作行為。例如,可能會在 GameObject 類別中,加入一個 ComponentA 類別的物件定義遊戲物件的基本組件:

// @ GameObject.h
#include < string >
#include "ComponentA.h"

class GameObject
{
public:
    int GetType();
    std::string& GetName();
    ComponentA& GetComponentA();

private:
    int m_iType;
    std::string m_kName;
    ComponentA m_kCompA;
};

繼續閱讀 << "表頭檔要不要?拿速度來換!"


Feb 18 2008

程式碼的版面配置與風格樣式

什麼是程式碼的版面配置 (Layout)風格樣式 (Style)?用一句話簡單說明就是:程式碼呈現出來的樣貌

在程式碼的文字檔案中,除了有意義(或混亂)的程式碼與註解文字之外,佔據其他空間的正是所謂的版面配置元素;也就是程式碼中的空格、空行、斷行、縮排、括弧等元素。 正所謂「人要衣裝,程式要風格」,利用這些版面配置元素將程式碼好好打扮裝飾一番,不僅能夠讓程式碼看起來賞心悅目,使閱讀程式碼的人功力大增,更能夠讓程式碼的邏輯與結構更加清楚顯著地展現出來。可說是一舉數得、好處多多,真是「居家寫 Code,出門上班」的最佳良伴啊~

版面配置是對於程式結構的有用指引線索。良好的配置方案能夠使程式的視覺化結構與邏輯結構相符合,傳達給人類與電腦相同意義的訊息。在此要再次引用《Refactoring》書中所寫的一句經典:

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

在撰寫程式的過程裡,較少部分的工作成效,是為了使得電腦能夠瞭解程式碼;而較多部分的努力,是為了使得其他的人類能夠讀懂程式碼。在這個前提之下,程式碼如果能夠達到良好的視覺化配置,就可以恰如其份地展現出一個程式的邏輯結構。程式碼的配置和風格,不會影響到外在可見的因素,例如執行速度、記憶體使用等等,而是對於易讀性、可修改性有很大的影響。並且必須在程式專案初始建構的時期,就將這個議題納入考量。

繼續閱讀 << "程式碼的版面配置與風格樣式"