از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
استفاده از متغیرهای جهانی در Node.js سلام بچه ها، در مقاله امروز می خواهم در مورد متغیرهای جهانی در Node صحبت کنم. هدف این مقاله توسعه دهندگانی است که در سطح مهارت های مبتدی تا متوسط کار با Node هستند. اگر تا به حال نام متغیرهای جهانی را نشنیده اید یا با آنها کار نکرده اید، جای نگرانی نیست. این مقاله…
سرفصلهای مطلب
سلام بچه ها، در مقاله امروز می خواهم در مورد متغیرهای جهانی در Node صحبت کنم. هدف این مقاله توسعه دهندگانی است که در سطح مهارت های مبتدی تا متوسط کار با Node هستند. اگر تا به حال نام متغیرهای جهانی را نشنیده اید یا با آنها کار نکرده اید، جای نگرانی نیست. این مقاله شما را در کوتاه ترین زمان با هر آنچه که در مورد متغیرهای جهانی باید بدانید، راه اندازی می کند.
متغیرهای جهانی چیست؟
متغیرهای سراسری بسیار شبیه به متغیرهای معمولی هستند، اگر یکسان نباشند. متغیرهای سراسری را می توان با یک مقدار مقدار دهی اولیه کرد، آن مقدار را می توان تغییر داد، و حتی می توان آنها را مانند یک متغیر معمولی پاک کرد. تفاوت بین یک متغیر معمولی و یک متغیر جهانی به دامنه آنها باز می گردد. وقتی یک متغیر را در یک فایل جاوا اسکریپت ایجاد می کنید، آن متغیر فقط در محدوده ای وجود دارد که در آن اعلام شده است. حالا منظور من از این چیست؟ در کد زیر نمونه ای از دو متغیر مختلف با دامنه های مختلف را مشاهده می کنید.
// Scope.js
let fileScope = "Can be accessed anywhere in the file";
function doSomething() {
let localScope = "Can only be accessed inside this function";
fileScope = "Can be accessed in the function too!";
}
// This will result in an error because the variable does not exist
// outside the function.
localScope = "Try and change me here";
در قطعه کد بالا، می بینیم که دو متغیر وجود دارد، fileScope
و localScope
. متغیر fileScope
را می توان از هر جایی در این فایل تغییر داد یا فراخوانی کرد، در حالی که localScope
متغیر فقط در داخل تابع وجود دارد doSomething()
. من مطمئن هستم که در این مرحله شما تعجب می کنید که این چه ربطی به متغیرهای جهانی دارد. وقتی در مورد متغیرهای سراسری صحبت می کنیم، آنها برای همه فایل های یک برنامه وجود دارند به این معنی که دامنه جهانی برای برنامه دارند.
دلیل امکان این امر این است که برنامه های جاوا اسکریپت یک فضای نام جهانی را بین همه فایل های برنامه به اشتراک می گذارند. به بیان دیگر، تصور کنید که برنامه شما یک فایل غول پیکر یا container که تمام فایل های جاوا اسکریپت دیگر را “وارد” کرده است. سپس یک متغیر را در این بزرگی اعلام می کنید container فایل، آن متغیر اکنون در کل برنامه دامنه دارد. اگر مطمئن نیستید که فضای نام چیست یا میخواهید درباره آنها اطلاعات بیشتری کسب کنید، بررسی کنید این مقاله برای یادگیری بیشتر
روش اعلان و استفاده از یک متغیر جهانی
اکنون که درک بهتری از چیستی متغیر جهانی در Node داریم، بیایید در مورد روش تنظیم و استفاده از یک متغیر جهانی صحبت کنیم. برای تنظیم یک متغیر جهانی، باید آن را ایجاد کنیم روی شی جهانی شی سراسری چیزی است که دامنه کل پروژه را به ما می دهد، نه فقط فایل (ماژول) که متغیر در آن ایجاد شده است. در بلوک کد زیر، یک متغیر سراسری به نام ایجاد می کنیم. globalString
و به آن ارزش می دهیم. سپس مقدار آن را تغییر می دهیم globalString
و در نهایت آن را روی undefined قرار دادیم.
// Global.js
global.globalString = "This can be accessed anywhere!";
console.log(globalString); // Output: "This can be accessed anywhere!"
globalString = "Check me out now";
console.log(globalString); // Output: "Check me out now"
globalString = undefined;
console.log(globalString); // Output: undefined
// Example.js
// We can use the global we created in Global.js in this file
// as well.
console.log(globalString); // Output: undefined
globalString = “We can change it too!";
console.log(globalString); // Output: "We can change it too!"
چیزی که من هنوز در مورد آن صحبت نکرده ام روش دیگری است که می توانید یک متغیر جهانی بسازید. دلیل اینکه من این را حذف کرده ام این است که روش مناسبی برای تنظیم یک متغیر نیست. اگر یک متغیر را در یک فایل بدون استفاده از کلمه کلیدی اعلام کنید var
و سپس یک مقدار به آن اختصاص دهید، شی global یک ویژگی برای این متغیر تعیین می کند. این process اساساً آن را به یک متغیر قابل دسترسی جهانی تبدیل می کند. من اکیداً توصیه می کنم از این روش استفاده نکنید، اگرچه این روش مناسبی برای ایجاد جهانی نیست. همچنین مهم است که توجه داشته باشید که اگر تنظیم کنید 'use strict'
Node جهانی های ضمنی را غیرفعال می کند و احتمالاً در زمان اجرا به جای یک اسکریپت کار با خطا مواجه خواهید شد.
موارد استفاده عملی برای متغیرهای جهانی
اکنون، ممکن است با خود فکر کنید که اکنون که بیشتر در مورد آنها میدانید، میخواهید حرکت کنید و متغیرهای سراسری ایجاد کنید. من می خواهم به چند دلیل بسیار مهم نسبت به ایجاد متغیرهای سراسری احتیاط کنم.
دلیل اول این است که وقتی یک متغیر سراسری ایجاد می کنید، در طول عمر برنامه وجود دارد. هنگامی که متغیری در طول عمر برنامه باقی می ماند به این معنی است که در حافظه وجود دارد و منابع را در حین اجرای برنامه اشغال می کند.
دوم، استفاده سنتی از متغیرهای سراسری میتواند باعث مشکلات همزمانی شود. اگر چندین رشته بتوانند به یک متغیر دسترسی داشته باشند و هیچ اصلاح کننده دسترسی یا Fail-Safe در محل وجود نداشته باشد، می تواند منجر به مشکلات جدی در تلاش دو رشته برای دسترسی و استفاده از یک متغیر شود. با این حال، در حالی که این مورد در زبان های دیگر وجود دارد، لزوماً این مورد برای Node.js نیست زیرا این محیط کاملاً یک رشته است. در حالی که آن را است امکان خوشه بندی فرآیندهای Node وجود دارد، هیچ راه بومی برای برقراری ارتباط بین آنها وجود ندارد.
آخرین دلیلی که می خواهم در مورد آن صحبت کنم این است که استفاده از جهانی ها می تواند باعث جفت شدن ضمنی بین فایل ها یا متغیرها شود. هنگام نوشتن کدهای عالی، جفت کردن چیز خوبی نیست. هنگام نوشتن کد، میخواهیم مطمئن شویم که تا حد امکان ماژولار و قابل استفاده مجدد است، در حالی که استفاده و درک آن آسان است. هنگامی که میخواهید اشکالزدایی کنید چرا چیزی کار نمیکند، اتصال قطعات کدتان به یکدیگر میتواند منجر به سردردهای بزرگی شود.
اگر می خواهید بیشتر بدانید چرا جهانی ها توصیه نمی شوند، می توانید این مقاله عالی به نام را بررسی کنید متغیرهای جهانی بد هستند.
اگر در مورد هدف متغیرهای سراسری گیج شده اید، نترسید. ما قصد داریم به تعدادی از متغیرهای جهانی که در Node تعبیه شده اند نگاهی بیندازیم و سعی کنیم درک بهتری از دلیل جهانی بودن آنها و روش استفاده از آنها داشته باشیم. در واقع، شما احتمالاً قبلاً از تعدادی از آنها استفاده کرده اید بدون اینکه حتی متوجه باشید که آنها اشیاء جهانی هستند!
// Node Globals
console.log("Hello World!");
process.env.PORT = 3000;
setInterval({
console.log("2 seconds passed.");
}, 2000);
اگر به بلوک کد بالا نگاهی بیندازید، احتمالاً حداقل یک نمونه را خواهید دید که قبلاً استفاده کرده اید. console.log()
. با توجه به مستندات Node، console شی یک جهانی است که چند روش دارد که به توسعه دهندگان اجازه می دهد کارهایی مانند چاپ گزارش یا خطا را انجام دهند. با حفاری عمیق تر در اسناد می توانیم آن را ببینیم console
واقعاً یک نمونه جهانی است که برای نوشتن در آن پیکربندی شده است process.stdout
و process.stderr
.
این ما را به عبارت بعدی که در بلوک کد بالا می بینید، می رساند process
هدف – شی. اگر یک بیلد تولیدی از یک برنامه Node قرار داده اید، احتمالاً مجبور شده اید که پورت را برای متغیر محیطی تنظیم کنید. متغیر محیطی env
بخشی از process
شی که جهانی دیگر است. می توانید به متغیرها دسترسی داشته باشید روی را process
در هر فایلی در پروژه خود شیء کنید زیرا جهانی است. اگر این شی جهانی نبود، console
شی از هیچ فایلی نیز قابل دسترسی نخواهد بود، به یاد داشته باشید که در واقع یک شی است که به آن اشاره می کند process
هدف – شی.
راsetInterval
عملکرد دیگری است که ممکن است قبلاً دیده باشید اگر دلیلی برای به تاخیر انداختن یک عملیات قبل از اجرای آن داشته باشید. setTimeout
و setImmediate
از نظر ماهیت مشابه هستند setInterval
و هر دو توابع جهانی نیز هستند. این سه تابع بخشی از ماژول تایمر هستند که یک API جهانی را نشان می دهد که به شما امکان می دهد این توابع را بدون نیاز به تایمر در فایل های خود به طور واضح فراخوانی کنید.
همه موارد استفاده ذکر شده در بالا در Node تعبیه شده اند و به دلیلی جهانی هستند. این process
شی جهانی است زیرا اطلاعاتی در مورد Node در حال اجرا فعلی ارائه می دهد process و بنابراین باید از هر فایلی بدون نیاز به آن در دسترس باشد. همین امر را می توان در مورد ماژول تایمر نیز گفت که حاوی تعدادی عملکرد مهم است و باید در هر جایی بدون نیاز به آن در دسترس باشد. اگر مایلید در مورد اشیاء جهانی موجود در Node اطلاعات بیشتری کسب کنید، توصیه میکنم از آن بازدید کنید اسناد رسمی روی جهانی ها.
بیشتر بدانید
آیا می خواهید در مورد اصول Node.js بیشتر بدانید؟ من شخصاً یک دوره آنلاین را توصیه می کنم یادگیری Node.js وس باس از آنجایی که دنبال کردن ویدیوها بسیار آسانتر است و در واقع میتوانید یک برنامه کاربردی در دنیای واقعی بسازید.
نتیجه
من می دانم که اطلاعات کمی بود، بنابراین از شما برای ارائه آن متشکرم. تمام اطلاعات فوق در اسناد یافت شد روی وب سایت Node. لطفا در بخش نظرات زیر سوال بپرسید و نظرات خود را اعلام کنید. تا دفعه بعد بچه ها!
منتشر شده در 1403-01-28 05:03:03