موضوع مقاله: تطبیق نام (زبان‌های برنامه‌نویسی) | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # تطبیق نام (زبان‌های برنامه‌نویسی) | مقدمه: در برنامه‌نویسی به فرایند وصل کردن شناسه‌ها به مولفه‌های نشان داده شده توسط آن‌ها تطبیق نام می‌گویند. | ## بخش 1: تطبیق نام (زبان‌های برنامه‌نویسی) | این نام‌ها ممکن است در جدول نمادها یا به عنوان بخشی از معماری فضای نام ذخیره شوند. این فرایند می‌تواند برای فراخوانی تابع، متغیر یا مولفه ای از یک مجموعه موجودیت نام گذاری شده استفاده شود. مفاهیم عبارت‌های برنامه‌های کامپیوتری، متغیرها، نوع داده‌ها، توابع، کلاس‌ها، اشیا، کتاب‌خانه‌ها، بسته‌ها و دیگر موجودیت‌ها را با اسم فراخوانی می‌کنند. تطبیق نام، فرایند ارتباط دادن این اسامی (که لزوماً یکتا نیستند) با موجودیت‌های معادلشان در برنامه است. الگوریتم‌هایی که مشخص می‌کنند این شناسه‌ها در یک بخش خاص برنامه به چه جزئی اشاره می‌کنند، بخشی از تعریف زبان هستند. برای مثال، فرایند تطبیق نام در زبان اسمبلی معمولاً با استفاده از یک جدول نماد انجام می‌شود در حالی که در زبان سی پلاس‌پلاس این فرایند بسیار دشوارتر است و موارد زیر را دربرمی‌گیرد: قوانین فضای نام به یک شناسه اجازه می‌دهد که با توجه به فضای نام مربوطه‌اش معانی مختلفی داشته باشد. قوانین دامنه که باعث می‌شود یک شناسه بتواند در محدوده‌های مختلف معانی گوناگونی داشته باشد که با قواعدی که برای مخفی کردن و نادیده گرفتن شناسه وجود دارد امکان‌پذیر است. در ابتدایی‌ترین سطح، تطبیق نام معمولاً تلاش می‌کند ارتباط را در کوچکترین محدوده محصور پیدا کند، بنابراین برای مثال متغیرهای محلی بر متغیرهای عمومی اولویت دارند. قوانین مشخص کنندهٔ پدیداری در یک بخش که تعیین می‌کنند آیا شناسه‌های موجود در یک فضای نام یا دامنهٔ خاص، در این بخش از برنامه قابل مشاهده است یا نه. | ## بخش 2: تطبیق نام (زبان‌های برنامه‌نویسی) | قوانین سربارکردن که اجازه می‌دهد یک شناسه بسته به استفاده‌های مختلفی که دارد، معانی گوناگونی داشته باشد حتی وقتی در یک فضای نام یا دامنه استفاده شود. قوانین دسترسی‌پذیری که تعیین می‌کند آیا شناسه‌های یک دامنهٔ قابل مشاهدهٔ دیگر واقعاً دسترس پذیر هستند و در فرایند تطبیق نام شرکت می‌کنند یا خیر. تطبیق پویا و ایستا در زبان‌های برنامه‌نویسی مختلف، تطبیق نام در زمان کامپایل یا زمان اجرا انجام می‌شود. یک تصور غلط رایج این است که پویا بودن نوع متغیرها معادل پویا بودن فرایند تطبیق نام است. برای مثال در زبان برنامه‌سازی ارلنگ، نوع متغیرها به صورت پویا تعریف می‌شود اما تطبیق نام به شکل ایستا صورت می‌گیرد. تطبیق نام ایستا که در زمان کامپایل انجام می‌شود، جلوی استفاده از متغیرهایی که در دامنه نیستند را می‌گیرد و بنابراین از برخی خطاهای برنامه‌نویسی جلوگیری می‌کند. اما در زبان‌هایی که تطبیق نام پویا دارند این ایمنی فدای انعطاف‌پذیری بیشتر می‌شود. در این زبان‌ها به‌طور معمول می‌توان متغیرها را در یک دامنه مقداردهی و استفاده کرد. هر چند امروزه تکیه کردن بر تطبیق نام پویا توسط جامعه برنامه‌نویسان پایتون توصیه نمی‌شود. | ## بخش 3: تطبیق نام (زبان‌های برنامه‌نویسی) | نمونه‌هایی از زبان‌هایی که از تطبیق نام ایستا استفاده می‌کنند شامل سی، سی پلاس‌پلاس، E, ارلنگ، هسکل، جاوا، پاسکال، اسکیم و اسمال‌تاک می‌شود. همچنین لیسپ، پرل، پی‌اچ‌پی، ریبل، تی‌سی‌ال و پایتون مثال‌هایی از زبان‌هایی هستند که از تطبیق نام پویا استفاده می‌کنند. پوشاندن نام پوشاندن زمانی رخ می‌دهد که برای موجودیت‌های متفاوت در دامنه‌های واژگانی دارای هم‌پوشانی از شناسه‌های یکسان استفاده شود. شناسهٔ 'I (برای متغیر 'X) شناسهٔ I (برای متغیر X) را می‌پوشاند وقتی که دو شرط زیر برقرار باشند: نام 'I با نام I یکسان باشد. از آن‌جایی که foo ابتدا در داخلی‌ترین دامنه یافت می‌شود، برای اینکه بازنویسی مقدار متغیر کلاس foo با پارامتر foo که به تابع پاس داده شده‌است با موفقیت انجام شود، فرایند تطبیق باید تفاوتی بین this.foo (ویژگی شیء) و foo (پارامتر تابع) قائل شود. پوشاندن نام می‌تواند باعث پیچیدگی‌هایی در سربار کردن تابع بشود، چرا که در بعضی از زبان‌ها از جمله سی‌پلاس‌پلاس سربار کردن در میان دامنه‌ها رخ نمی‌دهد، بنابراین نیاز است که همهٔ توابع سربار شده مجدداً تعریف شوند یا به صورت صریح در یک فضای نام داده شده وارد شوند. تغییر نام آلفا در زبان‌های برنامه‌نویسی با قواعد دامنه‌ای واژگانی که عمل بازتاب روی نام متغیرها را انجام نمی‌دهند، می‌توان برای آسان کردن تطبیق نام از تبدیل ⍺ (یا تغییر نام ⍺) استفاده کرد. به وسیلهٔ این فرایند می‌توان جایگزینی‌هایی را یافت که به ما کمک می‌کند از این که هیچ نام متغیری در دامنه‌اش نام دیگری را پنهان نمی‌کند اطمینان حاصل کنیم. | ## جمع‌بندی | اگر تغییر نام دهندهٔ ⍺ قوانین دامنه‌ای زبان را بفهمد، آن‌گاه می‌توان با تغییر نام ⍺ آنالیز ایستای برنامه را آسان کرد.