เห็นในกลุ่มภาษา Go นั้นมี quiz เรื่องของ Declaration และ Scope ในภาษา Go
รวมไปถึงเรื่องของ Block อีกด้วย
อ่าน code ใน quiz แล้วยังงง ๆ เลยไปนั่งดู Specification ของภาษาหน่อย
พบว่ามีรายละเอียดเยอะจริง ๆ
ดังนั้นลองมาเขียน code กันหน่อย
เริ่มด้วยตัวอย่าง code ซึ่งจะมี nest block
[gist id="6145e3c1900f16027076311a0fa4dd83" file="1.go"]
ผลที่ได้คือ
ในบรรทัดที่ 15 นั้นจะ compile ไม่ผ่าน
เนื่องจากไม่เห็นตัวแปร v
จาก code จะพบว่า ตัวแปร v นั้นถูกประกาศใน block {}
ซึ่งในบัรทัดที่ 15 นั้นอยู่นอก block
มาดู code ตัวอย่างที่ 2 กันอีก
ในบรรทัด 11 เพิ่มการกำหนดค่า 2 ให้กับตัวแปร v
[gist id="6145e3c1900f16027076311a0fa4dd83" file="2.go"]
ผลที่ได้คือ
2
2
แต่ถ้าเปลี่ยน code นิดหน่อยจากการกำหนดค่ามาเป็นการประกาศตัวแปร
[gist id="6145e3c1900f16027076311a0fa4dd83" file="3.go"]
จะได้ผลที่ต่างออกไปคือ
2
1
ซึ่งทำให้เห็นว่า scope หรือขอบเขตการใช้งานของตัวแปรนั้น ๆ
ขึ้นอยู่กับว่ามันประกาศอยู่ตรงจุดไหน
ถ้าประกาศอยู่นอกสุดแล้ว ข้างในหรือ innner block ก็ใช้ได้ดังนี้
[gist id="6145e3c1900f16027076311a0fa4dd83" file="4.go"]
และใน level เดียวกันก็ไม่สามารถประกาศซ้ำได้นะ
[gist id="6145e3c1900f16027076311a0fa4dd83" file="5.go"]
พอลองมานั่งอ่านและเขียนดู ก็ทำให้เข้าใจขึ้นเยอะเลย
ว่าแต่การเขียนแบบ nest block แบบนี้ไม่ค่อยได้ใช้งานเลย
ขอให้สนุกกับการเขียน code นะครับ
↧