C# ile Uygulama Geliştirirken Yorum Satırlarını Kullanmak yazımda başladığım konuya XML Dokümantasyonunu eklemem gerekir.
Geleneksel C-tarzı yorum satırlarına ilave olarak C# geliştirilen kodların Xml Dokümantasyonunu otomatik olarak çıkartabilmek için, güçlü yorum operatörlerine sahiptir.
Bu yorum operatörleri (///) ile başlayan satırlara yazılır.
Aşağıdaki listedeki operatörler, derleyici (compiler) tarafından tanınır ve desteklenir;
<c> Tek satırı C# kodu olarak işaretler. Örneğin: <c>string AdSoyad = “Engin Polat”;</c> <code> Birden çok satırı C# kodu olarak işaretler. <example> İlgili satırları “örnek kod” olarak işaretler. <exception> Exception sınıfını dokümante eder. (Derleyici(compiler) tarafından kontrol edilir) <include> Başka bir dokümantasyon dosyasından yorum ekler. (Derleyici(compiler) tarafından kontrol edilir) <list> Dokümantasyona liste ekler. <param> Method parametresini dokümante eder. (Derleyici(compiler) tarafından kontrol edilir) <paramref> Kelimenin parametre olduğunu işaretler. (Derleyici(compiler) tarafından kontrol edilir) <permission> Öğeye erişim belirleyicisini dokümante eder. (Derleyici(compiler) tarafından kontrol edilir) <remarks> Öğeye açıklama ekler. <returns> Method’un dönüş tipini dokümante eder. <see> Başka bir parametreye çapraz-referans ekler. (Derleyici(compiler) tarafından kontrol edilir) <seealso> Açıklamaya “buna da bakın” parçası ekler. (Derleyici(compiler) tarafından kontrol edilir) <summary> Öğenin kısa açıklamasını dokümante eder. <value> Özelliği (property) tanımlar.
Örnek olması açısından, aşağıdaki Matematik sınıfını dokümantasyonu ile birlikte yazıyorum;
//Matematik.cs namespace Engin.Polat { ///<summary> /// Engin.Polat.Matematik sınıfı. /// İki rakamın toplanmasına yaran /// Topla method’unu içerir. ///</summary> public class Matematik { ///<summary> /// İki rakamın toplanmasını sağlar. ///</summary> ///<example>Örnek olarak: Topla(3, 5);</example> ///<returns>Toplama işleminin sonucu (int)</returns> ///<param name=”x”>Toplama işleminin ilk rakamı</param> ///<param name=”y”>Toplama işleminin ikinci rakamı</param> public int Topla(int x, int y) { return x + y; } } }</pre>
Derleme sonucu oluşan Xml dokümanı aşağıdaki gibidir;
<?xml version="1.0"?> <doc> <assembly> <name>ConsoleApplication4</name> </assembly> <members> <member name="T:Engin.Polat.Matematik"> <summary> Engin.Polat.Matematik sınıfı. İki rakamın toplanmasına yaran Topla method'unu içerir. </summary> </member> <member name="M:Engin.Polat.Matematik.Topla(System.Int32,System.Int32)"> <summary> İki rakamın toplanmasını sağlar. </summary> <example>Örnek olarak: Topla(3, 5);</example> <returns>Toplama işleminin sonucu (int)</returns> <param name="z">Toplama işleminin ilk rakamı</param> <param name="y">Toplama işleminin ikinci rakamı</param> </member> </members> </doc> Dikkat ederseniz, derleyici (compiler) bizim için ve elementlerini eklemiştir. Her element'i name özelliğine sahiptir ve değer olarak öğenin tam adını içerir. Değerin ilk harfi özel bir anlam taşır; **T :** *Type* **F :** *Field* **M :** *Member*
Geliştirdiğiniz bir Windows Forms uygulamasında aşağıdaki depolar.xml dosyasına sahipsiniz;
<? xml version=”1.0” encoding=”utf-8” ?> <Depolar> <Depo Adi=”DP001” Sehir=”İstanbul”></Depo> <Depo Adi=”DP002” Sehir=”Ankara”></Depo> <Depo Adi=”DP003” Sehir=”Adapazarı”></Depo> <Depo Adi=”DP004” Sehir=”Elazığ”></Depo> <Depo Adi=”DP005” Sehir=”İzmir”></Depo> </Depolar>
Bu Xml dosyasındaki depo isimlerini bir combobox‘a doldurmanız gerekmekte.
Sizce hangi yol tercih edilmeli?
Sorunun doğru cevabı için; Doğru cevap, Xml dosyasının şeması ile aynı serilize olabilen bir class geliştirilmeli. Geliştirilen class XmlSerializer class’ı ile birlikte kullanılmalı olmalı.
.Net Framework serilizasyonu, Xml verisini aynı şemaya sahip class’a doldurmak için en kullanışlı yöntemdir.
XmlDataDocument class’ı Xml verisini class içerisine deserilize etmek için yöntemlere sahip değildir.
ApplicationSettingBase ve ConfigurationSection class’ları bu problem ile alakasızdır.
Bu yazımda aslında çok kolay bir konuyu işliyor olacağım, C# kodunuza yorum satır(lar)ı eklemek.
Bu konuyu yazmamdaki asıl amacım, BilgeAdam‘daki öğrencilerim için hatırlatma niteliğinde olmasıdır.
C# geleneksel C-tarzı yorum satır(lar)ını destekler; (// …) veya (/* … */)
// Bu satır örnek olarak yorum haline getirilmiştir. / Bu satır örnek olarak yorum haline getirilmiştir. /
Tek satır yorum operatörünün (//) satırda buluduğu noktadan satırın sonuna kadar herşey yorum olarak kabul edilir.
Çok satır yorum operastöründe (/* /**), *başlangıç operatöründen (/) *bitiş operatörüne (*/) kadar herşey **yorum olarak kabul edilir.
Tek satırlı ve çok satırlı yorumlar şu şekilde yazılabilir;
// Tek satırlı yorum / Bu satırlar çok satırlı yorum için iyi bir örnektir. /
Aşağıdaki kod’da geçerlidir;
Console.WriteLine(/* İşte yorum! */ “Kodun burası derlenir.”);
Aynı zamanda aşağıdaki gibi kodlar sayesinde, satır içerisinde kod parçalarına yorum yazabilmek mümkündür;
EkranaCiz(Boy, /* Yukseklik */ 250);
Tabiki string karakterleri arasındaki yorum operatörleri, normal karakter olarak değerlendirilecektir;
string mesaj = “/ Bu normal bir metin değişkenidir /”;
Kod yazma yeteneklerimizi ölçebileceğimiz sitelerden Codility‘de test olarak yapabileceğiniz bir soru bulunuyor. Aşağıdaki görselde soruyu görebilirsiniz.
Benim çözümüm devam eden sayfada. Sizde çözümünüzü yazın bakalım.
int equi ( int[] A ) { Int64 ilkYari; Int64 sonYari; for (int iLoop = 0; iLoop < A.Length; iLoop++) { ilkYari = 0; sonYari = 0; for (int yLoop = 0; yLoop <= iLoop; yLoop++) ilkYari += A[yLoop]; for (int zLoop = iLoop; zLoop < A.Length; zLoop++) sonYari += A[zLoop]; if (ilkYari == sonYari) return iLoop; } return -1; }
İstatistikler, verinin veritabanı nesnelerinde (tablo, index, vs) nasıl dağıldığı bilgisini içerdiği için, veritabanında en önemli nesnelerden biridir.
Veritabanı Yöneticilerinin (Database Administrators) eskimiş istatistiklerden şikayetlerini çok duydum. Yapılması gereken istatistikleri güncellemektir.
Eğer bir tablodaki indexlere ait istatistiklerin son güncelleme zamanını öğrenmek istiyorsanız, aşağıdaki sql sorgusunu çalıştırabilirsiniz;
SELECT NAME AS INDEX_ADI, STATS_DATE(OBJECT_ID, INDEX_ID) AS SON_GUNCELLEME FROM SYS.INDEXES WHERE OBJECT_ID = OBJECT_ID(‘HumanResources.Department’)</pre> Eğer tüm indexler için aynı bilgiyi almak istiyorsanız, WHERE filtresini kaldırmanız yeterli.
Benim test bilgisayarımda aldığım sonuç;
*PK_Department_DepartmenID* **2010-01-20 15:30:17:200** *AK_Department_Name* **2010-01-20 15:30:26:053**
Eğer istatistiklerinizin zamanı geçmiş olduğunu düşünüyorsanız ve güncellemek istiyorsanız, aşağıdaki sql komutunu çalıştırabilirsiniz;
UPDATE STATISTICS HumanResources.Department
Bu komutu çalıştırdığınızda ilgili tablonun istatistik verilerinin güncellendiğini göreceksiniz. Eğer komutu WITH FULLSCAN komutu ile birlikte çalıştırırsanız, tablodaki tüm kayıtlar baştan taranacak ve istatistik baştan oluşturulacaktır.
UPDATE STATISTICS HumanResources.Department WITH FULLSCAN ***Dikkat :** İstatistikleri güncellemek için yukarıdaki komutları, sadece istatistiklerinizin gerçekten eskimiş olduğuna inandığınızda, sorgularınız için oluşturulan query plan'ların hatalı olduğunu gördüğünüzde ve sql server'ın yoğun olmadığı zamanlarda çalıştırmanızı tavsiye ederim.* Kendi test bilgisayarımda, istatistik güncelleme komutunu çalıştırdıktan sonra, aşağıdaki sonuçları elde ettim; `*PK_Department_DepartmenID* **2010-01-30 21:10:06:560** *AK_Department_Name* **2010-01-30 21:10:06:594**` Gördüğünüz gibi, ilgili tablodaki indexlerin istatistikleri güncellendi.
Senior Software Engineer, @Microsoft
Ada ve Ege'nin babası ;)
Makale Adedi: 484