تکمیل کد هوشمند

بندانگشتی|نمونه ویژگی تکمیل خودکار
**تکمیل کد** یک ویژگی تکمیل خودکار در بسیاری از محیط‌های یکپارچه توسعه ****** است که با تصحیح اشتباهات تایپی رایج و پیشنهاد خطوط کد، فرایند کدنویسی را سرعت می‌بخشد. این قابلیت معمولاً در میانه کلیدزنی از طریق پنجره‌های بازشو (یا  پاپ‌آپ) فعال می شود و به ارائه با پاسخ به پرسش‌هایی درباره پارامترهای توابع و راهنمایی در مورد خطاهای نحوی می‌پردازد. نرم‌افزارهای مدرن تکمیل کد عموماً از سیستم‌های هوش مصنوعی مولد برای پیش‌بینی خطوط کد استفاده می‌کنند. تکمیل کد و ابزارهای مرتبط، نقش مستندسازی و رفع ابهام در نام‌های متغیر، تابع و متد را ایفا می‌کنند و از تحلیل ایستا کمک می‌گیرند.

این قابلیت در بسیاری از محیط‌های برنامه‌نویسی دیده می‌شود. یکی از پیاده‌سازی‌های این مفهوم، **IntelliSense** در  ویژوال استودیو کد است. این اصطلاح در ابتدا به‌صورت «picklist» جا افتاده بود که به معنی «فهرست انتخابی» است و برخی پیاده‌سازی‌ها همچنان از این نام استفاده می‌کنند.

## مروری کلی

تکمیل کد هوشمند******، مشابه سایر سیستم‌های تکمیل خودکار، روشی راحت برای دسترسی به توضیحات توابع – به‌ویژه فهرست پارامترهای آن‌ها – به‌شمار می‌رود. این قابلیت با کاهش میزان تایپ و  همچنین رفع نیاز به حفظ کردن نام‌ها، سرعت توسعه نرم‌افزار را بالا می‌برد. بعلاوه باعث می‌شود برنامه‌نویس کمتر به مستندات خارجی مراجعه کند. زیرا با توجه به موقعیت کاربر در کد و همچنین حوزه فعال******، مستنداتِ تعاملی برای بسیاری از نمادها (یعنی متغیرها و توابع) بصورت پویا در قالب ابزارهای راهنما****** ظاهر می‌شود.

تکمیل کد هوشمند از یک پایگاه داده درون‌حافظه‌ای که به‌صورت خودکار ساخته می‌شود استفاده می‌کند. در این پایگاه، کلاس‌ها، نام متغیرها و سایر ساختارهایی که در کد تعریف یا ارجاع داده شده‌اند، نگه‌داری می‌شوند. پیاده‌سازی «کلاسیک» IntelliSense با شناسایی «کاراکترهای نشانه» (مانند نقطه یا سایر جداکننده‌های زبانی بسته به زبان) کار می‌کند. وقتی کاربر یکی از این کاراکترهای نشانه را بلافاصله پس از نام یک شی (که دارای اعضای در دسترس مانند متغیرها یا توابع درونی است) تایپ می‌کند، IntelliSense پیشنهادهای خود را در یک کادر بازشو به نمایش می‌گذارد. کاربر می‌تواند با فشردن کلیدهای تکمیل‌کننده عبارت****** (مانند  یا ) یا نشانه‌های خاص زبان (مانند نقطه‌ویرگول در ++C) پیشنهاد داده شده را بپذیرد یا اینکه به تایپ ادامه دهد. به‌مرور زمان، IntelliSense تشخیص می‌دهد که کاربر به احتمال زیاد به کدام متغیر یا تابع نیاز دارد. علاوه بر این، IntelliSense توضیح کوتاهی از یک تابع را در پنجرهٔ بازشو نشان می‌دهد – که این توضیح به میزان مستندات موجود در کد منبع تابع بستگی دارد.

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

## تاریخچه
تحقیقات پیرامون تکمیل کد هوشمند در سال ۱۹۵۷ و با غلط‌گیرهای املایی تصاویر بیت‌مپ تهیه شده از روی دست‌خط پیوسته****** و و همچنین استفاده در جست‌وجوی رکوردها در پایگاه‌های داده با وجود ورودی نادرست (با غلظ املایی) آغاز شد. در سال ۱۹۶۱، لز ارنست که سرپرستی این تحقیقات نوظهور را بر عهده داشت، لازم دید که نخستین غلط‌گیر املایی را طراحی کند که به فهرستی از ۱۰٬۰۰۰ واژهٔ قابل قبول دسترسی داشت. رالف گورین، دانشجوی تحصیلات تکمیلی زیر نظر ارنست، نخستین برنامه غلط‌گیر واقعی را به‌صورت یک نرم‌افزار (نه صرفاً پژوهش) برای متون عمومی انگلیسی نوشت. در فوریه ۱۹۷۱، برنامه SPELL برای رایانه DEC PDP-10 در آزمایشگاه هوش مصنوعی دانشگاه استنفورد****** منتشر شد. گورین برای افزایش سرعت این برنامه آنرا به زبان اسمبلی  نوشته بود. روش کار این برنامه، جست‌وجوی فهرست واژگان برای پیدا کردن حالت‌های صحیح ممکن (که فقط در یک حرف یا جابه‌جایی دو حرف کنار هم تفاوت داشتند) و نمایش نتایج به کاربر بود. همان‌طور که بیشتر برنامه‌های SAIL عمومی بودند،  او نیز SPELL را در دسترس عموم قرار داد و به سرعت از طریق آرپانت در سراسر جهان پراکنده شد. برنامه SPELL و الگوریتم‌ها و ساختار داده‌های آن الهام‌بخش ابزار یونیکسی Ispell بودند.

## پشتیبانی در ویرایشگرها و محیط‌های توسعه
### ویژوال استودیو
IntelliSense نام پیاده‌سازی شرکت مایکروسافت برای تکمیل کد است که بیشتر در ویژوال استودیوی شناخته می‌شود. اولین بار در سال ۱۹۹۶، با عرضه نسخه پیش‌نمونه‌ای برای ویژوال بیسیک 5.0 که عملاً پیش‌درآمدی برای این زبان بود، به یکی از محصولات اصلی از مایکروسافت تبدیل شد. در ابتدا، محیط ویژوال بیسیک بستری برای آزمایش این فناوری بود؛ اما IntelliSense در همان بازه زمانی ویژوال استودیو 97 به ویژوال فاکس‌پرو و ویژوال سی پلاس‌پلاس نیز اضافه شد (یک نسخه پس از مشاهدهٔ اولیه در ویژوال بیسیک). از آن‌جا که IntelliSense بر پایهٔ قابلیت‌های درونی COM****** شکل گرفته بود، در نسخه‌های ویژوال بیسیک بسیار کامل‌تر از نسخه‌های 5.0 و 6.0 (در ترتیب نام‌گذاری ۹۷ و ۹۸) ویژوال سی پلاس‌پلاس بودند که کاملاً بر COM تکیه نداشتند. این کاستی‌ها (که از زمان عرضهٔ نسخهٔ ۹۷ با انتقاد بسیاری از توسعه‌دهندگان C++ روبه‌رو بود) تا حد زیادی در محصولات .NET برطرف شد. برای مثال، یکی از قابلیت‌های پرتقاضا که پیش از .NET وجود نداشت، پشتیبانی از الگو****** بود که اکنون به‌طور کامل پیاده‌سازی شده است.

IntelliSense با یکپارچه شدن در محیط مایکروسافت ویژوال استودیو – که نخستین‌بار در سال ۲۰۰۱ منتشر شد – وارد مرحله جدیدی از توسعه شد. این نسخه از توانایی‌های قدرتمندتر درون‌کاوی و مستندسازی کد در .NET بهره می‌گیرد. در حال حاضر IntelliSense در ویرایشگرهای ویژوال استودیو برای سی پلاس‌پلاس، سی شارپ، جی شارپ، ویژوال بیسیک، اکس‌ام‌ال، اچ‌تی‌ام‌ال و XSLT و دیگر زبان‌ها پشتیبانی می‌شود. از ویژوال استودیو ۲۰۰۵ به بعد، IntelliSense به‌صورت پیش‌فرض وقتی کاربر شروع به تایپ می‌کند، فعال می‌شود و دیگر نیازی به وارد کردن کاراکترهای ویژه نیست (البته می‌توان این رفتار را غیرفعال کرد). محیط توسعه یکپارچه می‌تواند موضوعات فراتر از آنچه توسعه‌دهنده در حال تایپ است را حدس بزند، تا حدی که ساختارهای بسیار ابتدایی زبان مانند  و  را نیز در فهرست پیشنهاد قرار می‌دهد. در سال ۲۰۱۷ مایکروسافت IntelliCode را معرفی کرد که با استفاده از یادگیری ماشین تشخیص می‌دهد کدام ویژگی یا کتابخانه در هر لحظه احتمالاً مدنظر کاربر است. انتظار می‌رود این ابزار که ابتدا فقط برای C# در دسترس بود، در نسخه‌های آینده ویژوال استودیو به‌صورت پیش‌فرض گنجانده شود. ویژوال استودیو ۲۰۲۲ شامل قابلیت‌های هوش مصنوعی نظیر گیت‌هاب کوپایلوت است که می‌تواند بر اساس وضعیت زمینه و موقعیت کدهای اطراف، مجموعه کاملی از کد را به‌طور خودکار پیشنهاد دهد.

سایر محصولات مایکروسافت که از IntelliSense بهره می‌گیرند عبارت‌اند از مایکروسافت اکسپرشن وب، مایکروسافت فرانت‌پیج، مایکروسافت اسمال بیسیک، محیط‌های ویژوال بیسیک برای برنامه‌ها در مجموعه محصولات مایکروسافت آفیس، ویژوال استودیو کد و بسیاری دیگر. استودیو مدیریت مایکروسافت اس‌کیوال سرور 2008 نیز برای دستورهای SQL دارای ویژگی تکمیل خودکار است.

### اکلیپس
محیط توسعهٔ اکلیپس نیز ابزارهای تکمیل کد دارد که همراه خود برنامه ارائه می‌شوند. این ابزار برای کدنویسی به زبان‌های جاوا، سی++ و جاوااسکریپت بکار می‌رود. پروژه Code Recommenders در اکلیپس در گذشته ویژگی تکمیل کد هوشمند بسیار قدرتمندی داشت، اما به دلیل کمبود منابع، در نسخه 2018–12 اکلیپس کنار گذاشته شد و در ژوئیه ۲۰۱۹ بایگانی گردید.

### ویم (Vim)
Vim Intellisense سیستم تکمیل کد پیشرفته‌ای برای ویرایشگر Vim است.
## نمونه
فرض کنید یک برنامه سی++ در ویژوال استودیو در حال ویرایش است و کلاسی با نام  دارد که دارای چند تابع عضو است:

```cpp
class Foo {
  public:
    void bar();
    void foo_bar(char c, int n);
};
```

وقتی برنامه‌نویس این کلاس را استفاده می‌کند، برای نمونه:

```cpp
Foo foo; 
foo.
```

به محض این‌که کاربر نقطه را پس از `foo` وارد کند، IntelliSense به‌صورت خودکار تمام توابع عضو در دسترس (مثلاً `bar()` و `foo_bar()`) و همچنین خواص (attributes) عضو در دسترس را فهرست می‌کند (اعضای خصوصی و محافظت‌شده با علامت قفل در کار آنها مشخص می‌شوند). کاربر می‌تواند با کمک کلیدهای جهت و فشردن کلید تکمیل، هنگامی که تابع عضو موردنظر انتخاب شد، گزینه انتخابی را تایید کند. اگر مستنداتی در کد منبع برای تابع وجود داشته باشد، IntelliSense توضیح مختصری از آن را نمایش می‌دهد.

IntelliSense پا را فراتر گذاشته و حین وارد کردن پارامترها در یک کادر بازشو، پارامترهای موردنیاز را هم نشان می‌دهد. وقتی کاربر نام یک متغیر را تایپ می‌کند، این قابلیت حین تایپ، پیشنهادهایی برای تکمیل نام متغیر ارائه می‌دهد. IntelliSense حین این فرایند، پارامتر کنونی را برجسته کرده و به نمایش ادامه می‌دهد.

کاربر می‌تواند با فشردن  یا  بدون نیاز به بافت کنونی هم کادر پیشنهادی IntelliSense را وادار به نمایش کند. در ویژوال استودیو، این پنجره کل مدل شیء دامنه برنامه را که برای توسعه‌دهنده در دسترس است، نشان می‌دهد.

## یادداشت‌ها


## منابع

رده:ابزارهای توسعه نرم‌افزار مایکروسافت
رده:تکمیل خودکار
رده:محیط‌های توسعه مجتمع
رده:ویژگی‌های ویرایشگر متن
رده:ویژوال استودیو