Home avatar

Miles Chou

天涯何處無幹話,何必要講實務話

Carbon(1)--PHP 世界的時光機

時間旅行一直以來都是電影或動漫的經典主題;時間處理也是--它是程式語言的經典卡關問題。

Carbon 是 PHP 的第三方時間處理套件。它繼承了原生的 Datatime,並新增了許多語意化的行為,讓處理時間的難度降低許多。

比方說:想像自己是未來世界的特南克斯,乘坐的時光機程式是用 PHP 寫的,那該如何知道 20 年前的 timestamp 呢?

讓 Carbon 來處理就很簡單:

向前人致敬!

大家在使用 Laravel 或是其他套件時,相信都用的非常開心。

但是否有想過,為何這些套件會這麼好用?新增功能,加個檔案就行了;修改功能,加個檔案就行了;移除功能,改個設定就行了。怎麼會這麼簡單?

而為何自己做的共用套件卻是常常被人嫌?該要有的功能都實作出來了呀,一樣都是共用,為何命運大不同?

這些套件會有這麼多 Star,當然是有原因的。

首先,套件是需要精心設計的。它們會遵守物件導向設計原則,做出適合擴展的設計,大家才能順利寫出客製化功能。

再來,不僅要有設計,也要有夠完整的測試。測試除了測功能,確保套件行為正常之外,還會測「身為開發者,會如何使用程式」;同時,測試也會是最好的範例文件。

最後還要有簡單易懂的說明文件,才能讓路過的開發者,在最短的時間理解套件的功能,並可以知道套件是否適用於自己的專案上。

無論是設計、測試或是文件,都是針對多數開發者需求而做的,也因此,大家才能夠愉快地開發。身為一個開發者,先對所有開源作者致上十二萬分的敬謝之意。

往後的日子裡,會開始研究套件的設計,了解巨人的肩膀是如何實作出來的,期望自己在提升設計能力之後,有朝一日也能成為開源作者的一員。

Map Type

許多語言都有提供 key-value 存放方法的 map 結構,Go 使用內建型態 map 實作。

map 型態的表示方法為:map[keyType]valueTypemap 是關鍵字,keyType 必須是可比較(Comparable)的型態,如 stringint 等,valueType 則是內容形態。