مفهوم فضای نام یا namespace به زبان نسبتا ساده

فرض کنین دو تا شرکت داریم به اسم‌های مایکروسافت و اشکان‌سافت (?)، که یه سری محصولات نرم‌افزاری روانه‌ی بازار کردن به شرح زیر:

محصولات مایکروسافت: Paint، Word، Access، Visio ، Windows و موارد دیگه.

محصولات اشکان‌سافت:QuickMemo+ ، EasyDB، TDRRS، Paint، EasyCli، Windows و موارد دیگه.

از قضا اسم بعضی از محصولاتشون عین همه! دو تا Windows داریم و دو تا هم Paint!

فرض کنیم شما به عنوان مسئول تدارکات یه شرکت رفتین بازار کامپیوتر، وارد یه فروشگاه نرم‌افزار شدین و بهتون گفتن برو ۵۰ تا نسخه ویندوز بخر (با فرض محال این که تو ایران کپی‌رایت رعایت میشه) و اون جا تازه متوجه میشین دو تا شرکت محصولی با همین اسم دارن!

این جاست که باید شرکت به شما میگفت که Microsoft Windows رو بخر.

مثال دیگه؛با بچه‌های دانشگاه دارین راجع به یه نفر از بچه‌ها که تو جمعتون نیست صحبت می‌کنین به اسم علیرضا و خب اسم علیرضا خیلی زیاده! فامیلیش هم یادتون نمیاد ولی یادتونه که تو کلاس ریاضی۱ باهاش هم‌کلاسی هستین.

میگین علیرضای کلاس ریاضی۱

اصلا چرا راه دور بریم؟ خود مفهوم نام خانوادگی یه جور فضای نامه!

کدوم علی؟ علی مقدم

قبل‌تر از اون هم از اسم ولایت طرف استفاده می‌کردن؛ لئوناردو؟ کدوم لئوناردو؟؟ لئوناردو از وینچی

و بله، da در ایتالیایی یعنی از و در حقیقت نشون میده طرف بچه‌ی کجاست ?
Leonardo Da Vinci. لئوناردویی که بچه وینچیه

مثال برنامه‌نویسی:

تو برنامه‌ای که داریم می‌نویسیم از کتابخانه‌های آماده‌ی مختلفی استفاده کردیم که بعضاً توابعی با اسم‌های یکسان توی خودشون دارن. مثلا کتابخانه‌ی استاندارد زبان پیاده‌سازی از تابع سینوس داره که خوبه ولی حرفه‌ای نیست و دامنه‌ی ورودی‌هاش هم محدوده ولی یه کتابخانه‌ی دیگه رو هم آوردیم توی پروژه که یه پیاده‌سازی خیلی قوی از این تابع داره.

فضای نام کتابخانه‌ی استاندارد همونطور که میدونین std ئه و فرض کنین کتابخانه‌ی حرفه‌ای رو هم من خودم نوشتم و دوست داشتم فضای نامش ashkanLib باشه.

توی زبان سی پلاس پلاس یا حتی تو دیاگرام‌های UML اینارو این جوری نشون میدیم:

Microsoft::Windows

Math1_class::Alireza

std::sin()

ashkanLib::sin()

به این :: هم میگن namespace resolution operator یا عملگر تعیین فضای نام


این کار که بهش میگن namespacing خیلی جاها کاربرد داره و فقط منحصر به زبان‌های برنامه‌نویسی نیست. تقریبا هرجایی که احتمال اشتباه شدن دو تا چیز هم‌نام با هم وجود داشته باشه این ویژگی هم پیاده‌سازی شده. مثلا: XML، Docker و DNS.

امیدوارم اگه احیانا تو فهمیدنش مشکلی داشتین کمکی بهتون کرده باشم و خوشحال میشم برای بهتر شدن این مطلب برام نظرتون رو بنویسین.