資料型態
現在我們已經學會了幾種最基本的指令,用於宣告常數的let
、用於宣告變數的var
,以及用於把資料印出來的print
,還有嚴格說起來不是一條指令,而是用於註解的//
。我們可以開始在線上模擬器把玩看看。例如,想要電腦計算一個半徑是10
的圓形面積,並印出「面積是314
」這樣的訊息。
var 半徑 = 10 let 圓周率 = 3.14 print (面積是 半徑*半徑*圓周率)
點擊執行!咦,怎麼會產生錯誤呢?
Swift:: Error: use of unresolved identifier '面積是'
這個錯誤的意思是電腦找不到名為面積是
的資料,而我們這邊並不是想讓電腦印出名為面積是
的資料裡面儲存著什麼,而只是單純地想印出面積是
字樣,參考一下我們最開始進入模擬器時的程式碼:print("Hello World!")
,原來要印出的字,是得用雙引號包住的,如此電腦會直接將它認為是一個值,就像10
或者3.14
這樣。
print ("面積是" 半徑*半徑*圓周率)
還是產生了錯誤,我們看看錯誤訊息是什麼:
Swift:: Error: expected ',' separator
這個錯誤的意思是,電腦提示我們要用逗號分開「面積是」和「半徑*半徑*圓周率」這兩個不同的東西,順帶一提,連續印很多個不同的資料的時候,都得用逗號分開,例如print("教主的身高是", a, "體重是", b)
。我們增加了逗號之後,執行看看。
Swift:: Error: binary operator '*' cannot be applied to operands of type 'Int' and 'Double' print ("面積是", 半徑*半徑*圓周率) ^
還是有錯誤!這行錯誤翻譯成中文意思是這樣的,電腦認為我們想對type 'Int'
和type 'Double'
進行乘法,而它無法理解這種行為,這是什麼意思呢?想像你今天突然被問這樣的問題:「教主乘以三是多少?」
你可能會愣一下,然後回答「應該是三個教主吧。」科學上或許這不算是個完美的答案,但可以被接受。
那麼現在再問你一個新問題:「教主乘以兩個披薩,再加上六公里,是多少呢?」「神經病吧。」
電腦當然不會這麼不禮貌,它只會忠實的反映問題:「主人,教主和披薩和公里,是沒辦法做加法和乘法的啦。」這就是本章的重點「資料型態」:我們在使用資料時,還得和電腦說明它是什麼種類的資料,如果我們沒有說明的話,電腦就會自動推斷,像本章所寫的前兩行程式碼,電腦將var 半徑 = 10
推斷為Int
,並且將let 圓周率 = 3.14
推斷為Double
,當我們嘗試去對它們做乘法的時候,就像把披薩和公里相乘一樣,因為型態不同而產生了錯誤。
我們先給大家介紹幾種最基本的資料型態:
Int
:「整數型態」,如果一個數值沒有小數點,電腦會自動假設它是Int
。Double
:「小數型態」,如果一個數值有小數點,電腦會自動假設它是Double
。Float
:「小數型態」,與Double
的差別是它使用較少的記憶體,因此容許的最大位數也較少。String
:「字串型態」,字串可以是任意文字,甚至包含 Unicode 內含的表情符號如 🚀 等等,兩端加上雙引號。
現在我們了解了這個概念後,對程式碼做出些微調整。
var 半徑:Float = 10 let 圓周率:Float = 3.14 print ("面積是", 半徑*半徑*圓周率)
這次我們藉由資料名稱:資料型態
這種語法,告訴電腦半徑
和圓周率
都是Float
類型(即使半徑
是一個沒有小數點的數!),由於電腦知道怎麼計算Float
之間的乘法,因此程式正確執行了!