12 Mart 2016 Cumartesi

Typescript Nedir?



Son zamanlarda git gide popülatesi artan Javascript'in başlangıçta sadece browser tarafında çalışacak şekilde tasarlanması fakat daha  sonra Node.js ile sunucu tarafında hatta bununla da yetinmeyip Electron.js ile masaüstü uygulamaları geliştirmemize olanak sağladı. Durum böyle olunca başta sadece küçük projeler için kullanılması planlanan Javascript zaman geçtikçe çok daha farklı ve tahmin edilemez bir noktaya ulaştı.

Küçük bir dil olması planlandığı için içerisinde classlar, modüller, interfaceler vb.. bulunmuyordu. Bu nedenle büyük ölçekli projeleri javascript ile geliştirmek ve geliştirdikten sonra bu uygulamaların analizde/yönetimde zorluğu da beraberinde getiriyordu. Hal böyle olunca .NET'in babalarından birisi olan Anders Hejlsberg ve ekibi Javascript'in bir  üst kütüphanesi olan Typescript'i open source olarak geliştirdiler. Ayrıca typescript'in sitesine şuradan erişebilirsiniz

Peki neden bu dili geliştirme ihtiyacı doğru?

  • Yukarıda da belirtiğim gibi ihtiyaç duyulmasının en önemli nedenlerinden bir tanesi büyük ölçekli projelerde analiz ve yönetimde javascript'in sıkıntılar çıkarması.
  • Nesne tabanlı programlamın özelliklerini(Abstraction, Encapsulation, Inheritance, Polymorphism vb. gibi) taşmıyor olması.
  • Javascript'in Dinamik olması ona büyük bir güç katarken aynı zamanda development esnasında da bize bir o kadar zorluk çıkarıyor. Kod içerisindeki hataları bulmamız ve kodun bakımını yapmamız zorlaşıyor. Statik programlama dillerinin(C#,Java vb..) development esnasında bize sağladığı güzellikleri (refactoring, find references vb..) düşünürsek Javascript doğası gereği bu yeteneklerden de mahrum kalıyor.
  • Esnek bir dil olduğu için modern dillerde alışa geldiğimiz editor/geliştirme aracı desteği tam olarak javascript için verilemiyor.
bunlar ve benzeri nedenlerden dolayı typescript'i geliştirme ihtiyacı duydular. Syntax olarak javascript'e benzeyen ama ayrı bir gramer yapısı olan bir javascript üst kümesi olarak tanımlamak daha doğru olacaktır.  TypeScript’te aynı .Net framework gibi bir derleyici tarafından yorumlanarak ara bir dile dönüştürülüyor. Bu ara dil .net framework için CLR iken, TypeScript için javascript oluyor.

Kurulum
Typescript'i editör olarak  VS Code, WebStorm, Atom, Sublime Text, ve Eclipse gibi birçok editör ile kullanabilirsiniz. Ayrıca nodejs ile de kullanma şansınız mevcut. Ben visual studio 2015 kullanacağım. Aşağıdaki adreslerden setuplara ulaşabilirsiniz.

Visual studio 2013 için Typescript


Visual studio 2013 için Typescript

Son olarak Nodejs ile yüklemeniz için

$ npm install -g typescript


Visual studio 2015 ile şu şekilde yeni bir typescript projesi oluşturabilirsiniz.



Basit tiplerin kullanımı

Boolean


En temel veri türlerinden birisi olan javascript ve diğer dillerde de olan boolean tipi kullanımı.

var gender: boolean = false;

Number

Sayısal verileri tutmamızı yarayan tiplerinden birisi de number tipi.

var age: number = 22;

String

Metinsel ifadeleri tuttuğumuz string değişkeni javascript de olduğu gibi typescript de tektırnak ' yada çift tırnak " şeklinde kullanılabiliyor.
var name: string = "ali";
name = 'veli';

Array

Typescripte dizi tanımlaması iki şekilde oluyor ilk yol...

var list:number[] = [1, 2, 3];

ikinci yöntem ise generic array tipi oluşturarak da dizi tanımlaması yapabiliyoruz.

var list:Array<number> = [1, 2, 3];

Enum

C# ve diğer dillerde olduğu gibi sayısal verilerin kullanılmasında yardımcı olan enum tipini şu şekillerde kullanımı mevcut

enum Color {Red, Green, Blue};
var c: Color = Color.Green;

Varsayılan olan enum üyelerinin değerlerini değiştirebiliriz örneğin : 0 dan başlatmak yerine 1 den başlatabiliriz.

enum Color {Red = 1, Green, Blue};
var c: Color = Color.Green;

Yada tüm enum elemanlarının değerlerini ayarlayabiliriz.

enum Color {Red = 1, Green = 2, Blue = 4};
var c: Color = Color.Green;

Enumların bir diğer kullanışlı özelliği ise sayısal değerler ile erişebiliyor olmamız. örneğin adını bilmiyoruz ama ikinci sıradaki enum değerine erişmek istiyoruz bu durumda şöyle bir yöntem izlenebilir.

enum Color {Red = 1, Green, Blue};
var colorName: string = Color[2];// burada enum'daki ikinici sıradaki değer olan green dönecektir.
AnyBazı durumlarda veri tipinin ne olacağını bilmediğimiz durumlar olabiliyor örneğin 3. parti araçlarını kullanırken gelecek olan verinin tipini bilemediğimiz durumlarda yada dinamik içerik üretmemiz gerektiği yerlerde any tipini kullanabiliriz.

var unknownType: any = 4;
unknownType = "maybe a string instead";
unknownType = false; // en son atadığımız değerin tipi ne ise değişkenimizin tipi o olur.

Ayrıca dizilerde any tipini kullanıp farklı tipleri aynı dizi içerisinde tutmamızda mümkün.

var list:any[] = [1, true, "free"];
list[1] = 100;

InterfacesBurada aslında şöyle bir durum söz konusu Interfaces'in javascripte bir karışılı yok bu yüzden typescripte tip kontrolü yapılırken, javascript tarafında ise dilin dinamik yapısından faydalanmış.

interface LabelledValue { label: string; }

function printLabel(labelledObj: LabelledValue) {

console.log(labelledObj.label);
}

var myObj = {size: 10, label: "Size 10 Object"};
printLabel(myObj);

Interfaces Opsiyonel Özellikler

Interfaces'deki tiplerin isteğe bağlı olarak girilmesini isteğebiliriz böyle bir durum şu şekilde gerçekleştirebilir.

interface SquareConfig {
// Altaki iki satırda görmüş olduğunuz gibi değişken adının sonuna ? koyarak opsiyonel olarak tanımlayabiliriz
  color?: string;
  width?: number;
}

function createSquare(config: SquareConfig): {color: string; area: number} {
  var newSquare = {color: "white", area: 100};
  if (config.color) {
    newSquare.color = config.color;
  }
  if (config.width) {
    newSquare.area = config.width * config.width;
  }
  return newSquare;
}

var mySquare = createSquare({color: "black"});

Interfaces Class Tipi

C# ve java dillerinde olduğu interfaces'i sınıfa implements edilmesi mümkündür.

interface ClockInterface {
    currentTime: Date;
}

class Clock implements ClockInterface  {
    currentTime: Date;
    constructor(h: number, m: number) { }
}

Extending Interfaces

Sınıflarda olduğu gibi arayüzleri de birbirlerine ekleyerek de kullanabiliriz..

interface Shape {
    color: string;
}

interface Square extends Shape {
    sideLength: number;
}

var square = <Square>{}; square.color = "blue";
square.sideLength = 10;

Hybrid Tipler

Interfaces ile ilgili son olarak javascriptin yapısında bulunan interval, HTMLElement ve HTMLInputElement gibi javascript tiplerinide interfaces içerisinde tanımlayabiliriz.

interface Counter {
    (start: number): string;
    interval: number;
    reset(): void;
}

var c: Counter;
c(10);
c.reset();
c.interval = 5.0;

Sınıfların kullanılması

C#, java ve diğer programlama dillerinde olduğu gibi typescript'e de aynı mantıkla sınıflar oluşturabilirsiniz. Erişim belirleyiciler bölümünde tekrar söz edeceğiz ama diğer dillerden farklı olarak typescript de sınıflar varsayılan olarak public sayılır.

class Greeter {
    greeting: string;
    constructor(message: string) {
        this.greeting = message;
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}

var greeter = new Greeter("world");

Inheritance

Typescript de nesne tabanlı programlamanın miras özelliğini kullanabilirsiniz. Bunun için C# dan farklı olarak extends komutunu kullanmamız gerekmektedir. Ayıca miras alınan sınıfın constructor'una parametre göndermek için : base yerine constructor içerisinde super fonsiyonunu kullanıyoruz.

Aşağıda Animal sınıfının Snake ve Horse sınıflarına miras edildiğini görebilirsiniz..

class Animal {
    name:string;
    constructor(theName: string) { this.name = theName; }
    move(meters: number = 0) {
        alert(this.name + " moved " + meters + "m.");
    }
}

class Snake extends Animal {
    constructor(name: string) { super(name); }
    move(meters = 5) {
        alert("Slithering...");
        super.move(meters);
    }
}

class Horse extends Animal {
    constructor(name: string) { super(name); }
    move(meters = 45) {
        alert("Galloping...");
        super.move(meters);
    }
}

var sam = new Snake("Sammy the Python");
var tom: Animal = new Horse("Tommy the Palomino");

sam.move();
tom.move(34);

Accessors

Değer okuma ve yazmada kullandığımız get ve set keyword'leri typescript ile kullanmamız mümkün aşağıdaki örnekte set propertiesinde bir şifre ile set işlemi gerçekleşen bir method var. Bu şifre doğru ise set işlemini gerçekleştiriyor yanlış ise alert ile bir uyarı vermektedir.

var passcode = "secret passcode";

class Employee {
    private _fullName: string;

    get fullName(): string {
        return this._fullName;
    }

    set fullName(newName: string) {
        if (passcode && passcode == "secret passcode") {
            this._fullName = newName;
        }
        else {
            alert("Error: Unauthorized update of employee!");
        }
    }
}

var employee = new Employee();
employee.fullName = "Bob Smith";
if (employee.fullName) {
    alert(employee.fullName);
}


Sonuç

Sonuç olarak artık javascript tarafında da nesne tabanlı programlama tekniğini çok rahat bir şekilde kullanabiliyoruz. Bu makele hakkındaki görüşlerinizi veya sormak istediğiniz soruları yorum kısmından iletirseniz sevinirim.

Makalede kullandığım örnekleri şu siteden alıntıdır.

http://www.typescriptlang.org/Handbook

28 Şubat 2016 Pazar

Apache Cordova Nedir?

Apache Cordova Hakkında


Cordova web tabanlı cross platform mobil uygulama geliştirmemize yarayan bir open source javascript framework'üdür. Bu demek oluyor ki HTML,CSS ve javascript kullanarak mobil uygulama geliştirebileceğimiz anlamına geliyor. Cordova cihaz fonksiyonlarına erişmek için javascript api'leri sunuyor. Bu apiler yardımıyla çeşitli cihaz özelliklerine erişebiliyoruz örneğin kameradan görüntü almak, bildirim göndermek, dosya işlemleri gibi bir çok cihaz özelliklerine erişebiliyoruz. Apileri daha detaylı incelemek ve tüm api listesini görmek için şu adrese bakabilirsiniz. Cordova Plugins

Web tabanlı olduğu için çeşitli web frameworklerinide örneğin jQuery Mobil, Dojo Mobil, Sencha Touch, Ionc framework, Monoca, Onsen UI gibi bir çok framework kullanmanıza imkan sağlıyor. Ayrıca yazmış olduğumuz kodları istediğiniz platform da derleyip Store yükleyecek şekilde hazırayıp veriyor. Uygulamanızı Android, Symbian OS, Windows Phone, Web OS ve Bada dışında iOS ve BlackBerry için de derleyecekseniz bu iki platformun geliştirici portallarına giriş yaparak imza anahtarları almanız gerekiyor. Bu anahtarları PhoneGap üzerine yükleyerek iOS ve BlackBerry için kolayca derleme yapabilirsiniz.


Yüklenmesi
Cordova ile uygulama geliştirebilmek için öncelikle bunların node.js modüllerine ihtiyacımız var. Bu modülleri edinmek ve kullanabilmek içinde node.js yi kurmamız gerekli. Node.js hakkında bilgi sahibi olmanızı gerektirecek bir şey yok ama yeni tanışan arkadaşlar için javascript dilini kullanan,sunucu tabancı uygulama geliştirmeyi sağlayan bir platform olarak tanımlayabiliriz. Şu linkten NodeJs'i indirebilirsiniz.

Şimdi komut satırını açarak node -v ve npm -v komutlarını girdiğinizde node.js ve npm nin versiyonlarının yazması gerek. Eğer node ve npm komutu bulunamıyor diyorsa ortam değişkenleri üzerinden node ve npm komutlarını global şekilde çalışabilmesi için ayarlamamız gerek.

Bu ayarları nasıl yaparız?

  • Node.js nin kurulumunun yapıldığı klasörün dosya yolunu kopyalayın.
  • Bilgisayarımı açın.
  • Sistem özelliklerini açın.
  • Sağda gelişmiş sistem özelliklerini açın.
  • Açılan pencerede altta ortam değişkenlerine tıklayın.
  • Açılan pencerede alt kısımda Path ı bulup düzenleye tıklayın.
  • Alttaki değişken değeri kısmını silmeden en sonuna ; ve kopyaladığımız klasör yolunu yapıştırıp tamama tıklayın.

Şimdi node -v ve npm -v komutlarının çalışması gerek.


NodeJs'i kurduktan sonra şu komut ile cordova'yı bilgisayarınıza kurabilirsiniz.. Burada extra eklemek istediğim bilgi cordova'yı indirmek için npm komutunu kullanacağız. Npm açılımı ile node.js package manager Türkçesi ile node.js paket yönetim sistemi. Ayrıca burada ki -g komutu bütün bilgisayara cordova'yı yüklemek istediğinizi belirtmeniz eğer -g kaldırırsanız sadece cmd'nin açık olduğu dizine kuracaktır. Tekrar tekrar kurmak zorunda kalmamanız için -g şeklinde kurmanızı öneririm.

$ npm install -g cordova

İlk projenin oluşturulması

Yükleme işleminiz bittikten sonra ilk projemizi oluşturalım ve klasör yapısına göz atalım. Aşadaki komut ile MyApp adında bir cordova projesi oluşturacaktır. MyApp kısmını kendi proje adınıza göre değiştirebilişiniz.

$ cordova create MyApp

Klasör yapısı

Oluşturulan projenin klasör yapısına bakacak olursak şu şekilde;

|-MyApp/
    |
    |--hooks
    |--platforms
    |--plugins
    |--www
    |--config.xml
   

Genel olarak en sade klasör yapısı bu şekilde oluşuyor proje durumuna göre yeni klasörler eklenebilir.

Hooks

Cordova Hooks cordova komutları özelleştirmek için hatta kendi komut sistemi ile veya uygulama ve eklenti geliştiricileri tarafından eklenebilir özel komut temsil etmektedir. Kısaca kendimize özğü cordova komutları oluşturabileceğimiz yada var olan komutları kendimize göre özelleştirebileceğimiz bir sistem bu sistemi daha detaylı incelemek için şu adrese bakabilirsiniz. Cordova hooks

Platforms

Bu klasör altında eklemiş olduğunuz mobil platformların dosyaları bulunmaktadır. İlk başta ekli olan platform olmadığı için boş gelecektir ileride platform ekleme silme gibi komutları inceleyeceğiz.

Plugins

Bu klasör de ise cordova api'lerinin tutulduğunu görüceksiniz ilerde eklemiş olduğumuz eklentiler bu klasör altında toplanacak.

www

Adından da anlaşılacağı gibi HTML,CSS ve javascript gibi temel web dosyalarımız bulunacak. Cordova derlenirken bu klasör altındaki dosyaları ilgili mobil platformunuza derleyip hazır edecek.

Config.xml

Bu kısım cordova ve platform ayarlanın yapıldığı kısım burası bu kısmı en temel halinde incelemek istiyorum.




Xml Renksiz hali biraz kötü gözükse de şu işe yarıyor.

<widget> tagın da vermiş olduğunuz id attiribute sizin uygulamanızın paket adına denk geliyor. xmlns:cdv attiribute ise cordova tabanlı bir uygulama olduğunu belirmiş oluyoruz.

<name> tagın da ise uygulamanın adını belirtiyoruz. Yani mobilde uygulamanızın gözükecek adı...

<description>  tagın da uygulamanız hakkında tanımlama yapabilirsiniz.

<author> da ise kendiniz yada şirketinizin isim, email veya siteniz gibi bilgilerinizi girebilirsiniz.

<content> de ise başlangıç sayfasını belirliyoruz ancak bu kısım biraz tehlikeli javascript tarafında da yazıldığı için burayı değiştirdiğinizde javascript tarafında da ayarları düzeltmeniz gerekmektedir aksi halde sorun çıkarabiliyor.

<plugin> uygulamaya eklediğimiz apilerin bilgilerini tutuyor.

<access origin="*" /> uygulamanın erişim alanları ile ilgili kısıtlamalar getirebilmemize olanak sağlıyor.

<allow-intent>  uyguama içindeki telefon numaraları, epostalar veya linklere tıkladığımız da ilgili uygulamaya gitmesini sağlamamız için örneğin telefon numarasına tıklayınca arama ekranına gitsin gibi..

<platform> eklemiş olduğunuz platformların bilgilerini içeriyor.

En sade config.xml yapısı bu şekilde platform ve eklenti ekledikçe buraya yeni taglar gelecektir gene yapı bu şekilde.

Çalıştırılması ve test edilmesi

Uygulamayı 3 şekilde çalıştırabilirsiniz.
1. Browser
2. Emulator
3. Device (Bunu usb ile telefonunuza bağlayarak yada ilgili platformun setup dosyasını telefonunuza yükleyerek yapabiliyoruz.)

En kolay yolu olan browser ile bir test yapmak istiyorum bunun için şu  kodu config dosyasının olduğu dizinde cmd de çalıştırıyoruz. Bu sayede browser platformunu eklemiş olucağız.

$ MyApp cordova platform add browser

Daha sonra bu komut ile browser da görüntüleyebilirsiniz.

$ cordova run browser

Aşadaki gibi bir sayfa ile karşılaşacaksınız. Böylece ilk cordova uygulamamızı çalıştırmış olduk. Aslında bu makale Ionic framework serisine giriş amaçlıydı ilerideki makaleler de ionic framework'ü derinlemesine incelemeyi planlıyorum. Bu makele hakkındaki görüşlerinizi veya sormak istediğiniz soruları yorum kısmından iletirseniz sevinirim.




7 Haziran 2015 Pazar

İsimlendirme Standartları ve C# Kodlama Standartları

Aslında bu makaleyi yazmak geçen gün yaşadığım bir olaydan dolaylı ortaya çıktı bir arkadaşım bilgisayarında projesine bakıyorduk ve benim gözüme çarpan ilk şey entitylerin propertieslerine verdiği isimlendirmeler oldu şuan tam hatırlamıyorum ama şu örnekteki gibiydi...

public class Musteri
{
public int MusteriId {get; set;}
public string FULLNAME {get; set;}
public string İşAdresi {get; set;}
public string Ev_Adresi{get; set;}
}


Şeklinde bir şeydi aslında bu şekilde bir sorun yok gibi gözükse de isimlendirme standartlarına göre bir çok terslik söz konusudur.

İlk olarak Türkçe karakter  sorununu ele alalım.

Normalde sıkıntı yok Türkçe karakter kullanabilirsiniz ama şu sorun şurada çıkıyor programı Türkçe karakter desteği olmayan bir bilgisayarda açmaya çalıştığınızda hata alacaksınız. Diğer bir problem ise büyük bir şirkette çalışıyorsunuz bir framework geliştirdiniz adıda Şampuan olsun  ve amerikadaki iş ortaklığı yaptığınız şirkete gönderdiniz de adamlarda Ş harfi yok frameworkü nasıl çağırıp kullanacak ?:D
Ayrıca yazdığınız kod ya tamamen türkçe yada tamemen ingilizce olsun. Türkçe olacaksa bile yinede Türkçe harf kullanmamaya özen gösterin. Bunun tercihi tamamen size kalmış bir şey ama tavsiyem ingilizce kullanmanız çünkü kelimeleri unutmamamıza yardımcı oluyor.
Aman benim yazdığım kod amerikaya gidene kadar çok zaman var diyebilirsiniz ama başta kendinizi nasıl alıştırırsanız öyle gider.

Bu kadar hikaye yeter peki bu iş nasıl olmalı bunun bir standardı yok mu? Tabii ki de var bu standartları ele alıp  inceleyelim ve hangisini nerelerde kullanabiliriz bunlara bakalım. Bu makalede beş adet isimlendirme standardını inceleyip C# dilinde nerelerde kullanabileceğimize göz atacağız.

* Pascal Standardı
Bu standarda göre oluşturulan değişken isimlerinde her kelimenin baş harfleri büyük yazılır.

Örnek
 KullaniciAdi
OgrenciOkulNumarasi
EvAdresi

* Camel Standardı
Bu standarda göre de oluşturulan değişkenlerin ilk kelimesi küçük harf diğer kelimeler baş harfi büyük harf olacak şekilde yazılır.

Örnek
kullaniciAdi
ogrenciOkulNumarasi
evAdresi

* Hungarian Standardı,
Pascal standardı kullanılır tek farklı kullanılan tipin anlaşılırlığını sağlamak adına değişkenin başında o tipin ön takısı koyulur.

Örnek
Tip          Takısı          İsimlendirme Örneği
bool           b                     bKullaniciDurumu
char           chr                  chrBasHarf
double       d                     dAlinanUcret
float           f                     fMaasOrtalamasi
int              i                      iYas
long           l                      lDunyaninCevresi
string         str                   strAdi

Not: Bu standardı C# dilinde ben hiç karşılaşmadım ama böyle bir isimlendirme standardı da var.

* UnderScore Standardı
Pascal standardına benzer tek farkı kelimelerin arasına alt tire koyularak yazılır.

Örnek
Kullanici_Adi
Ad_Soyad
Kitap_Okur_Sayisi

* UpperScore Standardı
Bu standart ise pascal ile underscore standardının birleşimine benzer ek olarak her harf büyük harf ile yazılır.

Örnek
KULLANICI_ADİ
PERSONEL_MAAS
OGRENCİ_NUMARASİ

Nerede Hangisini Seçeceğiz?
İnternet de diğer makalelere bakacak olursanız genelde hangisi hoşunuza gidiyorsa onu kullanın gibi kelimeler kullanılır ama bana göre o şekilde değildir. Siz bir dil üzeriden ilerliyorsunuz ve her dilin kendi yapısında bir isimlendirme standardı mevcuttur sınıf, methot, enum isimleri belirli bir standarda dayalıdır. Onlara bakarak sizde o şekilde kullanmanız daha doğrudur. tabi kendinizde bir standart oluşturup ona göre ilerleyebilirsiniz ama o dilin standardına göre gitmek daha mantıklı geliyor...

C# Kodlama ve İsimlendirme Standartları
Buradaki isimlendirme standartlarının genel özelliği okunaklı olmasıdır ayrıca Microsoft'un .NET framework'ü bu isimlendirme standardına göre geliştirmiş olması nedeni ile bu şekilde kullanılıyor.
Bu bölümdeki anlattıklarımı .net içerisindeki kütüphanelerin kodlarına bakarak daha fazla örneğe erişebilirsiniz. Bunu da visual studio içerisinde incelemek istediğiniz sınıfın adını yazıp F12 tuşuna basarak yapabilirsiniz.

* Sınıf ve method isimlendirilmesi
Sınıf ve methot isimlendirmeleri için pascal standardını kullanıyoruz. Ayrıca isim verirken tam ad veya tamlama şeklinde kullanın ve tam olarak o sınıfın veya methot' ne iş yaptığını özetlesin Örneğin : Personel veya PersonelPozisyonu veya MusteriBilgisi gibi...

Örnek
public class MusteriBilgisi
{
public void EvAdresi()
{

//...

}
public void IsYeriAdresi()
{

//...

}
}

* Methot parametreleri ve yerel değişkenler
Bu ikisi için ise camel standardına göre isimlendirme yapmamız gerekiyor.

Örnek
public class NotSupportedException
{
public void NotSupportedException(string message, Exception innerException)
{
int exceptionCount = innerException.Exception.Count;

// ...
}
}
* Sınıf İçindeki Değişkenlerinin İsimlendirilmesi
Buradaki isimlendirme standardımız da camel standardıdır. genel olarak sınıf adının ilk harfi küçük diğerlerinin baş harfi büyüktür ancak istisnai durumlar söz konusudur. bunlardan biri sınıf içerisindeki private değişkenler alt tire kullanarak isimlendirilir. public değişkenler ise camel standardına göre isimlendirilir

Örnek

// public değişkenler
public Stream stream;
public HttpStyleUriParser httpStyleUriParser;

// private değişkenler
private CancellationToken _cancellationToken;
private TextWriter _textWriter;

* Değişken Tiplerin İsimlendirilmesi
int, string, byte, long vb. tiplerinin isimlendirilmesi sizin belirlediğiniz isimlere göre olmalı ve camel standardına göre yazılmalı.

Örnek
int benimYasim;
string adSoyad;
bool isKayitDurumu;

* Arayüz İsimlendirmesi
Arayüzlerin isimlendirmesi standart olarak Interface'in I harfi ile başlar. ve pascal standardı kullanılır.

Örnek
public interface IDisposable
{
}
public interface IFormatProvider
{
}
public interface IEquatable
{
}

* Enum isimlendirmeleri
Enum isimlerdirmelerinde pascal standardı kullanılır. Buna ek olarak genellikle tekil isimlendirmeler yapılır ama istisnai durumları söz konusudur.

Örnek
public enum Renk
{
Sari,
Kirmizi,
Mavi,
Yesil,
Gri,
Turuncu
}

// istisna durumunda fark ederseniz çoğul isimle bitmiş -ler eki almıştır.
public enum ResimTipleri
{
KullaniciFotografi = 0,
YarismaciFotografi = 1,
KapakFotografi = 2
}

* Sınıf İçerisindeki Properties, Değişken, Methot Sıralaması
Başlık da tam olarak anlatamadım ama demek istediğim yapıcı methot, değişkenler, properties, methotların sınıf içerisinde hangi öncelik ile yazılması gerektiğine genel olarak bakalım.

Örnek
public class OrnekSınıfımız
{
// Sınıfın en üst kısmında Yapıcı Methot(Constructor) bulunur..
public OrnekSınıfımız()
{
// ...
}
//Yapıcı methotun altında ise sabit(const) değişkenler bulunur..
public const string sehir="Sakarya";

// Static değişkenlerin altında static değişkenler bulunur..
public static string Stream;
public static decimal Reserves;

// Static değişkenlerin altında public ve private değişkenler gelir..
public decimal uydurmaDegiskenAdi;
private string adSoyad;


// Yerel değişkenlerin altında propertiesler gelir..
public string X{get; set;}
public int Y {get; set;}
public DateTime KapanisTarihi{get; set;}

// Daha sonra methotlar geliyor ancak burada methotun void, static, virtual, abstract vb. olmasının bir önemi yoktur. Daha çok methotların birbiri arasındaki ilişkiye göre sıralanır..
public int EveUzaklık()
{
// ...
}
public override void Ekle()
{
// ...
}
public virtualMusteriAdresi(int musteriId)
{
// ...
}
}

Sonuç
Sonuç olarak bu makalemizde isimlendirme standartlarını ve C# dilinin kodlama standartlarını incelemeye çalıştık. Genel olarak bütün tiplerin isimlendirilmesini vermeye çalıştım fakat gözden kaçırdıklarım varsa yorum olarak sorabilirsiniz.

Bu standartlara dikkat ederek daha temiz kodlamalar yazmak konusuna giriş yapmış oluruz. Tabii ki bir tek bununla yeterli değildir tasarım desenleri(dizayn patterns) gibi birçok konuya da hakim olmak gerekir. Unutmayın herkes kod yazabilir sizin onlardan farkınız olsun.


C# isimlendirme standartları için yararlandığım kaynak :