Golang Basic EP2 | ตัวแปรและ zero value

Golang Basic EP2 | ตัวแปรและ zero value

ในภาษาโก ตัวแปรสามารถแบ่งออกเป็นชนิดต่างๆ ได้หลายประเภท และแน่นอนว่าผมเองก็ไม่เคยใช้มันหมดทุกตัว

ประเภทพื้นฐาน (Basic Types)
ตัวเลขจำนวนเต็ม (Integer Types)

– int
– int8
– int16
– int32
– int64
– uint
– uint8
– uint16
– uint32
– uint64
– uintptr

ตัวเลขทศนิยม (Floating Point Types)

– float32
– float64

ตัวเลขเชิงซ้อน (Complex Types)

– complex64
– complex128

บูลีน (Boolean)

– bool

อักขระและสตริง (Character and String Types)

– string
– rune (alias สำหรับ int32)
– byte (alias สำหรับ uint8)

ซึ่งการประกาศตัวแปรในภาษาโกนั้น เขียนได้สองแบบคือ

เติมคำว่า var ข้างหน้า พร้อมกับ type ข้างหลังเช่น var a1 string นั่นหมายความว่า เราได้สร้างตัวแปรที่ชื่อว่า a1 ที่มี type เป็น string ขึ้นมาแล้วนะ ซึ่งมีค่าเป็น zero value นั่นก็คือ empty string นั่นเอง

เอ๊ะ แล้ว zero value มันคืออะไร ?
zero value ก็คือค่า default value ของ type นั้นๆ เมื่อเราประกาศตัวแปรแบบไม่ได้ระบุค่ามันจะมีค่าเป็น default value เสมอ ซึ่งก็คือ string มีค่าเป็น “” หรือที่เรียกกันว่า empty, ซึ่ง int ก็จะมีค่าเป็น 0, bool มีค่าเป็น false, slice มีค่าเป็น nil อะไรประมาณนี้

กลับมาเรื่องการประกาศตัวแปรในข้อ 1 ถ้าเราต้องการประกาศตัวแปรพร้อมกับระบุค่าเราก็จะเขียนได้แบบนี้ var a1 string = “Hello world”

การประกาศตัวแปรอีกแบบก็คือ a1 := “” หรือถ้าอยากระบุค่า ก็แค่เขียนแบบนี้ a1 := 0

คำถามคือ แล้วสองแบบนี้มันต่างกันยังไง?

การประกาศแบบใช้ var มันสามารถประกาศนอก function ได้ เป็น global variable (ตัวแปรที่ function หรือ package ใดๆ ก็สามารถเรียกใช้ได้) ในขณะที่ การประกาศแบบ := มันไม่สามารถประกาศนอก function ได้ ต้องเขียนใน function เท่านั้น

การประกาศแบบใช้ var สามารถที่จะ ไม่ระบุค่าได้ กล่าวคือ หากคุณประกาศ boolean แบบ var a1 bool คุณก็จะได้รับค่า zero value ที่เป็น false เลย ในขณะที่การประกาศแบบ := คุณต้องระบุค่าให้มันเสมอ นั่นก็คือ a1 := false

เพื่อให้เห็นภาพ ให้คุณลองดูโค้ดนี้ดู

ลองสังเกตุดีๆ จะเห็นว่า ต้วแปร a2 ที่อยู่นอก func main กับ a2 ที่อยู่ใน main ทำไมมันถึงสามารถใช้ชื่อเดียวกันได้ นั่นก็เพราะว่า มันทำงานกันคนละ scope ไง มันคือคนละตัวกัน ถ้าคุณประกาศตัวแปรที่ชื่อ a2 ใน function main คุณจะไม่มีทางใช้ตัวแปร a2 ที่อยู่นอก main ได้ แต่ถ้าหากคุณต้องการใช้ตัวแปร a2 ที่อยู่ข้างนอก main ละ ต้องทำยังไง? คำตอบก็คือดูในรูปนี้

ที่นี่ลองพิจารณาดูรูปข้างล่างนี้ดูว่าทำไมถึง error ล่ะ

คำตอบก็คือ คอมพิวเตอร์มันอ่านโค้ด มันอ่านจากบนลงล่างมาเรื่อยๆ
บรรทัดที่ 9 บอกว่า a2 เป็น int นะ (จากการระบุค่า 10 เข้าไป) เมื่อมาถึงบรรทัดที่ 10 เราประกาศ var a3 bool = a2 นั่นหมายความว่า มันจะไปเอาค่าจาก a2 บรรทัดข้างบนล่าสุด นั่นก็คือบรรทัดที่ 9 ใส่ให้กับ a3 ในความคิด มันก็ควรจะเป็น var a3 bool = 10 อะเนาะ แต่เปล่า มันไม่สามารถเป็นแบบนั้นได้ครับ เพราะภาษา golang เป็นภาษาที่คุณประกาศ type อะไรมา คุณต้องระบุค่าเข้าไปให้ถูกต้องกับ type ดังนั้นจากตัวอย่างนี้ มันเลยระบุไม่ได้ เพราะ a3 เราประกาศเป็น boolean ซึ่งค่าของ boolean คือ true กับ false ส่วน 10 นั้นเป็นตัวเลข มันเลยเกิด error นั่นเองง

กลับมาที่การประกาศตัวแปร var กับ := แล้ว… เราจะใช้แบบไหนดีล่ะ? ผมสรุปให้ว่า

การประกาศตัวแปรแบบใช้ var:
– เหมาะสำหรับการประกาศตัวแปรในระดับ package
– ใช้เมื่อคุณต้องการระบุชนิดข้อมูลอย่างชัดเจน
– ใช้เมื่อคุณต้องการประกาศตัวแปรโดยไม่ต้องกำหนดค่าเริ่มต้น
การประกาศตัวแปรแบบใช้ :=
– เหมาะสำหรับการประกาศตัวแปรภายในฟังก์ชัน
– สะดวกและรวดเร็วในการเขียนโค้ด โดยไม่ต้องระบุชนิดข้อมูล
– ใช้เมื่อคุณต้องการประกาศและกำหนดค่าเริ่มต้นในบรรทัดเดียว

แต่ทั้งนี้ทั้งนั้น มันก็แล้วแต่ความสะดวกของคุณเองแหละ

Please follow and like us:
Pin Share