Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

ว่าด้วยเรื่องของ Scope ในภาษา Go

$
0
0

เห็นในกลุ่มภาษา 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 นะครับ

Viewing all articles
Browse latest Browse all 1997

Trending Articles