良好程式碼的優點大同小異。
不好的程式碼的糙點卻各有巧妙之處。
-- 普羅民遮城(赤崁樓)稜堡遺跡
1960年的赤崁樓整修,很遺憾地竟然把所有木構架的構造,全換為鋼筋混凝土,顏水龍在1944年的油漆彩繪,也被重做一遍。1
而這麼樣的一個荷蘭城堡擁有閩式建築也不是一開始就長這樣的。中法戰爭,法國會來打台灣,有個理由就是,台灣的台南有一座「西洋人的古城堡赤崁樓」,代表台灣在幾百年前是西洋人的領土。
所以當時的台灣人,為了不想讓西式城堡赤崁樓變成洋人打台灣的原因,於是先把赤崁樓的西洋城堡的洋人特色破壞掉;清法戰爭後,並在上面蓋兩座閩式的亭台樓閣。而台中霧峰的林朝棟也是捐錢建赤崁樓的仕紳之一。
林朝棟(林家)本來是台灣中部霧峰一帶發展,林朝棟晚年住在福建,原本跟台南是沒有關係的,但因為清法戰爭(有的書寫中法戰爭)之故,所以就捐錢給台南的赤崁樓建亭台樓閣。
所以嚴格說起來,赤崁樓早已改變了兩次建築風格型式。西式城堡與閩式木構造建築。現存已是水泥式的古蹟。
建構式,用在類別要建立物件時,執行物件的 property 與 config 之類的初始化行為。
是嘛~
來看看這一段古代文明
class SuBase {
constructor() {
this.mainService = new ServiceKernel()
}
// other methods
}
function SuBaseInitailize() {
DatabaseConnecting(DB_CONNECTION_STRING);
DatabaseConfigSqlLog(config_sql_log_path_file);
SuBase rtn;
rtn = new SuBase();
return rtn;
}
class main {
constructor() {
this.isInial = true
this.suBase = SuBaseInitailize()
if (!this.suBase) {
alert("Initialize error!", "Warning!")
this.isInial = false;
} else {
if (!suBase.setSystemMessage()) {
alert("Initialize error!", "Warning!")
this.isInial = false;
}
}
}
// other methods
}
看得它的建構在建構什麼鬼東西嗎?
最後,改成這樣呢?
讓 Database 的初始,放在 ServiceKernel
裡。
檢查 Database 的初始狀況是否正常,不正常要反饋訊息
class main {
constructor() {
this.mainService = new ServiceKernel();
if (!mainService.IsDataBaseInitialSuccess()) {
console.log ("Initialize error!", "Warning!")
}
}
}
好好的把 code 用正確的語意寫出來,其實程式碼就可以簡單又明瞭。
難就難在,你不懂這個語法!!! (嗎?)
湊出來的 code 只是會動,但是並不能表達你的意思。無法將意念傳達給另一個開發者,只能將語法給機器。
代表的是,你在寫 code 的過程,只想完成工作,不想與伙伴溝通。
如果不是這樣,請務必!務必收尾,務必重構,務必檢查你的語意是不是和語法咬合。
這種語法與語意的契合,如同音樂的「詞曲咬合」[2]裡,說話的聲調與樂譜的音調要合一。大概是唱歌如同說話,說話如何唱歌。(我不懂音樂,如果講錯的話,請務必更正,不過那種契合的藝術是我想表達的)
瑪莎:當詞曲不是同一個人創作的時候,歌詞與旋律的咬合精準度有時會被忽略。但即使是出道早期,李宗盛大哥並不太對我們的作品提出調整意見,畢竟每個時代都有自己的模樣,即使我現在聽新銳創作者的歌曲,也不會拿我所認知的「好歌詞」的標準套用,因為環境背景都不一樣了。既然音樂有它本身的自由程度,那對方所做的事情就不一定不正確。[3]
當軟體要解決的問題不同時,軟體的架構與語法也要調整。
當軟體專案很多人開發時,更要注意溝通的問題,並且讓咬合一致。
音樂並不是工程問題,軟體是創作,也是工程問題,所以有著相似的道理但是不同的問題。
[2]: 音樂評論裡說的「詞曲咬合」是怎麼一回事? - 知乎
[3]: 【馬世芳X瑪莎】我們是這樣看中文歌詞的