Makale Özeti

Visual Studio 2005 in yeni özelliklerinden olan Snippet ların, daha detaylı olarak nasıl kullanıldığına, kendiniz işinize yarayacak şekilde bir Snippet nasıl oluşturursunuza cevap veren bir makale.

Makale

Code Snippetlar

Merhabalar, bu makalemiz de Yine Visual Studio Whidbey ile gelen yeni özellikleri incelemeye devam ediyoruz, inceleyeceğimiz özellik, Programcıların, Kod yazanların işlerini daha da hızlandıracak olan Code Snippet lar.

Code Snippet ların ne olduğuna bakalım ilk önce. Code Snippet lar, belli bir yapıya göre yazılmış kodların şablonlaştırılarak bizim kullanımımıza sunulmuş yapılardır. Örneğin bir for yapısı kullanacaksınız. Bunun için oturup sıfırdan For deyimini yazmakla uğraşacağınıza For için yazılmış olan Snippet ı kullanıp işinizi çok daha hızlı ve standartlaştırılmış olarak yapabilirsiniz. Belkide snippetlerin en çok kullanımı standartlaştırılmış işlerinizi rutine bağlamak olacaktır, çünkü hayatında milyarlarca kere farklı dillerdede For döngüsü yazmış olan bir programcının Snippetleri kullanacağını pek sanmıyorum :)

Snippetler her dil için ayrılmış durumda, yani Visual Basic için farklı bir yapıda, C# için başka bir yapıda, j# için başka bir yapıda, buda şu demek, bir dil için yazdığınız Snippet ı diğer dillerde kullanamayacaksınız demek. Aslında snippetler genel yapıda, ancak bazı ufak tefek değişiklikler mevcut, bu değişikliklere ileride değineceğim.

Bu makaleyi özellikle dilden bağımsız olarak yapmak istedim, yani Vb.Net ciler ve C# cılarda okusun istediğim için aşağıda iki tür koda da yer vereceğim, ilk örneğimize bakalım

Vb.Net için

Bir tane Visual Basic Windows Application açın (Web de olabilir önemli değil Snippetleri her ortamda kullanabilirsiniz) bir buton koyun ve iki kere tıklayarak, Code bölümüne geçin, burada farenizin sol tuşuna basın ve Insert Snippet e basın. Gördüğünüz gibi klasör yapıları gelecek, Visual Basic de çok fazla snippet olduğundan klasörlemişler, biz buradan Visual Basic Language yi oradanda For...Next Statement i seçeceğiz.

 

Bize aşağıdaki gibi bir şablon oluşturdu,

 

Şimdi oluşturulan kodu şu hale getirin ve çalıştırın. Burada düzenlerken Tab tuşunu kullanıp, size şablon olarak verilmiş olan bu yapının özel değerleri üzerinde gezebilirsiniz ki bence gerçek hızıda bu getirecek. Sonuçta kodumuz şu hali aldı,

        For sayi As Integer = 1 To 3

            MessageBox.Show(sayi.ToString())

        Next

C# için

Bu sefer C# ile bir Windows uygulaması oluşturun, yine bir buton koyup iki kere tıklayıp, Code sayfasına geçin, C# da snippetin çalıştırılması için iki yol var, bir tanesi Vb.Net te yaptığımız gibi Sağ tuş ile Insert Snippet demek, diğeri ise Intelli Sence si kullanıp kodu oluşturmak, sağ tuş ile yaptığınız Vb.Net tekinin aynısı, Intelli Sence ile yapmak isterseniz eğer, for yazın ve daha sonra iki kere Tab tuşuna basın, böylece size şablon oluşturulacaktır. Şablonu aşağıda görebilirsiniz.

 

Şimdi kodları düzenleyeceğiz, örneğin bana i diye oluşturduğu değişkeni sayi yapın ve Tab tuşuna basın, göreceksinizki hemen yan tarafındaki iki tane i değerinide otomatik olarak sayi ile değiştirecek, sonra lenght i de değiştirin ve Enter yapın, burayada aynı Vb.Net teki gibi kullanacağınız kodu örneğin MessageBox.Show() metodunu yazın. Aşağıdaki şekilden görebilirsiniz.

            for (int sayi = 0; sayi < 5; sayi++)

            {

                MessageBox.Show(sayi.ToString());

            }

Kiminiz “evet gerçekten hızlandırır bu bizi” diyeceksiniz, kiminizde “amaaan bune” diyiceksiniz biliyorum (daha önceden verdiğim eğitimlerde, sınıftan hep bu tarz sonuçlar duyuyordum) ancak esas önemli noktası, sizin mimarinize göre oluşturulmuş yapılarda size çok hız kazandıracağıdır (gerçekten kullandım, hız kazandırdığını biliyorum) örneğin düşünün herhangi bir katmanda bir metodunuz var ve şablon olarak belli, ancak metodun adı, aldığı parametre veya da sonuç olarak gönderdiği yapı hepsi belirli şablonlara uyacak şekilde ve sonuçta bu metodu yazmak bir vakit işi, işte bunu kendi yazacağınız bir snippet ile çok daha hızlı bir şekilde yapabilirsiniz. Şablonumuzun şöyle olduğunu düşünelim,

Vb.Net için

    Public Function funAddEmployee(ByVal parEntEmployee As entEmployee) As entEmployee

        'Kodlariniz Burada

        Return parEntEmployee

    End Function

C# için

        public entEmployee funAddEmployee(entEmployee parEntEmployee) {

            //kodlariniz Burada

            return parEntEmployee;

        }

Bu basit ve konunun özünü sizlere açıklaması açısından kolay bir örnek, şimdi bu tazda snippetler yazalım, ama ilk önce Visual Studio 2005 içinde Snippetleri nasıl yönetebileceğinize bakalım, bunun için Tools Menüsünden, Code Snippets Manager ı açın.

Yukısındaki Combo dan dili değiştirip, bu dillere göre olan Snippet inceleyebilirsiniz. Dikkat ederseniz, üç dildede (birde XML için var) bir standart klasör var, My Code Snippets isminde, işte kendi yazdığımız Snippetları buraya ekleyerek, Visual Studio .Net ten kullanabilirsiniz. Peki şimdi şablon olarak bir Snippet nasıl bir şekilde onu inceleyelim. Önceden yazılmış Snippetları Program Files\Microsoft Visual Studio 8\<Dil>\Snippets\1033 klasörünün altında bulabilirsiniz, örneğin Vb.Net e Snippet yazacaksınız, Dil bölümüne VB, C# yazacaksanız dil bölümüne ise VC# yazın. Burada klasörler ile ayrılmış Snippeteri bulacaksınız, Snippet dosyalarının uzantısı, snippet dir, aslında tamamen XML dosyalarından oluşturulmuşlardır. Bu dosyaları inceleyip bize ışık tutmalarını sağlayalım.

XML dosyasının Root elemanı CodeSnippets elemanıdır, burada XML NameSpace sini tanımlar, daha sonraki eleman ise CodeSnippet elemanıdır, tahmin ettiğini üzere burası bizim Snippetimizin oluşturulacağı yer, sonraki bölüm kendi içinde iki ye ayrılır, Header ve Snippet olarak, Header bölümünde bu Snippeti tanımlayacak bölümler bulunur, örneğin, hangi isimle görüntüleneceği (title), kısa yolu, açıklaması vs. Snippet bölümü ise Snippet ile iligili tanımlamaların yazıldığı, buna göre işlemlerin yapıldığı yerdir. Bu bölüm ise temelde ikiye ayrılır, ancak bir ek daha vardır. Temelde olan elemanlar, Declarations ve Code bölümleridir, bunun yanında ise çok sık kullanılan Imports elemanı bulunur. Imports elemanı hangi NameSpace lere ihtiyacı olduğunu anlatır. Declarations ve Code bölümünü anlatmak için ise biraz daha bilgiye ihtiyacımız var.

Snippet lar değişkenler ile çalışırlar yani daha önceki For örneğimizde denediğimiz gibi, bazı alanlar yeşildi ve biz onları yazdığımız zaman değişiyorlardı, Tab ile de bir sonraki yeşil alana geçip orayı düzenliyorduk. İşte o bölüm Declarations bölümünde tanımlanmış olan değişkenler. Bu değişkenleride daha sonra oluşturulan kodun içinde kullanıyoruz, örneğin For için bir Index değişkeni tanımlanmıştı ve ben onu sayi yapmıştım hatırlarsanız. Declarations bölümünde String olarak tanımlanıyorlar ancak Code bölümünde kullanılırlarken, başında sonunda birer tane $ simgesi ile kullanılıyorlar. Şimdi daha önceden kullanmış olduğumuz For Snippet inı inceleyelim. Daha detaylı olarak incelemek istiyorsanız, sizin makinenizdeki Snippeti inceleyebilirsiniz, ben her eleman için sadece bir grubu göstereceğim.

Header Bölümü,

<Header>

      <Title>for</Title>

      <Shortcut>for</Shortcut>

      <Description>Code snippet for 'for' loop</Description>

      <Author>Microsoft Corporation</Author>

      <SnippetTypes>

            <SnippetType>Expansion</SnippetType>

            <SnippetType>SurroundsWith</SnippetType>

      </SnippetTypes>

</Header>

Snippet Bölümü,

Bu bölüm üçe ayrılıyordu

Imports Bölümü,

<Import>

  <Namespace>Microsoft.VisualBasic</Namespace>

</Import>

Declarations Bölümü,

<Literal>

  <ID>LowerBound</ID>

  <Type>Integer</Type>

  <ToolTip>Replace with an Integer value.</ToolTip>

  <Default>1</Default>

</Literal>

<Literal>

  <ID>UpperBound</ID>

  <Type>Integer</Type>

  <ToolTip>Replace with an Integer value.</ToolTip>

  <Default>10</Default>

</Literal>

Code Bölümü,

<Code Language="VB" Kind="method body"><![CDATA[For $Variable$ As $CounterType$ = $LowerBound$ To $UpperBound$

    $Code$

Next

]]></Code>

Gördüğünüz gibi, LowerBound ve UpperBound isimli iki değişken tanımlamış ve bu değişkenleri $LowerBound$ ve $UpperBound$ ile kullanmış, şimdi bizim yukarıda tanımladığımız fonksiyonun Snippet larını yazalım, burada çok yer kaplamasın diye sadece Declaration ve Code bölümlerini veriyorum, isterseniz Download bölümünden kodu indirebilirsiniz

Vb.Net için

      <Declarations>

        <Literal>

          <ID>funName</ID>

          <Type>String</Type>

          <ToolTip>Fonksiyonun ismi ile degistirin</ToolTip>

          <Default>AddEmployee</Default>

        </Literal>

        <Literal>

          <ID>parameterName</ID>

          <Type>String</Type>

          <ToolTip>Parametrenin ismi ile degistirin</ToolTip>

          <Default>EntEmployee</Default>

        </Literal>

        <Literal>

          <ID>entitiyName</ID>

          <Type>String</Type>

          <ToolTip>Entity nin ismi ile degistirin</ToolTip>

          <Default>Employee</Default>

        </Literal>

      </Declarations>

      <Code Language="VB" Kind="method body">

        <![CDATA[Public Function fun$funName$(ByVal par$parameterName$ As ent$entitiyName$) As ent$entitiyName$

        'Kodlarinizi buraya yazin

        Return par$parameterName$

    End Function

]]>

      </Code>

C# için

      <Declarations>

        <Literal>

          <ID>funName</ID>

          <Type>String</Type>

          <ToolTip>Fonksiyonun ismi ile degistirin</ToolTip>

          <Default>AddEmployee</Default>

        </Literal>

        <Literal>

          <ID>parameterName</ID>

          <Type>String</Type>

          <ToolTip>Parametrenin ismi ile degistirin</ToolTip>

          <Default>EntEmployee</Default>

        </Literal>

        <Literal>

          <ID>entitiyName</ID>

          <Type>String</Type>

          <ToolTip>Entity nin ismi ile degistirin</ToolTip>

          <Default>Employee</Default>

        </Literal>

      </Declarations>

      <Code Language="csharp">

        <![CDATA[public ent$entitiyName$ fun$funName$(ent$entitiyName$ par$parameterName$){

        //kodlariniz Burada

        return par$parameterName$;

    }

]]>

      </Code>

Kullanmak için ise bu Snippet lerinizi MyDocuments\Visual Studio 2005\Code Snippets yolundaki hangi dille ilgilileniyorsanız onun altındaki klasör e koymanız gerekiyor. Peki bu yazdığımız snippetları nasıl kullanacağız,

Vb.Net için

 

C# için

 

Biz Snippet larımızı My Code Snippets içine koyduğumuzdan, Visual Studio 2005 e tanıtmak zorunda kalmadık, ama başka bir yerde ise Snippet larınız o zaman Tools Menüsünün altından, Code Snippets Manager ile, ya içinde Snippet larınızın bulunduğu klasörü Add ile eklemeniz gerekir, yada Import ile sadece bir Snippet ınızı eklemeniz gerekir.

Son olarak ufak bir ipucu vereyim, C# da az snippet gözülüyor, ancak başka bir sürü snippet var, özelliklede Office ile ilgili, Code Snippets Manager ile bu Snippet larınızı ekleyebilir ve hızlı bir şekilde kullanabilirsiniz. Örnek Snippet dosyalarını indirmek için Download bölümüne bakın.

İstek, Öneri ve eleştirileriniz için aşağıdaki mailimi kullanabilirsiniz.

Levent Cenk ÇAĞLAR

cenk.caglar@yazgelistir.com

Ornek Snippet Dosyasi C#

Ornek Snippet Dosyasi Vb.Net