8 Mart 2019 Cuma

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çekleştirmek istediğiniz algoritmaya göre işlemin kaç defa tekrarlayacağını belirleyebiliriz. Yaptıkları iş aynı olsa da kullanım şekillerine göre farklılaşan 3 döngü vardır("for" , "while" , "do-while").

"for" Döngü Örneği

İsimleri: "label1" "txtSayi1" "btnHesapla"
Senaryomuz ekran görüntüsünden de anlaşıldığı üzere girilen sayının faktoriyel hesabını yapıp sonucu mesaj kutusu içerisinde gösteren program yazmak.

5 Mart 2019 Salı

C# Ders-4

Şart/Kontrol Deyimleri

Bir önceki derste basit bir şekilde if kullanımını görmüştük. Bu dersimizde if kullanımına farklı bir örnek verip, diğer şart/koşul ifadelerinin anlatımına geçeceğiz. Dersimizin senaryosu şu şekilde: "Her seferinde 1 öğrencinin olmak şartıyla girilen notlara göre ağırlıklı not ortalamasını hesaplayan, sonuca göre geçip geçmediğini ve harf notunu mesaj kutusuyla ekrana yazdıran bir program yazınız. Öğrencinin 1 ara sınav, 1 final sınavı ve 1 quizi olmak üzere toplam 3 sınavı vardır. Not ağırlıkları ara sınav için %30 , final sınavı için %50 , quiz için %20 şeklindedir". Bileşenlerimiz 4 tane label, 3 tane textbox, 1 tane button. İsimlendirmeleri,

label1 = lblMesaj , text = " Öğrenci Notlarını Giriniz"
label2 = lblSinav1 , text = "Sınav 1:"
label3 = lblSinav2 , text = "Sınav 2:"
label4 = lblSinav3 , text = "Sınav 3:"
textbox1 = txtSinav1
textbox2 = txtSinav2
textbox3 = txtSinav3
button1 = btnhesapla , text = "Hesapla"

Components

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.

25 Şubat 2019 Pazartesi

C# DERS-2

Variables(Değişkenler)

Kullandığımız bütün programlar RAM(Bellek) üzerinde çalışmaktadır. Program içerisindeki kullanılan veriler genelde bellek üzerinde bir değişken ile geçici olarak saklanır. Veri kalıcı hale getirilmek istenirse bir veri tabanına kaydedilir.Veri tiplerinin bazı örnekleri aşağıda verilmiştir.

 Değişken tipi Değişken adı = Değişken değeri şeklinde değişken oluşturabiliriz

Sayısal Veri Tipleri(Tam Sayılar)
  • byte : Bellekte kapladığı boyut = 1 byte, Min/Max aralığı = 0 / 255
  • sbyte : Boyut = 1 byte, Min/Max aralığı = -128  / 127
  • short : Boyut = 2 byte, Min/Max aralığı = -32.768 / 32.767
  • ushort : Boyut = 2 byte, Min/Max aralığı = 0 / 65.535
  • int : Boyut = 4 byte, Min/Max aralığı = -2.147.483.648 / 2.147.483.647
  • uint : Boyut = 4 byte, Min/Max aralığı = 0 / 4.294.967.295
  • long : Boyut = 8 byte, Min/Max aralığı = -9.223.372.036.854.775.808 / 9.223.372.036.854.775.807
  • ulong : Boyut = 8 byte, Min/Max aralığı = 0 / 18.446.744.073.709.551.615
Bu bilgiler örnek olması açısından verilmiştir.Sınır değer testleri, normalizasyon, vb testler yapmayanlar için genelde bu bilgiler pek önem arz etmez. Bu kısımdan sonra adı geçen veri tipleri için de bu bilgilere ihtiyaç duyanlar pek çok kaynaktan yararlanabilirler.Araştırmanıza rağmen bu bilgilere ulaşamadıysanız veya başka sorunuz varsa mail gönderebilirsiniz.

Sayısal Ondalık Veri Tipleri(Kesirli/Virgüllü Sayılar)
Bu veri tipleri: float, double ve decimal olmak üzere 3 adettir.

Mantıksal Veri Tipi
Tek bir tane mantıksal veri tipi bulunmakta olup "bool" olarak adlandırılmaktadır. Sadece true(doğru) yada false(yanlış) değerlerini alabilmektedir.

Tarihsel Veri Tipi
Tarihsel işlemlerde kullandığımız bu veri tipinin adı "DateTime" dır. 01.01.0001 / 31.12.9999 aralığında değerler alabilir.

 Sayısal Olmayan Veri Tipleri(Metinsel)
Genellikle harflerden oluşan/metinsel verileri kullanabilmek için oluşturulan değişkenlerdir. Eğer veri tek bir karakterden oluşuyorsa "char" , tek bir karakter veya daha fazla karakterden oluşuyorsa "string" olarak adlandırılan değişkenleri kullanabiliriz.

Şimdi değişkenlerle ilgili yazım örnekleri vererek devam edebiliriz.

byte sayi1=251;
int sayi2 = 20984;
int sayi3 = 56987 , sayi4 = 302 ;
float sayi5 = 54,6 ;
double sayi6 = 96,45 , sayi7 = 0,71 ;
decimal sayi8 = 986,41 ;
char harf1 = 'a' , harf2 = 'A' , harf3 = 'a' ;
string metin1 = "Merhaba Dünya" ;
string metin2 =" ";
string metin3 ;
metin3 = "Degerini Sonra da Belirleyebiliriz." ;
bool kontrol = false ;

Değişken Adlandırma Kuralları
  • C# büyük/küçük harf duyarlıdır. Değişken adı tanımlanırken ad ve Ad farklıdır.
  • Değişken adındaki ilk karakter mutlaka harf olmalıdır. 2.isim yerine isim2 olamalıdır.
  • C# da kullanılan anahtar kelimeler değişken adı olamaz. (int, float, double , bool, vb.)
  • Değişken adında boşluk olamaz.
  • Özel karakter içeremez. (+ , - , / , * , ? , vb.)
  • Türkçe harfler içeremez. (ç,s,ı,İ,ö,ü,ğ)
  • Değişken adı 255 karakterden kısa olmalıdır.

9 Şubat 2019 Cumartesi

C# DERS-1

C# Nedir?

Adı C ve C++ dilinden gelir. C dilinde bir sayı değişkenin değerini 1 artırmak için “++” operatörü kullanılır. Bu yüzden C dilinden sonra geliştirilen ve Nesne Yönelimli özellikleri taşıyan yeni dil için, C 'nin bir fazlası anlamında C++ adı kullanılmıştır. C++'tan sonra geliştirilen C# dili ise adını; ((C++)++) ifadesinde artı işaretlerinin bir araya gelmesinden alır. Bu dili tasarlayan Anders Hejlsberg ve ekibi yaygın ve beğenilen bir dil olan Java 'nın söz dizimini temel almıştır.

C# dili derleyen bir kaç IDE (Integreted Development Enviroment/Tümleşik Geliştirme Ortamı) olsa da(Örnek IDE 'ler: SharpDevelop, Emacs, Notepad++, ...) en çok kullanılanı, benimde tavsiyem "Visual Studio Community" versiyonu olacaktır.Visual Studio kurulumunda kişiye özgü özelleştirme seçenekleri çok fazla olduğu için herkesin yüklerken seçtiği eklentiler de farklı olacaktır.Eğer ilk defa bir yazılım dili öğreniyor ve bir IDE kurulumu yapıyorsanız Visual Studio kurulumu için ayrı bir video izlemenizi tavsiye ederim.(Visual Studio İndirme Linki: visualstudio.microsoft.com/downloads/ )

Kurulumu yaptığınızı varsayarak dersimize devam ediyoruz.Visual  Studio 'da yeni bir proje açmak için sol üst köşeden "File/New/Project..." seçeneklerine tıklayıp yeni proje açma penceresine ulaşabilirsiniz. Ama ben "Ctrl+Shift+N" kısayolunu kullanmanızı tavsiye ederim C# ile yazarken hızlanmak, vakit kazanmak için bol bol kısayolları kullanmamız gerekiyor, elinizin alışması için en baştan kısayolları kullanmak çok faydanıza olacaktır.
Görsel 1.1 - Yeni Proje Oluşturma Ekranı
  1. Visual Studio için çok fazla özelleştirme seçeneği olduğunu söylemiştim.Şekilde gördüğünüz gibi Visual C# seçiyoruz.
  2. Projenize göre seçiminizin değişkenlik göstereceği bir diğer seçim kısmı da bu menü, ancak biz Visual C# için temel olan "Windows Form Application" seçerek dersimize devam ediyoruz.
  3. Projenize vermek istediğimiz ismi buraya yazıyoruz.
  4. Ekran fotoğrafında 4 olmadığını bende yazmaya başladığımda fark ettim. Böyle kalmasında bir sakınca yok, görüp hatırladıkça güleriz😂
  5. Projenizin dosyalarının kaydedileceği dosya konumu.(Projeleriniz için Visual Studio otomatik bir kayıt yeri belirleyecektir, dilerseniz o şekilde kullanabilirsiniz.Belirli bir süre sonra çok fazla proje olacağından karıştırmamak için projelerinizi ya çok güzel isimlendirmeniz lazım yada çok güzel klasörlemeniz. İkisini birden yaparsanız daha güzel.)
  6. İleri derslerde anlatacağımız bir kısım.Değiştirmemize gerek yok, proje ismi ile aynı kalabilir.
  7. OK butonuna tıklayıp ilk projemizi oluşturabiliriz.

8 Şubat 2019 Cuma

APP INVENTOR DERS-6

SPINNER VE NOTIFIER KULLANIMI

Bu projemizde ListView ve PasswordTextBox 'da kullanıyoruz.ListView, işlevi ListPicker ile aynı görüntüleri farklı.PasswordTextBox 'ın normal olandan tek farkı, yazdıklarınızın yıldız/küçük yuvarlaklar olarak gözükmesi.
Bu dersimizde bir hastane randevu alma uygulaması yapmaya çalışıyoruz.
Screen1 Bileşenleri
Bileşenlerimizi isimlendirerek başlıyoruz.
  • TextBox1 = txtKullaniciAdi , Hint özelliği: Kullanıcı Adı Giriniz
  • PasswordTextBox1 = pas_txtSifre , Hint özelliği: Şifre Giriniz
  • Button1 = btnGirisYap , Text özelliği: Giriş Yap
Ekran2 Bileşenleri
  • Spinner1 = spnBolumAdlari , ElementFromString: "Genel Cerrahi, İç Hastalıkları, Nöroloji"
  • ListView1 = lstGenelCerrahi ,Visible = False, ElementFromString: "Dr. Ayşe Budak, Dr. Hüseyin Yıldırım, Doç. Dr. Sabi Kalpli" (İsimler hayal ürünüdür)
  • ListView2 = lstIcHastaliklari ,Visible = False, ElementFromString: "Dr. Melek Kaya, Doç. Dr. Zeynep Yıldırım, Prof. Dr. Haki Bıyıklı"(İsimler hayal ürünüdür)
  • TimePicker1 = tmpRandevuSaati , Text: "Randevu Saatini Belirlemek İçin Tıklayın"
  • Button1 = btnTamamla , Text: "İşlemi Tamamla"
  • Label1 = lblSonucYaz , Text: " "
  • Notifier1 = ntfUyarici
  1. ListPicker kullanımını anlatmıştık, aynı şekilde Spinner içerisinde yer almasını istediklerimizi arasına virgül koyarak yazıyoruz.
  2. Bu metin kutusuna liste açıldığında başlık(title) olarak ne yazmasını istiyorsanız yazabilirsiniz."Randevu almak istediğiniz bölümü seçiniz"
  3. Ekrana sürüklediğiniz Notifier 'in ekranda görünmediğini farketmişsinizdir. Bu ve benzeri bileşenler burada Non-visible components(görünmez bileşenler) kısmında yer alır.
  1. "btnGirisYap" a tıklandığında,
  2. Eğer,
  3. Kullanıcı "pas_txtSifre" içerisine "admin123" , 
  4. Ve, 
  5. "txtKullaniciAdi" içerisine de "KodMaceralarim" yazdıysa, (kayıt ol/giriş yap projemizde ki kodları kullanabiliriz ama basit tutmak açısından bu şekilde kodluyoruz.)
  6. Ekran2 'yi aç
Ekran2 ye geçildiğinde ilk yapılacak olan "spnBolumAdlari" içerisinden randevu alacağımız bölümü seçmek
  1. Kullanıcı bölüm seçtiğinde veriyi tutmak için değişken oluşturuyoruz.
  2. Kullanıcı "spnBolumAdlari" ndan seçim yaptıktan sonra çalışacak kodları bu blok içerisine yerleştiriyoruz.
  3. Kullanıcının yaptığı seçimi oluşturduğumuz değişkene atıyoruz.
  4. "get selection" kod bloğunu buradan alabilirsiniz.
  5. Eğer, "secilenBolum" = "Genel Cerrahi" ise
  6. Genel Cerrahi doktorlarının yer aldığı "lstGenelCerrahi" nin visible özelliğini true yap(Böylece kullanıcımız istediği doktoru seçerek devam edebilir.)
  7. Eğer, "secilenBolum" = "İç Hastalıkları" ise
  8. "lstIcHastaliklari".Visible = true
  9. Eğer "secilenBolum" = "Nöroloji" ise
  10. "lblSonucYaz".Text = "Nöroloji bölümünü hizmete açmak için çalışmalarımız devam ediyor" olarak set et.
  11. ve 12. bloklar :Eğer kullanıcı ikinci kez randevu almak isterse diye listelerin visible özelliklerini false yapıyoruz.Blokları silerek aradaki farkı görebilirsiniz.
Randevu almak istediğimiz bölümü seçtiğimize göre sıra, hangi doktora muayene olmak istediğimizi seçiyoruz.
  1. "lstGenelCerrahi" listesinden seçim yapıldıktan sonra,
  2. Kullanıcı 1 'den fazla randevu aldığında yazılar üst üste binmesin diye sıfırlıyoruz, bu kod bloklarını silip neden ihtiyaç duyduğumuzu daha net görebilirsiniz.
  3. Bölüm ve doktor seçimi yapmadan "btnTamamla" ya tıklanamasın diye visible = false yapıyoruz.
  4. Pek çok yazılım dilinde görebileceğiniz bu kod, bir alt satıra  inmeyi sağlar.
  5. Kullanıcının seçtiği doktor adını oluşturduğumuz mesaja yerleştiriyoruz.
  6. Bölüm ve doktor seçimi tamamlandığına göre "btnTamamla".Visible = true olarak set edebiliriz.(Aynı bloğu "lstIcHastaliklari" için de yapıyoruz.)
  1. "btnTamamla".Click altındaki if kontrolünde kullanmak için "sayac" adında değişken oluşturuyoruz.
  2. "tmpRandevuSaati" kullanılarak randevu saati seçildiğinde sayacı 1 yap.
  3. "btnTamamla" ya tıklandığında,
  4. Eğer, "sayac" adındaki değişken 0 dan büyükse(yani randevu saati seçildiyse) 
  5. "lblSonucYaz".Text i şu şekilde set et: Doktor adı seçerken yazdırdıklarımız ("lstGenelCerrahi".AfterPicking veya "lstIcHastaliklari".AfterPicking den gelen kısım) + 
  6. "tmpRandevuSaati" kullanarak seçtiğimiz zamanın saat kısmı +
  7. "tmpRandevuSaati" kullanarak seçtiğimiz zamanın dakika kısmı
  8. "lblSonucYaz" a ekrana göstermek istediğimiz yazıları ekleme işlemini bitirdiğimize göre artık visible = true yapabiliriz.
  9. Else(başka) durumunda, yani if yanındaki şart sağlanmazsa aşağıdaki kodları çalıştır.("sayac" adındaki değişken 0 'dan büyük değilse, randevu saati seçilmemişse)
  10. "ntfUyarici" yi çağır(call).(Notifier için pek çok hazır kod bloğu seçeneği arasından bu proje için "ShowMessageDialog(Mesajı/diyaloğu göster)" seçildi. )
  11. "Randevu saati seçmeden kayıt tamamlanamaz" mesajını bir uyarı penceresi ile ekrana yaz.
  12. Uyarı penceresinin başlığında "Uyarı!" yaz.
Ekran2 kod bloklarının son hali


İYİ ÇALIŞMALAR

APP INVENTOR DERS-5

Image ve ListPicker Kullanımı

ListPicker, görüntüsü buton ile aynı, işlevi ise tıkladığınızda seçim yapmanız için bir liste açmaktır. Bu dersimizde 1 adet ListPicker, 1 adet Label, 8 adet Image(Sayıyı isteğinize göre değiştirebilirsiniz) kullanıyoruz.Proje akışımız basit: ListPicker'a tıklandığında bizim ayarladığımız(nasıl ayarlandığı aşağıda ki resimde gösteriliyor) şehirler listesinden seçtiğimiz şehrin plaka kodunu Label'a yazdırmak ve o şehirle alakalı bir görseli ekranda göstermek.Benim seçtiğim iller: İstanbul, Ankara, İzmir, Adana, Rize, Kayseri, Malatya, Diyarbakır .Her şehir için birer tane görsel indirmeyi unutmayın.

ListPicker'a Liste Elemanı Ekleme
  1. ElementsFromString(String Elemanlar) yazısının altında ki textbox'a aralarına virgül koyarak yazdığınız her şey liste elemanına dönüşür.
  2. İndirdiğiniz resimleri  Media altındaki "Upload File..." yazısına tıklayıp kaydettiğiniz dosya konumundan projenize yükleyebilirsiniz.
Bileşenlerimizi isimlendirmeyi unutmayalım.
  • ListPicker1 = lspSehirSec , Text özelliği: "Bir Şehir Seçiniz"
  • Label1 = lblPlakaYaz        , Text özelliği: " "
  • Image1 = imgIstanbul
  • Image2 = imgAnkara
  • Image3 = imgIzmir
  • Image4 = imgAdana
  • Image5 = imgRize
  • Image6 = imgKayseri
  • Image7 = imgMalatya
  • Image8 = imgDiyarbakir
  1. Her bir Image bileşenimizin Picture özelliğinin altındaki textbox'a tıkladığımızda Media kısmına yüklediğimiz görsellerin seçilebilir olduğunu görebiliriz.
  2. Eğer bu kutuyu işaretlerseniz görselin orijinal boyutunu yok sayacak ve telefonun ekranına görseli sıkıştıracaktır.
  3. Projenizin telefon ekranının resimdeki gibi görünmesi için bütün Image'lerin visible (görünürlük) özelliklerini false(yanlış/kapalı) yapmanız gerekli.
Değişken oluşturmayı ve liste yapmayı önceki dersimizde görmüştük.Şekilde gördüğünüz gibi listeleri ve değişkeni oluşturalım.Şehirlerin isimleri ile plaka kodlarının aynı sırada olması önemli.
Dersin daha anlaşılır olması için kullanıcının İzmir'i seçtiğini varsayarak devam ediyoruz
  1. (when "lspSehirSec" .AfterPicking yani "lspSehirSec" ile seçim yapıldıktan sonra aşağıdaki kodları çalıştır) "lblPlakaYaz" ın text özelliğini,
  2.  "Seçtiğiniz ilin plaka kodu:"+ "35" şeklinde set et.(İzmir'i seçtiğimizi varsaydığımız için 35 i kullandık.)
  3. Lists kısmından alınan bu kod bloğu,
  4. Buraya konulan listede,
  5. Buraya konulan elemanı arar ve indexini bulur.("lspSehirSec".Selection=Seçilen "lspSehirSec" elemanı)(İzmir seçildiğini varsaydığımız için index numarası 3 olarak dönecektir.)
  6. List kısmından alınan bu kod bloğu,
  7. Buraya konulan listeden, aşağıdan gelen index numarasına sahip elemanını seçer.(İndex numaramız 3 olduğundan ve "plakaKodlari" listesinin 3 numaralı elemanı da 35 olduğundan belirttiğimiz şekilde "Seçtiğiniz ilin plaka kodu:35" yazdırdık.)
  8. Kullanıcının seçtiği ilin liste index numarasını "secilenVeri" değişkenine atıyoruz.
  9. Projemiz büyüdükçe kod bloklarımız da büyüyor ve çalışma ekranımıza sığmaz hale gelmeye başlıyor.Daha kolay çalışmak için: Ctrl ye basılı tutarken farenizin kaydırağını kullandığınızda kod bloklarının boyutlarını ayarlayabilirsiniz veya kod bloklarına sağ tıklandığında açılan menüyü kullanabilirsiniz.En sık kullanılan sağ click özelliklerini açıklayarak devam edelim.
  • Duplicate: Hangi bloğun üzerindeyken sağ tıkladıysanız o blok ve altındaki bütün kod bloklarını kopyalar.
  • Collapse Block: Benim listelere uyguladığım gibi, kodlamayı bitirdiğiniz blokları collapse ederek(sıkıştırarak) daha az yer kaplamasını sağlayabilirsiniz.
  • Expand Block: Sıkıştırdığınız herhangi bir bloğu açmak için kullanabilirsiniz.
  • Disable Block: Yazdığınız bir bloğu silmek istemiyorsunuz ama işlevselliğini/ulaşılabilirliğini kapatmak istiyorsanız kullanabilirsiniz.
  • Add to Backpack:Yazdığınız herhangi bir kodu başka projelerinizde veya ekranlarda kullanacağınızı düşünüyorsanız, bu seçeneği kullanarak üzerindeyken sağ tıkladığınız o blok ve altındaki bütün kod bloklarını çantaya eklemiş olursunuz.Bu işlemi yaptığınızda çalışma ekranınızın sağ üst köşesindeki çantanın açıldığını göreceksiniz.Çantaya tıklayıp eklediğiniz bütün kodları görebilirsiniz.
Buraya kadar kullanıcının hangi ili seçtiğini öğrenip plaka kodunu ekrana yazdırdık.Şimdi seçilen ilin index numarasını "secilenVeri" değişkeni sayesinde bildiğimize göre buna uygun görseli görünür kılabiliriz.Bunu: eğer "secilenVeri=3" ise "imgIzmir" in visible özelliğini true(doğru/açık) olarak set et diyerek yapabiliriz.Yani if-then bloğu kullanmamız gerekiyor. Her il için bir tane if-then bloğu kullanarak da yapabiliriz fakat blokların sol üst köşelerinden çentik sayılarını artırabildiğimizi unutmayalım.Üstelik ayrı ayrı if-then blokları kullanmak programımızı daha ağır bir hale getirecektir.
Bu işlemde kullanıcının bir il seçiminden sonra gerçekleşeceği için bu kodları da "AfterSelection" bloğunun en altına yerleştiriyoruz. Kod bloklarının son halini aşağıda görebilirsiniz.
Soru1: Zaten Image'lerin visible özelliği false'iken neden tekrar kod içerisinde false yapmamız gerekti?
Soru2: Projede yapmak istediklerimizi daha az, hızlı çalışan kod blokları ile yapabilir miyiz? Yapabiliyorsak Nasıl?
(Cevaplarınızı yorum olarak bekliyorum.)


 İYİ ÇALIŞMALAR😁

7 Şubat 2019 Perşembe

APP INVENTOR DERS-4

BİR KLASİK(SIGN IN/LOGIN )

Kodlama dünyasına merhaba dedikten sonra pek çok uygulamada kullanılan kayıt ol ve giriş ekranını kodlayarak eğitime devam ediyoruz.
Bileşenlerimizi Ekliyoruz
Eklediğimiz bileşenlerin isimlerini ve kullanıcıya görünen text özelliğini ayarlayıp devam ediyoruz.
  • TextBox1 = txtKullaniciAdi , Hint özelliği: Kullanıcı Adı Belirleyin
  • TextBox2 = txtSifre , Hint özelliği: Şifre Belirleyin
  • DatePicker1 = dtpDogumGunuAl , Text özelliği: Doğum Tarihinizi Girin
  • CheckBox1 = chcKabul , Text özelliği: Kullanıcı sözleşmesini okudum ve kabul ediyorum
  • Button1 = btnKayitOl , Text özelliği: Kayıt Ol

  1. Bir önceki derste gördüğümüz gibi buton için tıklama olayını kullanıyoruz.Uygulamaların kayıt olma mantığını düşünürsek, eğer kullanıcı, kullanıcı sözleşmesini kabul ettiyse metin kutusuna girdiği kullanıcı adını, şifreyi ve doğum gününü kaydet.
  2. MIT'nin bizim için hazırladığı hazır kodlardan Control içindeki if-then kod bloğunu alarak buton click olayının içine yerleştiriyoruz.
  3. "Eğer kullanıcı, kullanıcı sözleşmesini kabul ettiyse" şartını bu if bloğuyla sağlıyoruz. if 'deki şart yerine geldiğindeyse then kısmına yerleştirdiğimiz kod blokları çalışır.
  1. Genelde uygulamalarda veri aktarımları veritabanı-uygulama arasında yapılır.Biz şimdilik basit olması için girilen verileri, oluşturduğumuz değişkenlerde tutacağız.İşlemleri veritabanı ile yapsak dahi değişkenleri sıkça kullanacağız.
  2. Bu kod bloğunu kullanarak,
  3. Bu şekilde değişkenlerimizi oluşturuyoruz."name" kısmına değişkene vermek istediğimiz ismi yazıyoruz ve her biri için Text kısmından boş metin kutusu alıyoruz, çünkü oluşturduğumuz her değişkene ilk değerini atamalıyız.
  4. Butona tıklandığında,
  5. Eğer
  6. "chcKabul" adını verdiğimiz checkbox işaretliyse(checked)
  7. "txtKullaniciAdi" adını verdiğimiz metin kutusunun içine yazılan veriyi "Nickname" adını verdiğimiz değişkene, "txtSifre" deki veriyi de "Password" değişkenine ata.
  8. "BirthDate" değişkenine kullanıcının girdiği doğum tarihi verisini atıyoruz.
  9. Madde 7 den farklı olarak join(katıl/birleştir) işlemi kullanıyoruz. Text kısmından aldığımız join kod bloğu çentikleri arasındaki verileri birleştirir.Verileri birleştirmeye yukarıdan başlar.(join kod bloğu standart olarak 2 çentiklidir köşesindeki mavi çark simgesinden çentik sayısı artırılabilir.)


  1. Add Screen(Ekran Ekle)'ye tıklayıp uygulamamıza 2. ekranımızı ekliyoruz.
  2. Ekrana isim veriyoruz.
  3. İstediğimiz zaman buradan ekranlar arasında geçiş yapabiliriz.
Giriş ekranımızı ekledik fakat giriş ekranına ne zaman geçileceğini belirlemedik. Gerekli şartlar yerine getirilip kayıt işlemleri tamamlandığında diğer ekrana geçiş yapılması için aşağıdaki şekilde görebileceğiniz gibi Screen1 kod bloğunda değişiklik yapmamız gerekiyor.
  1. Variables(Değişkenler) kısmından "bilgiler" adını verdiğimiz yeni bir değişken oluşturuyoruz.
  2. Lists(Listeler) kısmından en üstteki kod bloğunu kullanarak yeni boş bir liste oluşturuyoruz.
  3. Lists kısmının 3. hazır kod bloğunu kullanarak, oluşturduğumuz listeye istediğimiz elemanları ekleyebiliriz.
  4. Hangi listeye eleman eklemek istiyorsak buraya yerleştiriyoruz.
  5. Listenin 1. index'ine(sırasına) "Nickname" değişkenini yani kullanıcı adını ekliyoruz.(Yazılım dillerinde index'ler genelde 0'dan başlar, ama app inventor için 1'den başlıyor)
  6. Listenin 2. index'ine şifre verisini ekliyoruz.
  7. Control kısmının 9. hazır kod bloğunu şekildeki gibi yerleştiriyoruz.Bu blok diğer ekranı açmamızı ve geçiş sırasında da veri aktarmamızı sağlıyor.
  8. Geçiş yapmak istediğimiz ekranın adını bir metin kutusunun içine yazarak şekildeki gibi yerleştiriyoruz.
  9. Diğer ekrana geçiş yaparken aktarılacak başlangıç değerini(startValue) buraya yerleştiriyoruz.(Bizim için bu başlangıç değeri "bilgiler" adlı listemiz)

Gerekli düzenlemeyi yaptıysanız giriş ekranımızı kodlamaya geçebiliriz.

Giriş Ekranına Eklediğimiz Bileşenler
*Giriş yapma mantığını düşünecek olursak kişi butona bastığında kullanıcı adı ve şifresi kayıt olurken belirledikleri ile aynıysa "lblSonuc" un text özelliğinde "Bilgiler Doğru Giriş Yapılıyor" yazsın.(Kendinizi geliştirdikçe daha farklı işlemler yaptırabilirsiniz, şimdilik örneği basit tutmak için
sadece ekrana yazı yazdırıyoruz)




Screen1'den aktardığımız bilgileri atamak(set etmek) için yeni değişkenler(variables) oluşturuyoruz
  1. Ekran bileşeninin 3. kod bloğunu kullanıyoruz.Anlamı: "ekran yüklendiğinde/çalışmaya başladığında" aşağıdaki kodları çalıştır.
  2. Yukarıda oluşturduğumuz listeye Screen1'den gönderdiğimiz liste verilerini aktarıyoruz.(get start value'yi Control bloklarında 10. sıradan alabilirsiniz)
  3. Lists kısmı index 9 den alınan bu hazır kod bloğu, bir liste içerisinden girilen index numarasında ki veriyi seçmemizi sağlıyor.
  4. Bu koyu mavi blokları Math kısmının en üstünden alıyoruz."gelenBilgiler" listesinin index 1 verisini(Screen1 den gönderdiğimiz kullanıcı adı), "gelenKullaniciAdi" ismini verdiğimiz değişkene atıyoruz.(Edit:"Sayı kutusunun içini değiştirmeyi unutmuşum siz 1 yapın")
  5. Benzer işlemi şifre verisi için de yapıyoruz. (Sayı kutusunun içi 2 olacak)

  1. MIT 'nin hazır kodlarından logic kısmını açıyoruz.
  2. Mantıksal operatörlerden ve operatörünü seçiyoruz.
  3. Şekilde gördüğümüz gibi yerleştiriyoruz.Hatırlayacak olursak if kod bloğu yanındaki şart doğruysa then kısmındaki kod bloklarını çalıştırıyordu.Tek başına if bloğunun yanına birden fazla kod bloğu yerleştiremiyoruz, giriş işlemini yapabilmek için birden fazla şartımız olduğundan(kullanıcı adı ve şifrenin doğru olması)  ve ikisininde aynı anda doğru olması zorunluluğundan dolayı and(ve) operatörü kullanıyoruz.Eğer şartlardan birisi sağlandığında diğerinin doğruluğu önemli olmadan işlem yapacak olsaydık or(veya/yada) operatörü kullanırdık.
  1. Logic kısmından 2 adet "=" operatörünü alıyoruz.Bu operatör sağ ve solundaki verilerin birbiri ile aynı olup olmadığını kontrol eder.
  2. Bizde kullanıcının uygulamamıza giriş yapmaya çalışırken yazdığı veriyi sola, kayıt olurken yazdığı(Screen1 den gönderdiğimiz) veriyi sağa ekliyoruz.
  3. Şimdi de bu iki şartı aynı anda sağlayıp sağlamadığını kontrol edebilmemiz için, bu kod bloklarını and operatörünün sağına ve soluna yerleştiriyoruz.
  4. Son olarak bütün şartlar sağlandığına göre artık "lblSonucYaz" adlı bileşenimizin text özelliğini"Bilgiler Doğru Giriş Yapılıyor" şeklinde set edebiliriz.
Kod Bloklarının Son Hali

İYİ ÇALIŞMALAR

6 Şubat 2019 Çarşamba

APP INVENTOR DERS-3

İLK PROGRAM(HELLO WORLD)

Bende bir klasik olan ilk programım "Hello World" ile başlamak istiyorum.
  1. Sürükle bırak yaparak User Interface(Kullanıcı Arayüzü)'den temsili telefon ekranına 1 adet button ve 1 adet label ekleyelim.
  2. Eklediğimiz bileşenlerin, ders 2 de gösterdiğim gibi Screen1'in alt kısmında da eklendiğini görebilirsiniz.Butonu ve label'ı yeniden isimlendirmeyi unutmayalım.Ben butonu "btnTikla", label'ı "lblEkranaYaz" olarak isimlediriyorum.NOT: Bileşen isimlendirmede Türkçe harfler kullanılmamaktadır.
  3. Screen1 seçiliyken özellikler(Properties) panelinden Title özelliğini değiştirerek uygulamanızda görünmesini istediğiniz başlığı yazabilirsiniz.Ben "Ekran1" yazacağım.
  4. Blocks butonuna tıklayıp buton ve label arasındaki bağlantıyı kurmak için ilk kod bloklarımızı oluşturabiliriz.


  1. Tasarım(Designer) kısmındaki bileşenlerin bulunduğu paletin kopyası.
  2. Blocks kısmına ilk geçtiğinizde bu kısım açık olmayacaktır, paletten herhangi bir bileşen seçtiğinizde o bileşenle yazılabilecek kod blokları bu şekilde açılacaktır.Yine sürükle bırak yaparak kullanıyoruz.Bu kısımda ki her rengin bir anlamı var, sarılar o bileşenle ilgili durumları/olayları(events), yeşiller özellikleri(properties)(Seçili bileşenin bir özelliğini değiştirmek/yazmak/set etmek istiyorsak koyu yeşilleri,varolan özelliğini kullanmak/okumak/get etmek istiyorsak açık yeşilleri seçicez), morlar davranışları(behaviors) simgeler.Bir buton için mor olmadığından burada göremiyoruz.
  3. Kullanmamız için MIT App Inventor tarafından oluşturulan hazır kod blokları.Kullandıkça tanıtacağım. 

Sırasıyla yukarıdan aşağıya doğru bir butonun olaylarını tanıtalım

  • Click: Butona tıklandığında,
  • GotFocus: Üzerine gelindiğinde(telefon ekranında butonun dışında bir yere tıklayıp elinizi butonun üzerine getirdiğinizde), butona focuslanıldığında,
  • LongClick: Uzun süre butona tıkladığımızda,
  • LostFocus: Elimiz butonun üzerindeyken tıklama işlemini gerçekleştirmeden elimizi ekranda başka bir yere kaydırdığımızda, buton focus kaybedince,
  • TouchDown: Butona dokunma işlemi başladığında,
  • TouchUp: Butonu serbest bıraktığımızda dokunma işlemi bittiğinde,(Aslında Click event'i TouchDown ve TouchUp event'lerinin birleşimi gibi gözükse de kod bloklarında aynı anda kullanıldığında TouchUp içerisindeki kodlar daha önce çalışır.)


  1. Buton bloklarından click olayını, label bloklarından set......Text özelliğini alıp şekildeki gibi birleştiriyoruz.
  2. MIT'nin bizim için oluşturduğu hazır kod bloklarından Text için olanları açıyoruz.
  3. Boş metin kutusunu alıyoruz ve şekilde gösterilen kısma sürükleyip birleştiriyoruz.


Böylece ilk programımızı bitirmiş bulunmaktayız.Şimdi sıra yaptığımız bu programı çalıştırmakta.Bu işlem için ya Android işletim sistemine sahip bir telefonunuz olması lazım yada bilgisayarınıza bir sanal cihaz(emulator) kurmanız gerekiyor.

Bilgisayara Sanal Cihaz Kurulumu

İnternette pek çok sanal cihaz bulabilirsiniz,ben çok fazla kullanıcısı olan "Bluestacks" i kullanıyorum. www.bluestacks.com/tr/index.html adresinden cihazınıza indirip kurulumu yaptıktan sonra devam edebiliriz.

  1. Build(Derle/İnşa et) butonuna basıyoruz.
  2. "App(save .apk to my computer)" yani uygulamanın .apk dosyasını bilgisayarıma kaydet seçeneğini seçiyoruz.(Diğer seçenek ben bu postu oluşturduğum zaman hata veriyordu, yine de öğrenmek isteyen varsa iletişim bilgilerinden ulaşabilirsiniz.) Seçtikten sonra ekrana bir progress bar(ilerleme çubuğu) çıkacaktır, tamamlanana kadar bekliyoruz.Programın büyüklüğüne ve bilgisayarınızın sistem özelliklerine göre süre değişecektir. apk dosyasını indirdikten sonra 
işlemlerini gerçekleştiriyoruz (Bütün çalışmalarınızı tutmak için bir klasör oluşturmanızı tavsiye ederim.) ve yükleme işlemi tamamlandığında uygulamamız çalıştırılmaya hazır bir şekilde sanal cihazımızın ekranında bekliyor olacak.

Kendi Cihazınızda Çalıştırma

Eğer yaptığınız uygulamayı kendi android cihazınızda çalıştırmak istiyorsanız, bilgisayara indirdiğimiz .apk dosyasını bir şekilde telefonunuza göndermeniz gerekiyor.(Whatsapp Masaüstü'nü kurup boş bir grup açarak bilgisayarınız ve telefonunuz arasında dosya alış-verişi yapabilirsiniz, mail, cloud, Google Drive vb şekillerde iletilebilir.) Bu işlemler sırasında telefonunuz "3. parti dış etmenlerden gelen işlemleri yapmaya kapalıdır" şeklinde bir uyarı verebilir, bu durumda çıkan uyarıyı takip ederek ayarlardan gerekli izini verdikten sonra uygulamanızı çalıştırabilirsiniz.

VE SONUÇ



5 Şubat 2019 Salı

APP INVENTOR DERS-2

Arayüzü Tanıyalım

Arayüzdeki bütün elemanları kendiniz kurcalayarak öğrenmek zorunda kalmamanız için bazılarını açıklamak istiyorum.
  1. Sürükle bırak yaparak uygulamamızın arayüzünü oluşturacağımız bileşenleri(components) bulunduran palet.İlerleyen derslerde örnek uygulamalarla açıklanacak.
  2. Yeni proje oluşturduğumuzda uygulamanın bize otomatik olarak oluşturduğu ilk ekran.
  3. Eğer projemizde birden fazla ekran varsa -orta ve daha büyük projelerde genelde olur- ekranlar arasında geçiş yapmamızı sağlar
  4. Projemize yeni ekran oluşturmamızı sağlar.Ekran adını belirleyip OK butonuna bastığımızda ekleme gerçekleşir.
  5. Eğer yeni bir ekran eklediysek ve silmek istiyorsak bu buton ile siliyoruz.DİKKAT! bir ekranı sildiğimizde o ekrandaki bütün bileşenler ve dahil oldukları bütün kod blokları da silinir.
  6. Sürükle bırak ile projemize eklediğimiz bütün bileşenleri burada görebiliriz.
  7. Otomatik olarak ekli olan Ekran1 bileşeni.
  8. Eklediğimiz herhangi bir bileşeni yeniden adlandırabiliriz. NOT: Zorunlu olmamakla beraber, eklenen her bileşene bir isim vermek bir alışkanlık, bir yazılım kültürü haline gelmiştir.Ayrıca bileşenlerinizi isimlendirmek size kodlamada çok faydalı olacaktır.Bunu ilerleyen derslerde tecrübe edebilirsiniz.
  9. Bu buton ile seçili olan bileşeni ve o bileşenin dahil olduğu bütün kod bloklarını sileriz.
  10. Ses,resim...vb dosyaları import etmemizi(dışardan ekleme) sağlayan buton.
  11. Seçili olan bileşenin özelliklerini görüntülediğimiz ve değiştirebildiğimiz kısım.
  12. Sadece Ekran1 bileşeni seçiliyken görebileceğimiz bir özellik.Buradan uygulama ismini belirliyoruz.
  13. Pek çok bileşende bulunan arkaplan rengini belirlediğimiz kısım.
  14. Arkaplana resim yüklemek için kullandığımız kısım. 
  15. Ekran kapanırken gösterilecek animasyonu belirlediğimiz kısım.
  16. Uygulamamızın simgesini belirdeğimiz kısım.
  17. Ekran açılış animasyonunu belirlediğimiz kısım.

KOLAY ANDROID UYGULAMA GELİŞTİRME

MIT APP INVENTOR

NEDİR?

İlk olarak Google tarafından geliştirilen, sonrasında MIT(Massachusetts Institute of Technology)'nin geliştirmeye devam ettiği bir web uygulamasıdır.Başlangıçta amacı çocuklara android programlamayı öğretmek, daha zevkli ve görsel hale getirmek olsa da sağladığı kolaylıklardan dolayı kullanıcı kitlesi sadece çocuklar olmaktan çıktı ve Google Play Store'da MIT App Inventor ile geliştirilmiş çok fazla sayıda uygulama yerini aldı. 

*Uygulama geliştirmeye başlamak için appinventor.mit.edu/explore/ sayfasında sağ üstte bulunan Create apps! butonuna tıklayıp Google hesabınızla giriş yapmalısınız.
Kısaca, giriş yaptıktan sonra karşımıza çıkan sayfayı tanıtarak başlamak istiyorum.
  1. My Projects: Var olan bütün projelerimize giden kısayol.
  2. Gallery: Diğer App Inventor kullanıcılarının kendi geliştirdikleri uygulamaları gönüllü olarak paylaştıkları galeri. İhtiyacınıza uygun olanları veya geliştirmek istediğiniz bir uygulamanın benzerlerinin olup olmadığını ücretsiz ve hızlı bir şekilde inceleyebileceğiniz bir galeri.
  3. Guide: MIT'nin App Inventor için hazırladığı bütün dokümantasyonlara ulaşabileceğiniz bir kısayol.
  4. Report an Issue: Uygulamada bir hata ile karşılaştığınızda bu kısayolu kullanarak MIT'ye bu hatayı raporlayabilirsiniz.
  5. Bu menüler diğer derslerde kullanıldıkça anlatılacak
  6. Start a New Project ile yeni bir proje oluşturup başlayabiliriz.

İYİ ÇALIŞMALAR

4 Şubat 2019 Pazartesi

Başlarken

Merhaba
Bu bloğu açmaktaki amacım: kendi kodlama ve yeni teknolojileri öğrenme serüvenimi paylaşarak hem ihtiyacı olabileceklere ulaştırmak, hem öğrendiklerimi biriktirdiğim bir kütüphane oluşturmak, hem de bir blogtan ne kadar gelir elde edebileceğimi öğrenmek istiyorum. Blogger olma yolunda ilk çalışmam olduğu için paylaşımlarım da eksikler olabilir, ama inanıyorum  ki zamanla daha profesyonel içerikler oluşturacağım.

Biraz Kendimden Bahsedecek Olursam

12 Mayıs 1995'te Kayseri'de doğdum, büyüdüğüm köyde  8. Sınıfa kadar Gaziler İlköğretim Okulu'nda okuduktan sonra, lise eğitimi için şehir merkezine taşındım ve 4 yıllık eğitimimi İstikbal Lisesi'nde tamamlayıp 2013 yılında Erciyes Üniversitesi Sağlık Bilimleri Fakültesi Hemşirelik Bölümü'nü kazandım. 1 yıl İngilizce hazırlık sonrasında hemşirelik eğitimine başladım, 2. sınıfta öğrenci personel olarak üniversitenin kan merkezinde görev almaya başladım. 2016 yılında 2. sınıf sonunda (biraz geç kalmış olsam da😅)  hemşireliğin hayatım boyunca yapmak istediğim meslek olmadığına karar verdim ve yeniden üniversite sınavlarına hazırlanmaya başlamışken; "merkezi puanla yatay geçiş" hakkım olduğunu öğrendim ve Manisa Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği Bölümü'ne geçiş yaparak üniversite eğitimime sıfırdan başlamış oldum.Umuyorum ki 2020 Haziran ayında mezun olacağım...👍
         
İlgi Alanlarım

  • C#
  • MSSQL
  • App Inventor
  • Flutter
  • Dart
  • Unity
  • Steam
  • ...


Zaman ayırdığınız için teşekkür ederim...



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