محتویات سایت
        برچسب های محبوب 








 
   کد اسنیپت ها (Code snippets) ، ابزاری جدید در DotNet Framework 2
  یکی از ابزارهای جدیدی که همراه با Visual Studio 2005 ارائه شده است کد اسنیپت ها (Code Snippets) می باشند که به وسیله آنها می توانیم کدهایی را که مورد استفاده آن زیاد می باشد و یا صورت و شکل مشخصی دارند را با سرعت و راحتی هر چه تمام تر ، وارد برنامه های خود نماییم.
   C#
   ۳۰۵۳۲
    سورس کد
   مرتضی صحراگرد
   ۱۳۸۵/۹/۲۶
نسخه قابل چاپ نسخه قابل چاپ

معرفي :

يکي از ابزارهاي جديدي که همراه با Visual Studio 2005 ارائه شده است کد اسنيپت ها (Code Snippets) مي باشند که به وسيله آنها مي توانيم کدهايي را که مورد استفاده آن زياد مي باشد و يا صورت و شکل مشخصي دارند را با سرعت و راحتي هر چه تمام تر ، وارد برنامه هاي خود نماييم.
استفاده ار کد اسنيپت ها بسيار ساده مي باشد . کافي است در نماي سورس برنامه کليک راست نموده و گزينه Insert Snippet را انتخاب نماييد. در اين هنگام کدهاي از قبل آماده شده ويژوال استوديو را مشاهده خواهيد کردکه به صورت Intellisense نمايش داده مي شوند. در اين نما، شما کتابخانه اي را مشاهده خواهيد کرد که با انتخاب هر کدام مي توانيد کد اسنيپت هاي زير مجوعه ي آن را مشاهده و وارد کلاس برنامه خود نماييد.

در هر دوي زبانهاي ويژوال بيسيک و سي شارپ امکان کد اسنيپت ها ، قرار داده شده است ولي به نظر مي رسد که هدف اصلي طراحان کد اسنيپت ها ، زبان ويژوال بيسيک بوده است زيرا کد اسنيپت هاي آماده شده ، براي اين زبان بسيار غني تر از زبان سي شارپ مي باشد.
 کد اسنيپت ها براي ما دو مزيت را به ارمغان مي آورند
 1. اگر قصد داريد در برنامه خود از کدهاي مشابهي همچون try…catch  ويا For … Loop   و غيره و يا قطعه کدهايي که در برنامه هاي مختلفتان تکرار مي شود استفاده کنيد ، کد اسنيپت ها بهترين انتخاب براي شما مي باشند و ديگر نياز نيست وقت خود را با نوشتن کدهاي تکراري هدر دهيد. تنها کافيست کد اسنيپت خود را وارد نماييد و قسمتهايي از آن را که مربوط به برنامه جاري شما مي باشد را تغيير دهيد.
 مزيت دوم که حتي به نظر مي رسد با ارزش تر از مزيت اول مي باشد اين است که : کدهايي هستند که شما به ندرت در برنامه ها استفاده مي نماييد ، که به ياد آوردن Syntax آنها و پارامترهاي ارسال شده به آنها مشکل مي باشد. مانند توابع API که به ياد سپاري نام ها و پارامترهاي ارسالي مشکل مي باشد. با کد اسنيپت کردن اين قطعه کدها ، اين مشکل به راحتي حل مي شود.
 تعدادي از کد اسنيپت ها در VS 2005  موجود مي باشد و مقدار بسيار زيادي را نيز مي توانيم از اينترنت دانلود نماييم . در اين مقاله نحوه استفاده از کد اسنيپت ها و ايجاد کد اسنيپت هاي جديد و تغيير آنها و در نهايت ساختن يک کتابخانه ارز کد اسنيپت ها را فرا خواهيد گرفت.

وارد کردن کد اسنيپت ها به برنامه :

اکنون ما آماده هستيم اولين کد اسنيپت را وارد برنامه نماييم. کافي است در جايي که مي خواهيد کد اسنيپت را وارد نماييد، کليک راست انجام داده و گزينه Insert Snippet را انتخاب نماييد. در زبان VB  علاوه بر اين کار مي توانيم از يک روش ديگر هم استفاده نماييد ، براي اين کار کاراکتر "؟" را تايپ نموده و کليد tab را فشار دهيد.
در اين هنگام زير مجموعه اي از کد اسنيپت ها را مشاهده مي کنيد . به طور مثال در VB زير مجموعه هاي Collections and Arrays  و Crystal Reports و غيره را مشاهده مي کنيد.
وقتي يک زيرمجموعه را انتخاب کرديد اسنيپت هاي مخصوص آن را خواهيد ديد. اکنون روي هر اسنيپت برويد يک ToolTip  باز شده و توضيحات مربوط به اسنيپت را به همراه Shortcut آن (در صورت وجود) نشان مي دهد.
اگر کلمه  Shortcut اسنيپت مورد نظر خود را مي دانيد به جاي طي کردن مراحل قبل جهت وارد کردن اسنيپت کافيست کلمه Shortcut آن را نوشته و کليد tab را بفشاريد. در اين هنگام کد اسنيپت مورد نظر وارد برنامه مي شود.(فقط در زبان VB)
در زبان VB اگر کلمه Shortcut اسنيپت مورد نظر خود به طور کامل به ياد نمي آوريد با تايپ حرف اول آن و سپس کاراکتر"؟"  و سپس فشار دادن کليد tab مي توانيد گزينه هاي پيشنهادي ويژوال استوديو را مشهاده نموده و اسنيپت خود را انتخاب نماييد.
اگر اسنيپت وارد شده به برنامه نيازمند Import کردن فضاي نامي (Namespace)  خاصي در ابتداي برنامه ويا اضافه کردن  Referenceخاصي به برنامه باشد ، در زبان VB اين کار توسط خود برنامه به طور خودکار انجام مي شود ولي در سي شارپ اينگونه نيست و اين يکي ديگر از مزيتهاي اسنيپت ها در VB نسبت به سي شارپ مي باشد.
اکنون با استفاده از زبان VB يک اسنيپت را وارد برنامه خواهيم نمود.
در محل مورد نظرتان کليک راست کرده و گزينه هاي زير را انتخاب نماييد


Insert Snippet …. | Collections And Arrays | Create a list with of a single type

کدهاي زير وارد برنامه مي شود

همانطور که مشاهده مي نماييد قسمتهايي از کد که نياز به تغيير توسط شما دارند به صورت Highlight  مي باشند . با فشار کليد tab مي توانيد روي نقاط Highlight شده حرکت کنيد و با استفاده از Shift + tab برگرديد.
دقت شود که در زبان VB تا زماني که فايل برنامه و متعلقاتش مانند Design View بسته شود قسمتهاي قابل تغيير اسنيپت به صورت Highlight باقي مي مانند. 

بررسي جزئيات کد اسنيپت ها : 

به محلي که ويژوال استوديو را نصب کرده ايد برويد . برنامه من در اين آدرس نصب شده است
D:\Program Files\Microsoft Visual Studio 8\VB\Snippets\1033
در اينجا پوشه هايي را مشاهده مي کنيد که اسنيپت ها در داخل آن ها قرار دارند . اکنون اسنيپت Create a list with of a single type را که در پوشه Collections And Arrays  قرار دارد را باز کنيد. فايلهاي Snippet با پسوند Snippet ذخيره مي شوند و در حقيقت فايلهاي ساده XML مي باشند.
در نگاه اول تگ هاي Header و Title و  Authorو Shortcut را مشاهده مي کنيد. توجه داشته باشيد که ، کلمه اي که داخل تگ Shortcut نوشته شده است ، همان Shortcut مربوط به اسنيپت است که قبلا در مورد آن بحث کرديم.
جمله اي که در داخل تگ Description نوشته مي شود همان جمله اي است که در هنگام باز شدن پنجره Intellisense در داخل ToolTip مربوط به اسنيپت نمايش داده مي شود.
علاوه بر تگهاي ذکر شده در بالا ، در داخل تگ Header ما ، 3 تگ ديگر نيز مي توانند وجود داشته باشند.که عبارتند از تگ Keyword و تگ HelpURL و تگ ُSnippetTypes .
تگ Keyword يک راه حل استاندارد جهت جستجو در داخل اسنيپت ها مي باشد.
تگ HelpURL شامل يک ارجاع به فايل Help در صورت وجود مي باشد.
و تگ ُSnippetTypes که کمي پيچيده تر مي باشد و در مورد آن بحث خواهم کرد.
دو مقدار مهم که در تگ ُSnippetTypes قرار مي گيرند Expansion و  SurroundsWith مي باشند. اگر Expansion قرار داشته باشد ، اسنيپت به صورت عادي و با روش هاي گفته شده در قبل قابل دسترسي مي باشد. اگر SurroundsWith باشد آنگاه اين اسنيپت مي تواند خاصيت احاطه کنندگي داشته باشد. براي مثال به آدرس زير برويد.


D:\Program Files\Microsoft Visual Studio 8\VC#\Snippets\1033\Visual C#

اسنيپت foreach را باز نماييد. مشاهده مي کنيد که اين اسنيپت داراي هر دو نوع ُSnippetTypes مي باشد.
در شکل زير من چند خط کد نوشته و آنها را انتخاب(Select) کرده ام . سپس روي کدهاي انتخاب شده کليک راست کرده و گزينه SurroundsWith را انتخاب مي کنم . اکنون ليستي از اسنيپت هايي که خاصيت SurroundsWith دارند به صورت Intellisense نمايش داده مي شود که يک از آنها گزينه foreach مي باشد.

در صورتي که اسنيپت foreach را انتخاب نمايم ، اين اسنيپت قطعه کد انتخاب شده من را احاطه مي کند . نتيجه را در شکل زير مشاهده مي کنيد.

همانطور که قبلا ذکر شد زبان VB هنگامي که اسنيپت را وارد برنامه مي کند اگر اسنيپت نيازمند اضافه کردن Reference و يا  Importکردن فضاي نامي باشد ، اين کار به صورت خودکار انجام مي گيرد . اين عمل در حقيقت با اضافه کردن تگهاي Reference و Import به اسنيپت امکان پذير مي باشد.

مثالي براي وارد کردن Import :


<Imports>

<Import>

<Namespace>Microsoft.VisualBasic</Namespace>

</Import>

<Import>

<Namespace>System.Collections</Namespace>

</Import>

</Imports>

مثالي براي وارد کردن Reference :


<References>

<Reference>

<Assembly>System.Windows.Forms.dll</Assembly>

</Reference>

</References>

با کمي بررسي کدهاي XML داخل اسنيپت ها پي به عملکرد هرکدام از تگ ها خواهيد برد.

ساخت يک کد اسنيپت از ابتدا :

در اين قسمت ما يک اسنيپت جديد ايجاد خواهيم نمود.
همانطور که مستحضر هستيد در زبان VB متدي به نام IsNumeric وجود دارد که يک شي را گرفته و مشخص مي کند اين شي از نوع عددي مي باشد يا خير.
ما در اين قسمت براي زبان سي شارپ متدي مي نويسيم که اين کار را در اين زبان انجام دهد . در صورتي که شئ ارسال شده به تابع از نوع عددي باشد مقدار true و در غير اينصورت مقدار false را بر مي گرداند.
در داخل پوشه My Documents خود پوشه اي به نام My Code Snippets ايجاد نماييد. کدهاي زير را داخل Notepad نوشته و با نام  IsNumeric.snippet در داخل پوشه My Code Snippets ذخيره نماييد.(فايل اسنيپت مربوطه را مي توانيد از لينک بالاي صفحه دانلود نماييد)


<?xml version="1.0" encoding="utf-8" ?>

<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">

<CodeSnippet Format="1.0.0">

<Header>

<Title>IsNumeric</Title>

<Author>Morteza Sahragard www.30sharp.com</Author>

<Description>Inserts an IsNumeric function.</Description>

<Shortcut>IsNumeric</Shortcut>

<SnippetTypes>

<SnippetType>Expansion</SnippetType>

</SnippetTypes>

</Header>

<Snippet>

<Code Language="csharp">

<![CDATA[

/// <summary>

/// Return False If obj Is Not Number Else Return True. www.30sharp.com

/// </summary>

/// <param name="str"></param>

/// <returns>bool</returns>

public static bool IsNumeric(object obj)

{

if (obj == null || obj.ToString().Trim() == String.Empty)

{

return false;

}

string str=obj.ToString().Trim();

for(int i=0;i<str.Length;i++)

{

if (str[0] == '-' || str[0] == '+')

{

continue;

}

if (Char.IsNumber(str[i]) == false)

{

return false;

}

}

return true;

}]]>

</Code>

</Snippet>

</CodeSnippet>

</CodeSnippets>

اکنون برنامه سي شارپ خود را باز نماييد و از منوي Tools گزينه Code Snippets Manager را انتخاب نماييد.
در پنجره باز شده ، از زبانهاي بالاي پنجره ، زبان ويژوال سي شارپ را انتخاب نماييد.روي دکمه Add کليک کنيد و در پنجره باز شده آدرس پوشه My Code Snippets که خود ساخته ايد را وارد نموده و تأييد نماييد.
نتيجه را مانند شکل زير خواهيد ديد . اکنون همه چيز آماده است و شما مي توانيد از اسنيپت  IsNumeric در برنامه هاي سي شارپ استفاده نماييد.

داخل پنجره Code Snippets Manager گزينه هاي ديگري نيز وجود دارند که به طور خلاصه به مرور آنها مي پردازم.
از دکمه Remove براي حذف کردن يک پوشه استفاده مي شود.
از دکمه Import براي اضافه کردن يک کد اسنيپت جديد به کد اسنيپت هاي يک پوشه هاي موجود در پنجره Code Snippets Manager استفاده مي شود.
از دکمه Search Online براي جستجو در اينترنت براي اسنيپت هاي آماده مي توانيم استفاده کنيم.

يک ابزار آماده براي کد اسنيپت ها :

اگر شما علاقه مند به ايجاد کد اسنيپت هاي خودتان هستيد ، در اين آدرس ابزاري براي زبان VB وجود دارد که امکان ايجاد ، ويرايش ، آزمايش اسنيپت و غيره را براي شما فراهم مي سازد.
http://msdn.microsoft.com/vbasic/downloads/tools/snippeteditor
تا زمان نگارش اين مقاله ، متأسفانه ابزاري براي توسعه اسنيپت ها براي زبان سي شارپ ارائه نشده است !

ملاحظات امنيتي :

هنگامي که بسته هاي کد اسنيپت را از اينترنت دانلود نموديد ، قبل از استفاده حتمآ با استفاده از ويروس کش خود آنها را اسکن نماييد.
همانطور که بيان شد ، اسنيپت ها مي توانند Reference ها را به برنامه شما اضافه کرده و از آن استفاده نمايند.فايل Reference داده شده ، ممکن است همراه با اسنيپت ، دانلود شده باشد و هنگام اجراي برنامه به سيستم شما آسيب برساند.
تگ HelpUrl شامل يک لينک مي باشد که مي تواند به يک اسکريپت خطرناک روي سيستم شما و يا به اينترنت لينک شده باشد.
در نهايت سعي کنيد قبل از اضافه کردن اسنيپت هاي ناشناس به برنامه ، حتمـآ سورس آن را مطالعه نماييد.
 
منبع : DotNet Developers Journal October 2006