เห็นในกลุ่มภาษา Go นั้นมี quiz เรื่องของ Declaration และ Scope ในภาษา Go
รวมไปถึงเรื่องของ Block อีกด้วย
อ่าน code ใน quiz แล้วยังงง ๆ เลยไปนั่งดู Specification ของภาษาหน่อย
พบว่ามีรายละเอียดเยอะจริง ๆ
ดังนั้นลองมาเขียน code กันหน่อย

เริ่มด้วยตัวอย่าง code ซึ่งจะมี nest block

ผลที่ได้คือ
ในบรรทัดที่ 15 นั้นจะ compile ไม่ผ่าน
เนื่องจากไม่เห็นตัวแปร v
จาก code จะพบว่า ตัวแปร v นั้นถูกประกาศใน block {}
ซึ่งในบัรทัดที่ 15 นั้นอยู่นอก block

มาดู code ตัวอย่างที่ 2 กันอีก
ในบรรทัด 11 เพิ่มการกำหนดค่า 2 ให้กับตัวแปร v

ผลที่ได้คือ
2
2

แต่ถ้าเปลี่ยน code นิดหน่อยจากการกำหนดค่ามาเป็นการประกาศตัวแปร

จะได้ผลที่ต่างออกไปคือ
2
1

ซึ่งทำให้เห็นว่า scope หรือขอบเขตการใช้งานของตัวแปรนั้น ๆ
ขึ้นอยู่กับว่ามันประกาศอยู่ตรงจุดไหน
ถ้าประกาศอยู่นอกสุดแล้ว ข้างในหรือ innner block ก็ใช้ได้ดังนี้

และใน level เดียวกันก็ไม่สามารถประกาศซ้ำได้นะ

พอลองมานั่งอ่านและเขียนดู ก็ทำให้เข้าใจขึ้นเยอะเลย
ว่าแต่การเขียนแบบ nest block แบบนี้ไม่ค่อยได้ใช้งานเลย
ขอให้สนุกกับการเขียน code นะครับ

Tags: