انواع Scopeها در جاوا اسکریپت و پایتون
26 خرداد 1403 1403-03-26 16:54انواع Scopeها در جاوا اسکریپت و پایتون
انواع Scopeها در جاوا اسکریپت و پایتون
انواع Scope در جاوا اسکریپت و پایتون! جاوا اسکریپت و پایتون دو زبان برنامهنویسی محبوب و پرکاربرد هستند که هرکدام ویژگیها و کاربردهای منحصربهفرد خود را دارند. جاوا اسکریپت بهطور گسترده در توسعه وب بهکار میرود و بهعنوان زبان اصلی برای برنامهنویسی سمت کاربر (Client-side) شناخته میشود. این زبان به توسعهدهندگان اجازه میدهد تا وبسایتها و برنامههای وب تعاملی و پویا ایجاد کنند. از سوی دیگر، پایتون یک زبان چندمنظوره و سطح بالا است که بهدلیل سادگی و خوانایی کد، در حوزههای مختلفی از جمله توسعه وب، علم داده، هوش مصنوعی و خودکارسازی استفاده میشود.
یکی از مفاهیم اساسی در هر دو زبان برنامهنویسی، Scope یا محدوده متغیرها است. Scope تعیین میکند که متغیرها و توابع در کدام بخش از کد قابل دسترسی و استفاده هستند. در جاوا اسکریپت، دو نوع Scope وجود دارد: Global Scope که متغیرها در تمام برنامه قابل دسترسی هستند و Local Scope که متغیرها فقط در داخل بلوک یا تابع تعریفشده قابل دسترسی هستند. پایتون نیز از مفاهیم مشابهی برای مدیریت محدوده متغیرها استفاده میکند، با این تفاوت که علاوهبر Global و Local، دو نوع Scope دیگر به نامهای Enclosing و Built-in نیز دارد که بهترتیب به محدودههای تو در تو و محدوده توابع و متغیرهای داخلی زبان اشاره دارند.
انواع Scope در جاوا اسکریپت
در جاوا اسکریپت، Scope (دامنه) به محدودهای از کد گفته میشود که در آن متغیرها و توابع قابل دسترسی هستند. بهطور کلی، اسکوپ ها در جاوا اسکریپت شامل سه نوع میشوند: Global Scope، Function Scope و Block Scope. هرکدام از این انواع Scopeها بهصورت زیر توضیح داده شدهاند:
1. Global Scope (دامنهی سراسری)
متغیرهایی که در سطح جهانی (خارج از هر تابع یا بلاک) تعریف میشوند، دارای Global Scope هستند. این متغیرها در هر جای کد قابل دسترسی هستند.
var globalVar = “I’m a global variable”;
function test() {
console.log(globalVar); // Accessible here
}
test();
console.log(globalVar); // Accessible here too
2. Function Scope (دامنهی تابع)
متغیرهایی که داخل یک تابع تعریف میشوند، تنها در داخل همان تابع قابل دسترسی هستند و در خارج از آن تابع قابل مشاهده نیستند.
function myFunction() {
var functionVar = “I’m a function variable”;
console.log(functionVar); // Accessible here
}
myFunction();
console.log(functionVar); // Error: functionVar is not defined
3. Block Scope (دامنهی بلاک)
متغیرهایی که بااستفاده از کلماتکلیدی let و const در یک بلاک ({}) تعریف میشوند، دارای Block Scope هستند. این متغیرها تنها در داخل همان بلاک قابل دسترسی هستند.
if (true) {
let blockVar = “I’m a block variable”;
console.log(blockVar); // Accessible here
}
console.log(blockVar); // Error: blockVar is not defined
خلاصه
- Global Scope: متغیرهایی که در سطح جهانی تعریف میشوند و در همه جا قابل دسترسی هستند.
- Function Scope: متغیرهایی که داخل یک تابع تعریف میشوند و تنها در داخل همان تابع قابل دسترسی هستند.
- Block Scope: متغیرهایی که با let یا const در یک بلاک تعریف میشوند و تنها در داخل همان بلاک قابل دسترسی هستند.
در نسخههای جدید جاوا اسکریپت (ES6 و بعد از آن)، توصیه میشود از let و const برای تعریف متغیرها استفاده شود تا از مشکلات ناشی از دامنهی متغیرها جلوگیری شود.
انواع Scopeها در پایتون
در پایتون، چهار نوع Scope (دامنه) اصلی وجود دارد: Local، Enclosing، Global، و Built-in. این دامنهها در فرآیندی به نام LEGB (Local, Enclosing, Global, Built-in) قرار میگیرند. هرکدام از این اسکوپ ها در پایتون در ادامه بررسی شدهاند:
1. Local Scope (دامنه محلی)
متغیرهایی که داخل یک تابع تعریف میشوند، دارای Local Scope هستند و تنها در داخل همان تابع قابل دسترسی هستند.
def my_function():
local_var = “I’m a local variable”
print(local_var) # Accessible here
my_function()
print(local_var) # Error: name ‘local_var’ is not defined
2. Enclosing Scope (دامنه محاطی)
این دامنه مربوط به توابع داخلی است که در داخل توابع دیگر تعریف شدهاند. متغیرهایی که در تابع محاطی (خارجی) تعریف میشوند، در تابع داخلی قابل دسترسی هستند.
def outer_function():
enclosing_var = “I’m an enclosing variable”
def inner_function():
print(enclosing_var) # Accessible here
inner_function()
outer_function()
3. Global Scope (دامنه سراسری)
متغیرهایی که در سطح ماژول (خارج از هر تابع) تعریف میشوند، دارای Global Scope هستند و در هر جای کد قابل دسترسی هستند.
global_var = “I’m a global variable”
def my_function():
print(global_var) # Accessible here
my_function()
print(global_var) # Accessible here too
برای تغییر مقدار متغیرهای سراسری داخل یک تابع، باید از کلمه کلیدی global استفاده کنید:
global_var = “I’m a global variable”
def my_function():
global global_var
global_var = “I’m changed inside the function”
my_function()
print(global_var) # Output: I’m changed inside the function
4. Built-in Scope (دامنه داخلی)
این دامنه شامل توابع و متغیرهای داخلی پایتون است که بهصورت پیشفرض در دسترس هستند. مانند print(), len() و غیره.
print(len(“Hello, World!”)) # Built-in functions are accessible everywhere
فرآیند LEGB (Local, Enclosing, Global, Built-in)
پایتون از این ترتیب برای جستجوی متغیرها استفاده میکند:
- Local: ابتدا در دامنه محلی جستجو میشود.
- Enclosing: سپس در دامنه محاطی (اگر وجود داشته باشد) جستجو میشود.
- Global: بعد از آن در دامنه سراسری جستجو میشود.
- Built-in: درنهایت، اگر متغیر پیدا نشود، در دامنه داخلی پایتون جستجو میشود.
مثال کامل
global_var = “I’m a global variable”
def outer_function():
enclosing_var = “I’m an enclosing variable”
def inner_function():
local_var = “I’m a local variable”
print(local_var) # Local Scope
print(enclosing_var) # Enclosing Scope
print(global_var) # Global Scope
print(len(“example”)) # Built-in Scope
inner_function()
outer_function()
در این مثال، تابع inner_function به تمام چهار نوع دامنه دسترسی دارد: local_var از دامنه محلی، enclosing_var از دامنه محاطی، global_var از دامنه سراسری و len از دامنه داخلی پایتون.
نکات مهم
استفاده از کلمه کلیدی global برای تغییر متغیرهای سراسری داخل توابع.
استفاده از کلمه کلیدی nonlocal برای تغییر متغیرهای محاطی داخل توابع داخلی:
def outer_function():
enclosing_var = “I’m an enclosing variable”
def inner_function():
nonlocal enclosing_var
enclosing_var = “I’m changed inside the inner function”
inner_function()
print(enclosing_var) # Output: I’m changed inside the inner function
outer_function()
سخن پایانی
درک صحیح از مفهوم Scope یا محدوده متغیرها در جاوا اسکریپت و پایتون برای نوشتن کدهای کارا و بدون خطا بسیار مهم است. در جاوا اسکریپت، تفاوت بین Global Scope و Local Scope به توسعهدهندگان کمک میکند تا متغیرها و توابع خود را بهطور مؤثر سازماندهی کنند و از تداخل نامها جلوگیری کنند. استفاده از بلوکهای کد و توابع برای ایجاد Scopeهای محلی، میتواند به بهبود خوانایی و نگهداری کد کمک کند.
آکادمی چابک، با برگزاری دورههای تخصصی در زمینه برنامهنویسی و دیگر حوزههای فنی، به نیروهای فنی کمک میکند تا مهارتهای لازم برای مدیریت و استفاده از Scopeها را بهخوبی فرا بگیرند.
منابع