Saturday, December 25, 2021

[用Golang寫小遊戲教學] 第二章 基本型別、變數宣告與常數宣告

[前言]

了解"基本型別"與"變數宣告"是開始學習程式語言的第一步。我們其實不需要一次把所有的觀念與知識都學到位,這對於初學者或是小朋友來說太過於複雜,這裡就先介紹比較常見的部分。

這篇的教學還不需要用到本機上安裝的Go來執行,我們會用 The Go Playground (網頁版)來練習。


[變數宣告]

在電腦的世界中,每個程式都需要在記憶體中儲存一些資料,資料被儲存在特定的記憶體位置,變數只是為儲存資料的記憶體位置所取的一個方便的名稱。除了名稱外,每個變數還有關聯的型別。型別用來定義存放的資料是屬於何種型態,像是整數或是字串等等,在後面的段落將說明何為資料型別。

    我們先看一個例子: var myScore int = 100,並參考下圖

圖1: 變數宣告

在圖1 之中,說明剛剛的例子,宣告一個變數名稱為myScore,其為整數(int)型別,並且初始化給予一整數值 100。

如果覺得很難理解圖1所表達記憶體位置的意思,沒有關係的!  這不會影響目前學習,就暫時知道有這件事就好~


在 Golang 中,使用 var 關鍵字我們有好幾種方式宣告變數 
注意: 此方式常用在函數之外的位置,屬於全域變數

1. 使用 var 關鍵字來宣告變數,例如: 

var myScore int = 100

 

2. 使用 var 關鍵字來宣告多個變數,例如: 

var myScore1, x1, y1 int = 100, 10, 50

 

3. 使用 var 關鍵字與小括號來宣告多個變數,例如: 

var (
    myScore2 int = 100
    x2 int = 10
    y2 int = 50
)

func main() {
...
}

 

注意: 在宣告變數時若不給值,則Golang編譯器會提供初始值為零值


    在 Golang 中,我們也可以不使用 var 關鍵字來宣告變數,這種方式稱為變數短宣告 (我個人稱之為懶人法),就是在等號前多一個冒號。哪你會問: 型別如何決定?  型別由等號右邊的資料或是回傳值型別決定。

注意: 變數短宣告不能在function函式外使用。


我們來改寫之前的例子:

myScore := 100

myScore1, x1, y1 := 100, 10, 50

myScore2 := 100
x2 := 10
y2 := 50

 

[常數宣告]

當我們了解了變數宣告之後,常數宣告便更能理解,簡單的來說,被宣告的常數名稱所賦予的值不能再被更動,例如:

const myScore int = 100
const myScore1, x1, y1 int = 100, 10, 50
const (
myScore2 int = 100
x2       int = 10
y2       int = 50
)

注意: 在宣告常數後,常數的值不能再被更改


[基本型別]

Go語言已經包括了一些預先定義型別(Pre-declared Type),這裡先介紹常見的,包括了布林、數字與字串型別。這些型別是會影響了未來在變數宣告時,此變數可存放的資料。以剛剛之前介紹的變數宣告的例子,myScore 就不能賦予 非整數的資料,例如: myScore = "Danny",在程式執行就會失敗。


  • 布林型別

    名稱為 bool,只有兩個預先定義的常數 true 與 false,我們會用布林型別大都是在條件判斷的時候使用,例如:

if isEmpty == true {
    // do something
}

  • 數字型別

    為整數與浮點數的集合。對於整數來說,只要先知道int部份即可,使用數值可使用的範圍如下表的int所示

參考: 整數支援無號與有號整數,名稱分別為 uint 與 int,int 長度會與 uint 相同,而 uint 長度視平台實作而異,可能是 32 位元或是 64 位元。

uint8 0 ~ 255
uint160 ~ 65535
uint320 ~ 4294967295
uint640 ~ 18446744073709551615
int-9223372036854775808 ~ 9223372036854775807
int8-128 ~ 127
int16-32768 ~ 32767
int32-2147483648 ~ 2147483647
int64-9223372036854775808 ~ 9223372036854775807                                        

浮點數有兩種型別,分別為 float32、float64,可使用數值範圍如下表所示:

float320 ~ 340282346638528859811704183484516925440.000000
float640 ~ 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000


  • 字串型別

Go 的字串 string 在實作上使用 UTF-8(一種編碼方式,可以先忽略其意義),當使用雙引號包裹一系列文字,會產生字串型別。

例如宣告一個字串變數 danny,並且給值 "大豬豬"

var danny string = "大豬豬"


[練習時間]

Pratice Time! 之前介紹了好幾個Golang基本型別與變數宣告,接下來我們開始實際練習。一定要親自動手寫與執行程式,一次就會印象深刻。


練習一 變數宣告

https://go.dev/play/p/wKzAoki3lt5

我們把之前利用var宣告變數的例子放在這邊,並且使用fmt.Println()函式來印出結果。按下紅色框框內的按鈕(Run)就會執行程式。
注意: 函式不懂沒關係,我們只是先利用它的功能。



練習二  常數宣告

https://go.dev/play/p/iYWdpzJJV2a


練習三  變數短宣告

https://go.dev/play/p/0rB0oCkSypU

我們把利用變數短宣告的例子放在這邊,並且使用fmt.Println()函式來印出結果



No comments: