最近在 refactor legacy code,遇到很尷尬的函式定義,笑也不是哭也不是。
函式會要求使用者傳入多個參數,有時並不是所有的參數都必須給值,函式的設計者會以大家較常使用的方式來當作參數的預設值,例如 PHP 裡面的「json_decode()」:
json_decode($json); // consider as json_decode($json, false)
json_decode($json, true); // 不使用預設值才手動傳數第二個參數
但這次遇到比較尷尬的是,legacy code 把第一個參數設計為 optional,也就是有預設值。但問題來了,在 PHP 的語法當中,呼叫函式無法在前幾個參數不給值:
getData( , 'some', 'option'); // syntax error
所以不管怎麼樣,都至少要給第一個參數:
getData(null, 'some', 'option');
所以把有預設值的參數放在前面其實根本沒有省下什麼時間呀 … XD