global در متلب
انواع متغیرهای مختلف در متلب تعریف میشوند که در داخل همان برنامه کاربرد دارند و در صورت استفاده از همان متغیر خارج از آن برنامه یا تابع دیگر، خطای زیر در متلب صادر میشود:
Undefined function or variable
برای حل این مشکل، یک روش استفاده از دستورglobal است. متغیرglobal یا متغیر جهانی در متلب ابزار مفیدی برای مدیریت متغیرها در سطح جهانی است، اما باید با احتیاط و به طور مناسب از آن استفاده کرد. فهمیدن مزایا و معایب این دستور و آشنایی با روشهای جایگزین میتواند به توسعهدهندگان کمک کند تا کدهای خود را بهینهتر کنند و بصورت مناسب نگهداری نمایند و در انجام پروژه های متلب خود از این دستورات استفاده کنند. دستورglobal در متلب به کاربر این امکان را میدهد که متغیرهایی را در سطح جهانی یا بین چندین برنامه و تابع تعریف کند و استفاده نماید به گونهای که این متغیرها در تمام توابع و بخشهای مختلف برنامه قابل دسترسی و تغییر باشند. تعریف یک متغیر به عنوانglobal آن را از حالت محلی به حالت جهانی تغییر میدهد و به این ترتیب، دادهها میتوانند در سطح برنامه و بین توابع مختلف به اشتراک گذاشته شوند. از مزایای استفاده از متغیر global می توان به دسترسپذیری متغیر در توابع مختلف اشاره کرد. زیرا متغیرهای جهانی به توابع مختلف امکان میدهند تا به دادههای مشترک دسترسی داشته باشند. هچنین مزیت دیگر آن، حفظ وضعیت در توابع مختلف است زیرا وضعیت متغیرها میتواند در بین فراخوانیهای توابع حفظ شود. متغیرهای جهانی متغیرهایی هستند که در سطح یک برنامه تعریف شده و تمامی توابع در دسترس هستند. با تعریف متغیر global امکان فراخوانی متغیر در هر بخشی فراهم خواهد بود. ضمنا متغیری که بصورت متغیر جهانی باشد در همه کدها بصورت آبی فیروزه ای خواهد بود. از کاربردهای پیشرفته این متغیر میتوان به استفاده در برنامههای پیچیده که شامل چندین تابع و بخش برنامه است که نیازمند به متغیرهای مشابه است اشاره کرد تا در مدیریت حافظه و بهینهسازی موفق بود. استفاده بهینه از متغیرهای جهانی به کاهش مصرف حافظه و بهبود کارایی کمک میکند.
از طرفی باید از استفاده بیش از حد از متغیرهای جهانی اجتناب کرد. محدودیتها و مشکلاتی که از حضور متغیرهای global حاصل میشود، تغییرات غیرقابل پیشبینی و تداخل بین توابع میباشد که بایستی در کدنویسی مدنظر باشد و نتایج را دچار اختلال نکند. برای استفاده مؤثر از متغیرهای جهانی، باید دقت کرد که فقط در مواقع ضروری از آنها استفاده کرد و توجه نمود که تغییرات در متغیرهای جهانی به طور واضح و مؤثر مستندسازی شود تا از رفع مشکلات دیگر اجتناب شود. با استفاده بیش از حد متغیرهای جهانی، خوانایی و درک کد وکم شده و پیچیدگی کد را افزایش میدهد. همچنین بایستی مواظب بود که خطر تداخل و ناسازگاری نامهای متغیر در برنامههای بزرگ بوجود نیاید.
برای جایگزینهای دیگر دستور global میتوان از پاس دادن پارامترها در توابع یا استفاده از ساختارها و کلاسها برای مدیریت بهتر دادهها و حالتها اشاره کرد. پاس دادن پارامترها یکی از روشهای مناسب برای انتقال دادهها به توابع بدون نیاز به متغیرهای جهانی است.
تعریف متغیر جهانی صورت متغیرهای معمولی است ولی بایستی همانند زیر عبارت global در ابتدای متغیر نوشته شود.
مثال1- تعریف در برنامه اصلی و فراخوانی داخل تابع دیگر
clc; clear; close all
% فایل main.m
global x;
x = 10;
myFunction();
% فایل myFunction.m
function myFunction()
global x;
disp(x);
end
خروجی:
10
توضیح: متغیر x بصورت متغیر جهانی در داخل فایل main تعریف شده که در داخل myFunction در دسترس بوده و فراخوانی شده است و در خروجی مقدار آن چاپ شده است.
مثال2: مدیریت تنظیمات در پروژههای بزرگ:
clc; clear; close all
% فایل config.m
global settings;
settings = struct(‘param1’, 5, ‘param2’, 10);
analyze()
% فایل analyze.m
function analyze()
global settings;
disp([‘Parameter 1: ‘, num2str(settings.param1)]);
disp([‘Parameter 2: ‘, num2str(settings.param2)]);
end
خروجی برنامه:
Parameter 1: 5
Parameter 2: 10
توضیح: در برنامههای بزرگ و پیچیده، استفاده از متغیرهای جهانی میتواند به مدیریت تنظیمات یا وضعیتهای مختلف کمک کند. با این حال، باید با احتیاط استفاده شود تا از مشکلات مربوط به تداخل و پیچیدگیهای اضافی جلوگیری شود. در پروژههای بزرگ و استفاده از متغیرهای سلولی، متغیر Parameter 1 و Parameter 2 بصورت متغیر جهانی در داخل فایل config تعریف شده که در داخل analyze فراخوانی شده است و در داخل تابع مقدار دهی شده است.
مثال 3- هماهنگی بین توابع:
clc; clear; close all
% فایل main.m
global counter;
counter = 0;
incrementCounter();
displayCounter();
% فایل incrementCounter.m
function incrementCounter()
global counter;
counter = counter + 1;
end
% فایل displayCounter.m
function displayCounter()
global counter;
disp([‘Counter value: ‘, num2str(counter)]);
end
خروجی برنامه:
Counter value: 1
توضیح: هماهنگی بین توابع incrementCounter و displayCounter با استفاده از متغیر جهانی Counter ایجاد شده است.
مثال4- تغییر مقادیر متغیر global
clc; clear; close all
% فایل main.m
global myvar;
myvar = 15;
updatevalue(20);
disp(myvar);
% فایل updatevalue.m
function updatevalue(newvalue)
global myvar;
myvar = newvalue;
end
خروجی:
20
توضیح: برای تغییر یا دسترسی به مقادیر متغیرهای جهانی در توابع مختلف، باید دستور global در هر تابعی که به متغیر جهانی نیاز دارد، استفاده شود. در این مثال، متغیر myvar در main.m به عنوان global تعریف شده و سپس با استفاده از تابع updatevalue مقدار آن تغییر داده میشود. در مثال فوق مقدار تابع جهانی در داخل تابع updatevalue از مقدار 15 به 20 بروز شده است.
مثال5: استفاده از ساختار بجای متغیر جهانی
clc; clear; close all
data = createdata();
processdata(data)
% فایل datastruct.m
function data = createdata()
data.param1 = 5;
data.param2 = 10;
end
clc; clear; close all
% فایل processdata.m
function processdata(data)
disp([‘parameter 1: ‘, num2str(data.param1)]);
disp([‘parameter 2: ‘, num2str(data.param2)]);
end
خروجی:
parameter 1: 20
parameter 2: 30
توضیح: در این مثال به جای استفاده از متغیرهای جهانی، دادهها به صورت ساختار بین توابع پاس داده شده اند. یعنی خروجی تابع اول به صورت ورودی به تابع دوم انتقال داده شده است و با همان نام در داخل تابع دوم کاربرد داشته است.
برای مشاهده مثال های بیشتر از دستور Global در متلب، به وبسایت رسمی خود متلب مراجعه کنید.
علاقه مندان به متلب، با مطالعه مقالات دستور های دیگر متلب می توانید دانش خود را افزایش دهید:
دستور lsim در متلب
آموزش استفاده از دستور pde در متلب
راهنمای استفاده از دستور logspace در متلب
کاربرد دستورaxis در متلب
دستور sqrt در متلب
دستور conj در متلب
راهنمای استفاده از دستور linspace در متلب
دستور subs در متلب
دستور solve در متلب
دستورsum در متلب
دستور syms در متلب
معرفی دستور stem در متلب


