การกำหนดขอบเขตแบบสถิตและแบบไดนามิก

สำรวจข้อขัดแย้งพื้นฐานระหว่างกฎการกำหนดขอบเขตแบบคงที่และแบบไดนามิก

การกำหนดขอบเขตแบบสถิตและแบบไดนามิก

ขอบเขตของตัวแปรหมายถึงขอบเขตของโปรแกรมที่สามารถเข้าถึงตัวแปรนั้นได้ การกําหนดขอบเขตช่วยแยกตัวแปรที่ใช้ในส่วนต่างๆ ของโปรแกรมออกจากกัน แม้ว่าจะมีชื่อเดียวกันก็ตาม นี่เป็นสิ่งสําคัญเนื่องจากโปรแกรมเมอร์มักใช้ชื่อตัวแปรทั่วไปซ้ํา เช่น i, x, หรือ count ในส่วนต่างๆ ของโปรแกรม.

การกําหนดขอบเขตโดยทั่วไปแบ่งออกเป็นสองประเภท:

  1. การกําหนดขอบเขตแบบคงที่
  2. การกําหนดขอบเขตแบบไดนามิก

การกําหนดขอบเขตแบบคงที่: 

หรือที่เรียกว่าการกําหนดขอบเขตคําศัพท์ จะกําหนดขอบเขตของตัวแปรตามโครงสร้างของรหัสโปรแกรม ในวิธีนี้การผูกตัวแปรสามารถกําหนดได้โดยการตรวจสอบข้อความของโปรแกรมโดยไม่คํานึงถึงวิธีที่โปรแกรมดําเนินการในรันไทม์ คอมไพเลอร์จะค้นหาตัวแปรตามลําดับต่อไปนี้: บล็อกปัจจุบัน, บล็อกการปิดล้อม, ขอบเขตส่วนกลาง ภาษาโปรแกรมสมัยใหม่ส่วนใหญ่ เช่น C, C++, Java และ Python ใช้การกําหนดขอบเขตแบบคงที่ เนื่องจากขอบเขตเป็นที่รู้จักในเวลาคอมไพล์ จึงทําให้โปรแกรมเข้าใจ ดีบัก และปรับให้เหมาะสมได้ง่ายขึ้น.

// A C program to demonstrate static scoping.
#include<stdio.h>
int x = 10;

// Called by g()
int f()
{
   return x;
}

// g() has its own variable
// named as x and calls f()
int g()
{
   int x = 20;
   return f();
}

int main()
{
  printf("%d", g());
  printf("\n");
  return 0;
}

เอาท์พุต : 

10

การกําหนดขอบเขตแบบไดนามิก:

ค่าของตัวแปรถูกกําหนดโดยการเรียกฟังก์ชันล่าสุดในสแต็กการเรียกของโปรแกรม แทนที่จะทําตามโครงสร้างโปรแกรม ระบบรันไทม์จะค้นหาคําจํากัดความตัวแปรในห่วงโซ่ของการเรียกฟังก์ชันที่ใช้งานอยู่ ลําดับการค้นหาคือ: ฟังก์ชันปัจจุบัน, ฟังก์ชันการโทร, ฟังก์ชันที่สูงขึ้นในสแต็กการเรียก ไม่ค่อยได้ใช้ในภาษาโปรแกรมสมัยใหม่.

// Since dynamic scoping is very uncommon in 
// the familiar languages, we consider the 
// following pseudo code as our example. It
// prints 20 in a language that uses dynamic
// scoping.   

int x = 10;

// Called by g()
int f()
{
   return x;
}

// g() has its own variable
// named as x and calls f()
int g()
{
   int x = 20;
   return f();
}

main()
{
  printf(g());
}

ผลลัพธ์ในภาษาที่ใช้การกําหนดขอบเขตแบบไดนามิก : 

20

การกําหนดขอบเขตแบบคงที่ Vs แบบไดนามิก 

บทความที่เกี่ยวข้อง

การกำหนดขอบเขตแบบสถิตและแบบไดนามิก

สำรวจข้อขัดแย้งพื้นฐานระหว่างกฎการกำหนดขอบเขตแบบคงที่และแบบไดนามิก

นักเขียนบทความ
by 
นักเขียนบทความ
การกำหนดขอบเขตแบบสถิตและแบบไดนามิก

การกำหนดขอบเขตแบบสถิตและแบบไดนามิก

สำรวจข้อขัดแย้งพื้นฐานระหว่างกฎการกำหนดขอบเขตแบบคงที่และแบบไดนามิก

ขอบเขตของตัวแปรหมายถึงขอบเขตของโปรแกรมที่สามารถเข้าถึงตัวแปรนั้นได้ การกําหนดขอบเขตช่วยแยกตัวแปรที่ใช้ในส่วนต่างๆ ของโปรแกรมออกจากกัน แม้ว่าจะมีชื่อเดียวกันก็ตาม นี่เป็นสิ่งสําคัญเนื่องจากโปรแกรมเมอร์มักใช้ชื่อตัวแปรทั่วไปซ้ํา เช่น i, x, หรือ count ในส่วนต่างๆ ของโปรแกรม.

การกําหนดขอบเขตโดยทั่วไปแบ่งออกเป็นสองประเภท:

  1. การกําหนดขอบเขตแบบคงที่
  2. การกําหนดขอบเขตแบบไดนามิก

การกําหนดขอบเขตแบบคงที่: 

หรือที่เรียกว่าการกําหนดขอบเขตคําศัพท์ จะกําหนดขอบเขตของตัวแปรตามโครงสร้างของรหัสโปรแกรม ในวิธีนี้การผูกตัวแปรสามารถกําหนดได้โดยการตรวจสอบข้อความของโปรแกรมโดยไม่คํานึงถึงวิธีที่โปรแกรมดําเนินการในรันไทม์ คอมไพเลอร์จะค้นหาตัวแปรตามลําดับต่อไปนี้: บล็อกปัจจุบัน, บล็อกการปิดล้อม, ขอบเขตส่วนกลาง ภาษาโปรแกรมสมัยใหม่ส่วนใหญ่ เช่น C, C++, Java และ Python ใช้การกําหนดขอบเขตแบบคงที่ เนื่องจากขอบเขตเป็นที่รู้จักในเวลาคอมไพล์ จึงทําให้โปรแกรมเข้าใจ ดีบัก และปรับให้เหมาะสมได้ง่ายขึ้น.

// A C program to demonstrate static scoping.
#include<stdio.h>
int x = 10;

// Called by g()
int f()
{
   return x;
}

// g() has its own variable
// named as x and calls f()
int g()
{
   int x = 20;
   return f();
}

int main()
{
  printf("%d", g());
  printf("\n");
  return 0;
}

เอาท์พุต : 

10

การกําหนดขอบเขตแบบไดนามิก:

ค่าของตัวแปรถูกกําหนดโดยการเรียกฟังก์ชันล่าสุดในสแต็กการเรียกของโปรแกรม แทนที่จะทําตามโครงสร้างโปรแกรม ระบบรันไทม์จะค้นหาคําจํากัดความตัวแปรในห่วงโซ่ของการเรียกฟังก์ชันที่ใช้งานอยู่ ลําดับการค้นหาคือ: ฟังก์ชันปัจจุบัน, ฟังก์ชันการโทร, ฟังก์ชันที่สูงขึ้นในสแต็กการเรียก ไม่ค่อยได้ใช้ในภาษาโปรแกรมสมัยใหม่.

// Since dynamic scoping is very uncommon in 
// the familiar languages, we consider the 
// following pseudo code as our example. It
// prints 20 in a language that uses dynamic
// scoping.   

int x = 10;

// Called by g()
int f()
{
   return x;
}

// g() has its own variable
// named as x and calls f()
int g()
{
   int x = 20;
   return f();
}

main()
{
  printf(g());
}

ผลลัพธ์ในภาษาที่ใช้การกําหนดขอบเขตแบบไดนามิก : 

20

การกําหนดขอบเขตแบบคงที่ Vs แบบไดนามิก 

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

การกำหนดขอบเขตแบบสถิตและแบบไดนามิก

การกำหนดขอบเขตแบบสถิตและแบบไดนามิก

สำรวจข้อขัดแย้งพื้นฐานระหว่างกฎการกำหนดขอบเขตแบบคงที่และแบบไดนามิก

Lorem ipsum dolor amet consectetur adipiscing elit tortor massa arcu non.

ขอบเขตของตัวแปรหมายถึงขอบเขตของโปรแกรมที่สามารถเข้าถึงตัวแปรนั้นได้ การกําหนดขอบเขตช่วยแยกตัวแปรที่ใช้ในส่วนต่างๆ ของโปรแกรมออกจากกัน แม้ว่าจะมีชื่อเดียวกันก็ตาม นี่เป็นสิ่งสําคัญเนื่องจากโปรแกรมเมอร์มักใช้ชื่อตัวแปรทั่วไปซ้ํา เช่น i, x, หรือ count ในส่วนต่างๆ ของโปรแกรม.

การกําหนดขอบเขตโดยทั่วไปแบ่งออกเป็นสองประเภท:

  1. การกําหนดขอบเขตแบบคงที่
  2. การกําหนดขอบเขตแบบไดนามิก

การกําหนดขอบเขตแบบคงที่: 

หรือที่เรียกว่าการกําหนดขอบเขตคําศัพท์ จะกําหนดขอบเขตของตัวแปรตามโครงสร้างของรหัสโปรแกรม ในวิธีนี้การผูกตัวแปรสามารถกําหนดได้โดยการตรวจสอบข้อความของโปรแกรมโดยไม่คํานึงถึงวิธีที่โปรแกรมดําเนินการในรันไทม์ คอมไพเลอร์จะค้นหาตัวแปรตามลําดับต่อไปนี้: บล็อกปัจจุบัน, บล็อกการปิดล้อม, ขอบเขตส่วนกลาง ภาษาโปรแกรมสมัยใหม่ส่วนใหญ่ เช่น C, C++, Java และ Python ใช้การกําหนดขอบเขตแบบคงที่ เนื่องจากขอบเขตเป็นที่รู้จักในเวลาคอมไพล์ จึงทําให้โปรแกรมเข้าใจ ดีบัก และปรับให้เหมาะสมได้ง่ายขึ้น.

// A C program to demonstrate static scoping.
#include<stdio.h>
int x = 10;

// Called by g()
int f()
{
   return x;
}

// g() has its own variable
// named as x and calls f()
int g()
{
   int x = 20;
   return f();
}

int main()
{
  printf("%d", g());
  printf("\n");
  return 0;
}

เอาท์พุต : 

10

การกําหนดขอบเขตแบบไดนามิก:

ค่าของตัวแปรถูกกําหนดโดยการเรียกฟังก์ชันล่าสุดในสแต็กการเรียกของโปรแกรม แทนที่จะทําตามโครงสร้างโปรแกรม ระบบรันไทม์จะค้นหาคําจํากัดความตัวแปรในห่วงโซ่ของการเรียกฟังก์ชันที่ใช้งานอยู่ ลําดับการค้นหาคือ: ฟังก์ชันปัจจุบัน, ฟังก์ชันการโทร, ฟังก์ชันที่สูงขึ้นในสแต็กการเรียก ไม่ค่อยได้ใช้ในภาษาโปรแกรมสมัยใหม่.

// Since dynamic scoping is very uncommon in 
// the familiar languages, we consider the 
// following pseudo code as our example. It
// prints 20 in a language that uses dynamic
// scoping.   

int x = 10;

// Called by g()
int f()
{
   return x;
}

// g() has its own variable
// named as x and calls f()
int g()
{
   int x = 20;
   return f();
}

main()
{
  printf(g());
}

ผลลัพธ์ในภาษาที่ใช้การกําหนดขอบเขตแบบไดนามิก : 

20

การกําหนดขอบเขตแบบคงที่ Vs แบบไดนามิก 

Related articles