28 Şubat 2019 Perşembe

C# DERS-3

Tip Dönüşümleri

C# tip korumalı bir dildir. Bu yüzden bazı işlemler yapabilmek için tip dönüşümü yapmamız gerekir. Başlangıç olarak toolbox'dan 2 tane textbox, 1 tane button, 2 tane label alarak form ekranına yerleştiriyoruz ve hemen isimlerini belirliyoruz.

  • textbox1 = txtSayi1 
  • textbox2 = txtSayi2 
  • button1 = btnTopla 
  • label1 = lblToplamaSonucu 
  • label2 = lblBirlesimSonucu 
  1. Button seçiliyken,
  2. Bu şimsek sembolüne tıklıyoruz ve o component ile yapılabilecek eventleri(olayları) görüntülüyoruz.
  3. Click eventi hazır kod bloğunu oluşturmak için çift tıklıyoruz.
Bütün bileşenler için mevcut olan eventleri bu şekilde görebilirsiniz.Her bileşenin bir default(varsayılan) eventi vardır. Tasarım ekranında bileşen üzerinde çift tıklarsanız default event için hazır kod blokları oluşacaktır. Button için click event, form için load event default olarak belirlenmiştir.

Not: Kod yazılı olan ekran görüntüleri satır numaraları ile açıklanacaktır.Ders ilerledikçe, yazılan kodda güncellemeler olacağından satır sayıları değişebilir.

  • Satır 20: Yorum satırı kullanımı.Yazılım mühendisleri genellikle ekip halinde çalışır. Bunun farklı sebepleri olabilir; tek kişinin altından kalkamayacağı büyüklükte bir proje olabilir, farklı uzmanlık alanlarından mühendislere ihtiyaç olabilir, projeyi daha kısa zamanda bitirmek için daha fazla mühendisle çalışılıyor ... vb olabilir. Bu tür durumlarda yazdığınız kodu inceleyen diğer mühendislerin, yazdığınız kodu daha hızlı anlaması veya yanlış anlamaması için yorum satırı yazılır. Proje üzerinde sadece siz çalışıyor olsanız dahi yorum satırına ihtiyaç duyacaksınızdır. Örneğin, daha önce çalıştığınız bir projede güncelleme yapacaksınız, ama aradan biraz zaman geçtiği için kodlarınızı hatırlamanız zor olacaktır. Yazdığınız yorum satırları sizin için kurtarıcı olacaktır. Yorum satırı için bu kadar uzun açıklama yapmamı garip bulabilirsiniz, ama gerçekten önem verilmesi gereken bir konu. Kod yazma prensiplerinde dahi yorum satırının büyük önemi vardır. Eğer bir projede yorum satırı yoksa kalitesi düşük bir projedir. Şimdi bunları anlatıyorum diye her yeri de yorum satırı doldurmamak lazım :) Çünkü diğer bir görüş ise şöyle:"eğer siz kodlarınızın nasıl çalıştığını anlatabilmek için çok fazla yorum satırına ihtiyaç duyuyorsanız, sizin yazdığınız kodun karmaşıklık düzeyi istenilenden fazla, kodlarınızı yenilemeniz gerekir." Neyse daha fazla uzatmadan dersimize devam edelim bu konulara "SOLID Tasarım Prensipleri" derslerinde değineceğiz.
  • Satır 21: double tipinde globalDegisken adında global bir değişken oluşturuyoruz.Bu derste global değişken kullanmayacağız, oluşturup kullanmadığımız kodların altının yeşil çizili bir şekilde gösterildiğini kendi IDE 'nizde görebilirsiniz.Alınan ekran görüntülerinde bu çizgiler görünmemektedir.
  • Satır 24: Tasarım ekranında butona çift tıkladığımızda oluşan click event kodları.
  • Satır 25-40: Bu süslü parantezler arasına yazılan kodlar butona her tıklandığında çalışacak kodlardır.
  • Satır 26: int tipinde sonucHesapla1 adında yerel bir değişken oluşturuyoruz.
  • Satır 27: string tipinde sonucHesapla2 adında yerel bir değişken oluşturuyoruz.
  • Satır 29: Eğer tek satır yorum yazacaksak " // " dan sonra yazabiliriz.
  • Satır 30: txtSayi1 ve txtSayi2 nin textlerini birleştir ve sonucHesapla2 ye ata. Bir önceki dersimizde = ve + operatörlerini anlatmıştık.
  • Satır 32-33: Eğer tek satırdan fazla yorum yazacaksak " /* */ " arasına istediğimiz kadar yorum yazabiliriz.
  • Satır 34: txtSayi1 ve txtSayi2 nin textini al, Int32 ye dönüştür ve toplayıp sonucHesapla1 'e ata. Int32 int , Int16 short , Int64 long anlamına gelmektedir. Hangi tipe dönüşüm yapılacaksa o seçilmelidir.
  • Satır 36: lblBirlesimSonucu adlı label ın textini "Birleşim Sonucu: 16" şeklinde set et(kullanıcının textboxlara 1 ve 6 girdiğini varsayıyoruz).
  • Satır 38: lblToplamaSounucu adlı label ın textini "Toplama Sonucu : 7" şeklinde set et.Satır 36 'da neden ToString() kullanmadık da bu satırda kullanıyoruz? Çünkü, sonucHesapla2 zaten string tipinde bir veri ve label ın text özelliği iki 2 string birleşiminden oluşabilir, ama sonucHesapla1 int tipinde bir veri olduğundan ve text özelliği string veri tipiyle çalıştığından .ToString() kullanarak tip dönüşümü yapıyoruz.
  • F5 kısayolunu kullanarak kodlarımızı derleyebilir ve hata olup olmadığına bakabiliriz.

Beklenen Output(Çıktı)
Beklenen çıktıyı görüntülediğinizle yeni bileşenler ekleyerek devam edebiliriz.
  1. Yeni bir label eklediğinizde ekranda hiç label1 olmadığı için yine label1 adıyla ekleyecektir. Bir diğer tip dönüşümünü öğretmek ve sonucu görüntülemek için ekliyoruz. Adını "lblParseIle" yapıyoruz.
  2. Toolbox tan aldığımız DateTimePicker. Tarih seçmemize olanak sağlar. Adı "dtpTarihAl"
  3. Tarih seçimi yapıldıktan sonra bu butona tıklayıp yaş hesabı yaptıracağız. Adı "btnYasHesapla"
  4. Hesaplama yapıldıktan sonra sonucun yazılacağı label. Adı "lblYasGoruntule"


  • Satır 40: Daha önce belirttiğim gibi yazılan kodda güncelleme yaptıkça kod satırları değişiyor.  bool tipinde kontrol1 ve kontrol2 adında 2 tane değişken oluşturuyoruz.
  • Satır 41: int tipinde cikti1 ve cikti2 adında 2 tane değişken oluşturuyoruz.
  • Satır 43: Kullanıcının girdiği txtSayi1 ve txtSayi2 yi int tipine parse et, topladıktan sonra "Parse İle Sonuç: " string i ile birleştir ve bu birleşimi lblParseIle nin text ine set et.(Bu satırı,  önce dönüşümleri yapıp, toplama işlemini yapıp sonrasında label a yazdırmak şeklinde parçalara bölerek de yazabilirsiniz.Alt satırlarda örneği gösterildi.Hangisi daha basit geliyorsa onu kullanabilirsiniz.)
  • Satır 45: Eminim bazılarınız acaba sayı yerine harf yada özel karakter girsem ne olur diye düşünmüş ve denemişsinizdir.Emin olun, bilinçli yada bilinçsiz, bunu sizin yaptığınız programları kullanan kişilerde yapacaktır.Bu yüzden bu ve benzeri durumlara önlem almak bizlerin sorumluluğu.Bu satırda gördüğünüz "TryParse" metodu bool tipinde bir veri döndürecektir.(Yani 0(false) yada 1(true)). Bu veriyi yine bool tipinde daha önce oluşturduğumuz kontrol1 adlı değişkenimizde tutuyoruz.Eğer dönen veri 1 ise parse işlemini tamamlayıp veriyi out yanına yazdığımız değişkene atar. Parse etmek istediğimiz veri tipi ve out yanına yazdığımız değişkenin veri tipinin aynı olmasına dikkat edelim.
  • Satır 46: txtSayi2 nin textini int tipine parse etmeyi dene, TryParse den dönen veri 1 ise sayıyı cikti2 ye ata kontrol2 nin değerini 1 olarak set et, dönen veri 0 ise yani kullanıcının txtSayi2 ye girdiği veri int tipine parse edilemiyorsa, kontrol2 nin değerini 0 olarak set et.
  • Satır 49: if kullanımı. Neredeyse bütün kaynaklarda if kullanımı ayrı bir konu başlığıdır.Kısaca açıklayacak olursak if, yanındaki parantez içindeki şartlar sağlanıyorsa kendi süslü parantezleri arasındaki(Bu resim için 50-59) kodları çalıştırır, şartlar sağlanmıyorsa kodlar çalıştırılmadan geçilir.Süslü parantez olmadan kullanıldığını da görebilirsiniz.Parantezsiz halini ilerleyen derslerde kullanacağız.Kişisel tavsiyem visual studio da if yazdığınızda 2 defa TAB tuşuna basıp otomatik tamamlamayı kullanmanız. Bizim şartımız kontrol1 ve kontrol2 nin 1 olması durumu. Yani kullanıcının girdiği verilerin int tipine parse edilebilmesi.
  • Satır 51: short tipinde toplam adında bir değişken oluşturuyoruz.
  • Satır 52: cikti1 i short tipine dönüştür ve toplam değişkenine ata.
  • Satır 55: "+=" operatörü kullanımı. cikti1 in 1'e , cikti2 nin 6 ya eşit olduğunu varsayarsak, Satır 52 de toplam 1 olmuştu. Satır 55 de toplam değişkeninin değerini yeniden toplam+cikti2 yani 1+6 şeklinde yeniden set ediyoruz.
  • Satır 58: Bu kod satırı lblParseIle.Text = "Parse ile Sonuç: " + toplam.ToString(); ile aynı işlemi yapmaktadır. Visual Studio da C# versiyon 6 veya daha yüksek versiyon yüklü ise bu kod satırı çalışır. 
Bu yazdığımız kodları çok daha çeşitli ve farklı yollarda yazarak aynı sonucu alabiliriz.Birisinin yazdığı kodları incelerken kişisel gelişiminiz için kendinize her zaman şu soruyu sorun: "Bunu başka hangi yolla yapabilirim, daha kısa ve hızlı hale getirebilir miyim?".Her zaman istenilen/ideal olan yazdığımız kodların yüksek performans göstermesidir.
  • Satır 68: string tipinde yas adında bir değişken oluşturuyoruz.
  • Satır 69: Butona tıklandığında DateTime.Now.Year ile sistemin şimdi(now) zamanının sadece year(yıl) kısmını alıyoruz. dtpTarihAl adını verdiğimiz picker dan kullanıcının seçtiği tarihi text olarak alıp Convert.ToDateTime() ile tarih tipine çevirip yine .Year ile sadece yıl kısmını alıyoruz ve aldığımız iki yıl verisini birbirinden çıkartıp yaş hesaplamasını tamamlıyoruz. yas string bir veri olduğu için ToString() metodu ile dönüşüm yapıyoruz.
  • Satır 70: lblYasGoruntule adını verdiğimiz label ın text ini "Yaşınız: 24" şeklinde set et(Kullanıcının 24 yaşında olduğu varsayıldı.)
Son olarak biraz estetik...Programımız çalıştığında işlemler yapıp sonuçlar görüntülenene kadar label lar çok çirkin görünüyor. Bizde form un yüklenme(load) eventine (bir bileşen için nasıl event kod bloğu oluşturulacağını biliyorsunuz) bazı kodlar yazıp biraz olsun güzelleştiriyoruz.


Genelde IDE 'ler kodları yukarıdan aşağıya doğru derler ama bazı olaylarında -aynı 4 işlemdeki gibi- işlem önceliği vardır.Bu kodların Satır 73-81 arasında olması önemli değildir.Adından da anlaşıldığı üzere form yüklenirken çalışacak kodlardır.Bu kodları yazmadan bileşenlerin Properties kısımlarından da  text özellikleri ayarlanabilirdi. Örnek olması ve load olayının anlatımı için bu şekilde yaptık.Properties kısmındaki bütün attribute ler kod sayfasında da set edilebilir.

Edit: Parse kodları sadece string ten dönüşüm yapar. Convert ile uygun olan her türü birbirine dönüştürebilirsiniz.

İYİ ÇALIŞMALAR


2 yorum:

Son Eklenen

C# Ders-5

Döngüler(Loops) Döngüler, bir işlemin defalarca tekrarlanması gerekiyorsa, aynı kodu tekrar tekrar yazmaktan kurtulmamızı sağlar. Gerçekl...

Popüler Yayınlar