متمایزکننده

در محاسبات یک متمایزکننده (Discriminator) فیلدی از کاراکترها است که برای جدا کردن یک عنصر از عناصر دیگر با همان شناسه طراحی شده است. برای مثال فرض کنید یک برنامه باید دو شی منحصر به فرد را در حافظه ذخیره کند که foo شناسه هردوی آنهاست. برای جلوگیری از یکی در نظر گرفتن این دو شی برنامه ممکن است متمایزکننده‌ای به فرم عددی به آنها نسبت دهد، مثلا foo(1) و foo(2) این دو شی همنام را از هم متمایز می‌کند.

این روش در زبان‌های برنامه‌سازی و پلتفرم‌های دیجیتال برای پیام‌رسانی فوری و بازی‌های آنلاین چندنفره به کار گرفته شده است. در پیام رسانی سریع از متمایزکننده برای تفکیک یک کاربر از دیگر کاربرانی که می‌خواهند با همان نام کاربری احراز هویت کنند، استفاده می‌شود.

## دیسکورد (Discord)
در دیسکورد متمایزکننده یک پسوند ۴ رقمی است که به انتهای یک نام کابری اضافه می‌شود. این امر به ۱۰۰۰۰ حساب کاربری اجازه داده است که از یک نام کاربری یکسان استفاده کنند.

## گذر از متمایزکننده‌ها
در سال ۲۰۲۳ یکی از بنیان‌گذاران دیسکورد، استانیسلاو ویشنوسکی در یک پست وبلاگی شرکت درباره بدهی فنی حاصل از استفاده از سیستم متمایزکننده نوشت و بیان کرد که این امر منجر به شکست خوردن نیمی از درخواست‌های دوستی شرکت شده است. او توضیح داد که دیسکورد در روزهای آغازین راه اندازی خود این سیستم را توسعه داد. در زمان معرفی اولیه اولویت توسعه‌دهندگان دیسکورد این بوده است که به کاربران اجازه دهند تا نام کاربری دلخواه خود را بدون دریافت خطای "نام کاربری مورد نظر شما موجود نیست و قبلا انتخاب شده است" انتخاب کنند. در ابتدا دیسکورد هیچ سیستم دوستی نداشت، به همین دلیل به کاربران اجازه میداد نام‌هایشان را با حروف کوچک و بزرگ انتخاب کنند که باعث حساسیت نام‌های کاربری به حروف بزرگ و کوچک شد.

دیسکورد همچنین یک سیستم نام جهانی معرفی کرد که در آن کاربران می‌توانستند از یک نام مستعار به جای نام کاربری خود استفاده کنند و این نام در بالای پیام ها ظاهر شود. ویشنوسکی این قابلیت را در ردیت معرفی کرد.

این پلتفرم یک فرآیند انتقال به یک سیستم مبتنی بر نام مستعار ایجاد کرد که در آن تمامی نام‌های کاربری به حروف بزرگ و کوچک حساس بودند و فقط محدود به کاراکترهای ASCII حروف A-Z و اعداد ۹-۰و نقطه و خط زیر بودند. این انتقال طی چندین ماه انجام شد و به کاربران قدیمی‌تر و کاربران با حساب پولی اجازه داده شد تا زودتر نام کاربری مورد نظر خود را رزرو کنند. 

این تغییر در فضای مجازی با انتقادات گسترده‌ای مواجه شد زیرا آن را قدمی به عقب و منجر به خطر جعل هویت کاربران توصیف کردند. یک استودیوی معروف بازی‌های ویدیویی اعلام کرد که دیگر نمی‌تواند نام خود را در این پلتفرم ثبت کند. دیسکورد در پاسخ اعلام کرد که فرآیندهایی برای کاربرانی با شناخت عمومی بالا و روابط کاری طولانی‌مدت با شرکت وجود دارد تا بتوانند نام کاربری خود را تحت سیستم جدید رزرو کنند. سیستم قدیمی مبتنی بر متمایزکننده‌ها همچنین از هجوم کاربران برای گرفتن نام‌های کاربری منحصربه‌فرد جهت فروش در بازار سیاه جلوگیری می‌کرد، که این مسئله از این منجر به سواتینگ و آزار و اذیت آنلاین شد.

## در توزیع دیجیتال
Battle.net یک پسوند چهاررقمی را به نام‌های کاربری خود اضافه می‌کند.

## در انبار داده کامپیوتر

#### معماری مشترک درخواست شی (Common Object Request Broker Architecture)
متمایزکننده یک فیلد برچسب‌دار دارای نوع در معماری مشترک درخواست شی است که زبان توصیف رابط گروه مدیریت شی را تشکیل می‌دهد. این فیلد به عنوان تعاریف نوع و مقدار از اتحادیه‌های(union) برچسب‌دار است و تعیین می‌کند که کدام عضو اتحادیه در نمونه‌ی فعلی انتخاب شود. این کار با استفاده از سازه‌ی کلاسیک switch در زبان C به‌عنوان بخشی از اتحادیه‌ی کلاسیک C انجام می‌شود.

برخلاف برخی زیان‌های برنامه‌نویسی که از اتحادیه‌ها پشتیبانی می‌کنند، متمایزکننده در IDL با نام فیلد انتخاب شده یکی نیست. مثال زیر یک تعریف نوع اتحادیه در IDL است. 
```idl
union Register switch (char) 
{
    case 'a':
    case 'b': short AX;

    case 'c': long EAX;

    default:  octet AL;
};
```
در اینجا، مقدار نهایی Register ممکن است شامل AX به عنوان فیلد انتخاب‌شده باشد، اما مقدار متمایزکننده می‌تواند 'a' یا 'b'باشد که به صورت جداگانه در حافظه ذخیره می‌شود. بنابراین، IDL اطلاعات مربوط به نام فیلد انتخاب‌شده و مقدار اتحادیه را از اطلاعات مربوط به مقدار متمایزکننده جدا می‌کند.

در مثال بالا، مقدار متمایزکننده می‌تواند 'a'، 'b'، 'c' یا هر کاراکتر دیگری از نوع char در IDL باشد، زیرا شاخه default تعریف شده اجازه استفاده از سایر کاراکترها را می‌دهد.

#### سایر زبان‌های تعریف رابط
زبان تعریف رابط مایکروسافت نیز از اتحادیه‌های دارای برچسب پشتیبانی می‌کند و این امکان را فراهم می‌کند تا مقدار متمایزکننده را از طریق یک ویژگی درون یک ساختار محصورکننده و یا یک تابع تعیین کرد. 

## جایگزین‌ها
کد دوست (friend code) یک عدد ۱۲-رقمی یکتاست که می‌تواند برای ایجاد لیست دوستان در یک بازی ویدیویی استفاده شود. این کد از یک شناسه منحصربه‌فرد برای کپی بازی و یک شناسه UIUD برای دستگاه کاربر تولید می‌شود.

## منابع

# Mehrotra, Shikhar (May 7, 2023). "Discord's New Usernames: Everything You Need To Know About The Update". *Screen Rant*. Retrieved June 12, 2023.
# Shakir, Umar (May 6, 2023). "Discord's username change is causing discord". *The Verge*. Vox Media. Retrieved June 12, 2023.
# Wright, Steven (May 22, 2023). "Discord's Controversial New Policy Has Prevented A Dev From Claiming Its Own Name". *GameSpot*. Fandom, Inc. Retrieved June 12, 2023.
# Gerken, Tom (May 4, 2023). "Discord plans to make everyone change their username". *BBC News*. British Broadcasting Company. Retrieved June 12, 2023.
# Object Management Group (March 12, 2004). "CORBA/IIOP Specification 3.0.3". *OMG.org*. Archived from the original on October 15, 2007.
# "CORBA 3.0 - IDL Syntax and Semantics chapter". *OMG.org*. March 12, 2004.
# Studdard, Kim (April 19, 2023). "How to Add Friends on Nintendo Switch: In 5 Easy Steps With Photos". Retrieved June 12, 2023 – via MSN.
# "Microsoft discriminator attribute documentation". *Microsoft Learn*. October 25, 2019.
رده:زبان‌های برنامه‌نویسی