C# Ortadan İleriye #1 - Değişkenler (Birlikte Öğrenelim)

bubinick

Üye
3 Haz 2023
54
23
22
Bursa
Önsöz:
Merhaba forumda sıklıkla c# nasıl öğrenirim? kaynak verir misiniz? tarzı konularla karşılaşıyorum. Bunun kısmen önüne geçmek ve detaylarıyla beraber c#'a sağlam bir giriş yapmak için bu konuyu açtım. Malum sağdan soldan pdf okuyarak yada video izleyerek bir yere kadar gidebiliriz, bunu forumda yaparsak takıldığımız yerde destekte alırız bilgimizi diğerleriyle de paylaşmış oluruz. Şahsen okuyarak öğrenmeyi seven insanım video izleyerek öğrenmem zor oluyor bu yüzden böyle bir konu açtım benim gibi öğrenenler için faydalı olabilir.
Bu ders serisinde alışılmışın dışında derinlemesine konuları ele almayı planlıyorum hem kendimi sınamış olur ve yeni şeyler öğrenirim hem de diğerlerine katkım olmuş olur. Giriş seviyesi kısımları üstünkörü geçeceğim (visual studio kurulumu, proje oluşturmak gibi...) törpülediğim kısımlar bence bu konuyu okuyan herkesin bildiği şeyler olacaktır. (Konsol uygulaması üzerinden çalışmıyorum.)


1- Değişkenler:
Klasik olarak işe değişkenlerle başlayalım. Değişken dediğimiz şey kısaca veriyi bellekte tutan ve istediğimizde kullanmamızı sağlayan bir fonksiyondur. Programlamada her alanda işimize yarayabilir bu yüzden öğrenilmesi gerekir. Değişkenler 11 farklı tipe ayrılır.

C#'da değişken tanımlamak için:


C#:
int a = 5; // Şeklinde kısaca tanımlanabilir. Burada değeri direkt olarak atayabiliriz.

int a; // Eğer değer sonradan atanacaksa böyle kullanılabilir.
a = 12;

Tüm türler bu şekilde tanımlanabilir ileride bu konuyu derinlemesine ele alırız ama şimdilik bu kadarı yeterli. Aşağıya tüm veri tiplerini bırakıyorum.

Sayısal veri tipleri
TürBoyutKapasite
Byte1 Bayt0, ..., 255 (tam sayı)
sByte1 Bayt-128, ..., 127 (tam sayı)
Short2 Bayt-32768, ..., 32767 (tam sayı)
uShort2 Bayt0, ..., 65535 (tam sayı)
İnt4 Bayt-2147483648, ..., 2147483647 (tam sayı)
uİnt4 Bayt0, ..., 4294967295 (tam sayı)
Long8 Bayt-9223372036854775808, ..., 9223372036854775807 (tam sayı)
uLong8 Bayt0, ..., 18446744073709551615 (tam sayı)
Float4 Bayt±1.5*10-45, ..., ±3.4*1038 (reel sayı)
Double8 Bayt±5.0*10-324, ..., ±1.7*10308 (reel sayı)
Decimal 16 Bayt ±1.5*10-28, ..., ±7.9*1028

Metinsel veri tipleri
TürBoyutKapasite
Char2 BaytTek bir harf kapasitesi vardır.
StringSınırsızMetin tutar.

Koşul veri tipi ve object
TürBoyutKapasite
Bool-True - False veya 1>2 şeklinde kullanılır.
Object-Tüm veri tiplerini tanımlarken kullanılabilir.

Evet arkadaşlar yukarıdaki tüm veri tipleri elbet işinize yarar. Şimdi değişkenler hakkında birkaç bilgi vermek istiyorum. Sayısal tiplerde (tamsayı) genellikle kullanacağımız integer olur. Bazı durumlarda mesela aşırı işlem gerektiren bir program yazdıysanız ve arka arkaya milyonlarca sonuç döndürmeniz gerekiyorsa integer ram'e yük bindirip hantal bir hale getirebilir sizi. Bu durumda 0-255 arası değer tutan Byte imdadınıza yetişir. Tabi bu çoğu zaman olmaz :)
Sayısal veri tiplerinde tam sayıları öğrendik fakat birde 12,92 gibi virgüllü sayılar var. Bunları int ile tanımlayamayız. Böyle durumlarda Double ve Float işimizi görecektir. Aralarında kapasite farkı vardır bunun yanı sıra Double hassas işlemlerde sıkıntısız sonuç verirken Float bellek dostudur ve hızlı çalışır. Bu yüzden çetrefilli işlemlerde Double kullanılır.

Metinsel veri tipleri içinde dikkat etmeniz gereken şey türkçe karakter kullanmamaktır. Bunun dışında pek anlatacak bir şeyim yok bu konuda.

Şimdi basit bir örnekle bu konuyu pekiştirelim. Integer türünde 3 değişken oluşturup iki sayının toplamını ekrana yazdıralım.

C#:
//Projeye 2 textbox, 1 buton ve 1 label ekledim.

private void button1_Click(object sender, EventArgs e)
        {
            int sayi1 = Convert.ToInt32(textBox1.Text); //Textbox1'e girilen değeri sayi1 olarak oluşturduğum değişkene atadım.
            int sayi2 = Convert.ToInt32(textBox2.Text); //Textbox2'e girilen değeri sayi2 olarak oluşturduğum değişkene atadım.
            int sonuc = Convert.ToInt32(sayi1+sayi2); //sonuc Adında bir değişken oluşturup içine sayi1 ve sayi2'nin aldığı değerlerin toplamını yazdırdım.
            label2.Text = Convert.ToString(sonuc); //Label2'ye sonuc'a atanan değeri yazdırdım.

        }

Burada Convert parametresini de anlatmak istiyorum. Textbox varsayılan olarak string türüne uyarlı gelir. Eğer girilen değeri integer türüne çevirmezsek hata alırız. Çıktıda sorun yaşamamak için textbox'a girilen değeri kod satırında ToInt32'ye çeviriyoruz. Eğer virgüllü bir sayı olsaydı çıkan seçeneklerden ToDouble'da seçebilirdik.

Değişken konusu bu kadardı toplama çıkarma gibi işlemleri yaparken faydasını gördünüz. İlerleyen kısımlarda sabitlere de geçeceğiz ve konu iyice pekişecek. İlk anlatımım olduğu için hatalar olabilir başlangıcı böyle yapmak istedim ne olur ne olmaz temeli atayım koşullu ifadeler vs de gelecek ve hepsinden sonra bağımsız yazılımlar yaparken öğrenmeye devam edeceğiz kolay gelsin.
 

Grimner

Adanmış Üye
28 Mar 2020
6,309
4,758
Bir kaç eleştirim olacak.
Bence giriş için kafa karıştırıcı olmuş.
Form uygulaması yerine console yeni başlayanlar için daha iyi olurdu.
Çünkü adam daha TextBox ne bilmiyorken onun içindeki değeri almayı gösteriyorsun.
Ve de ilk başta Convert methodunu göstermesen de olurdu. Onun yerine kendin sabit bir değer verebilirdin.
Bir de konuda örnek sayısı çok az geldi.
Sıfırdan ileri düzey olan bir konunun örnekleri yetersiz olmamalı.
Bool/String/Char gibi değişkenlerle de örnekler iyi olurdu.
Ayrıca // açıklama satırının ne olduğunu anlatmadan kullanmaya başlamanı da doğru bulmadım.
Ve de kurulumları göstermeden sıfırdan yazmak doğru değil bence.
Son olarak ise resim kullanımı olabilirdi. Konu bu hali ile pek anlaşılır değil.
@Coderx37 hocam sen ne diyorsun?
 

bubinick

Üye
3 Haz 2023
54
23
22
Bursa
Bir kaç eleştirim olacak.
Bence giriş için kafa karıştırıcı olmuş.
Form uygulaması yerine console yeni başlayanlar için daha iyi olurdu.
Çünkü adam daha TextBox ne bilmiyorken onun içindeki değeri almayı gösteriyorsun.
Ve de ilk başta Convert methodunu göstermesen de olurdu. Onun yerine kendin sabit bir değer verebilirdin.
Bir de konuda örnek sayısı çok az geldi.
Sıfırdan ileri düzey olan bir konunun örnekleri yetersiz olmamalı.
Bool/String/Char gibi değişkenlerle de örnekler iyi olurdu.
Ayrıca // açıklama satırının ne olduğunu anlatmadan kullanmaya başlamanı da doğru bulmadım.
Ve de kurulumları göstermeden sıfırdan yazmak doğru değil bence.
Son olarak ise resim kullanımı olabilirdi. Konu bu hali ile pek anlaşılır değil.
@Coderx37 hocam sen ne diyorsun?
Konu içinde de söylediğim gibi o kadar da sıfırdan değil :D aslında amacım bunları da anlatmak değildi dediğiniz gibi kurulumdan itibaren başlarsam bu konu çoook uzar ve yetişemem sanırım. En iyisi sıfırdan kısmını kaldırmak öyle biraz aldatıcı oluyor konsol üzerinden anlatmama sebebimde belli dediğimiz gibi giriş seviyesinin bir tık üstünde başlatmak istedim derslerimi.
 

Grimner

Adanmış Üye
28 Mar 2020
6,309
4,758

Kruvazör

Yazılım Ekibi Lideri
28 Mar 2020
1,728
2,546
Wrong Side Of Heaven
@Coderx37 hocam sen ne diyorsun?
Etiketlediğin için sağol.

Tüm internet üzerindeki c# başlangıç yazılarıyla birebir aynı maalesef.
özgünlükten ilgi çekmekten ve heveslendirmekten uzak standart bir bilgi yazısı (tabi ne kadar bilgi denilirse...)

Neden form ile başladığına anlam verememekle beraber karmakarışık bir yazı olduğunu düşünüyorum.
Yazılıma yeni başlamış bir insan için muhtemelen bu yazı sadece kafa karışıklığı olacaktır.

Eğer bu serinin devamını düşünüyorsan lütfen görsel kullan ve farklı şeyler dene.
eline sağlık.
 

bubinick

Üye
3 Haz 2023
54
23
22
Bursa
Etiketlediğin için sağol.

Tüm internet üzerindeki c# başlangıç yazılarıyla birebir aynı maalesef.
özgünlükten ilgi çekmekten ve heveslendirmekten uzak standart bir bilgi yazısı (tabi ne kadar bilgi denilirse...)

Neden form ile başladığına anlam verememekle beraber karmakarışık bir yazı olduğunu düşünüyorum.
Yazılıma yeni başlamış bir insan için muhtemelen bu yazı sadece kafa karışıklığı olacaktır.

Eğer bu serinin devamını düşünüyorsan lütfen görsel kullan ve farklı şeyler dene.
eline sağlık.
Konu içinde de belirttiğim gibi bu kısımları bende anlatmak istemezdim yoldan geçen değişken nedir desen bilir herhalde? bugün bu konu dahil birkaç konuya daha değindim. Temelden almak istediğim konular bittiğinde söylediğim gibi ortak projeler geliştirmeye ve daha karmaşık sistemlere yoğunlaşmayı düşünüyorum. Hem fikir alışverişi yapmak hem de bazı noktalarda takılı kalanlar için yol gösterici makaleler yazmak istiyorum. Forumda C# için bu tarz makaleler göremediğim için bu konulara başlama isteğim artmıştı sonuçta google'de c# değişkenler diye aratanlar niye bu siteye gelmesin ki? Resim ekleme konusunu da pek sevmiyorum kodu paylaşıp çıktısını altına yazarak kısaca anlatmak daha kolay ve anlaşılır geliyor benim için. Neden console değil kısmına da değineyim bana göre oop konsoldan daha kullanışlı ileride kim siyah bir ekrandan sayı toplamayla uğraşır ki? Bu zamana kadar gördüğüm çoğu konsol uygulaması gömülü sistemleri yönetmek için kullanılıyordu (hile yazılımı vs) benim çizdiğim yol son kullanıcı için yazılım üretmek hani şu tıklamalı sürükle bıraklı olanlardan.
Ayrıca Sıfırdan kısmını düzeltip Orta seviye yapmıştım bu makale yazılımın y'siyle alakası olmayanlar için değil daha çok ara verip tekrar dönenler yada diğer dillerden tecrübesi olanlar için. Mesela python bilen birisi bitkiye anlatır gibi anlatırsam sonuca odaklanır benim istediğimde tam olarak bu. Proje nasıl açılır, forma buton nasıl eklenir, renk, yazı tipi nasıl değiştirilir gibi konulara değinmememin sebebi bu. İlgisini istediğim kitlede cafcaflı resimlerle bu işe heveslenen gençler değil açıkçası onlar için daha basite indirgenmiş sıfırdan ileriye kaynaklar bolca var.

Özgünlük kısmını da anlayamadım ne bekliyorsunuz ki? Değişken herkes için aynı anlatırken de sınırları oluyor tabi hikaye gibi anlatacak değilim.
 

Kruvazör

Yazılım Ekibi Lideri
28 Mar 2020
1,728
2,546
Wrong Side Of Heaven
Konu içinde de belirttiğim gibi bu kısımları bende anlatmak istemezdim yoldan geçen değişken nedir desen bilir herhalde? bugün bu konu dahil birkaç konuya daha değindim. Temelden almak istediğim konular bittiğinde söylediğim gibi ortak projeler geliştirmeye ve daha karmaşık sistemlere yoğunlaşmayı düşünüyorum.
Meraken soruyorum örnek verebilir misin projelere?

Forumda C# için bu tarz makaleler göremediğim için bu konulara başlama isteğim artmıştı sonuçta google'de c# değişkenler diye aratanlar niye bu siteye gelmesin ki?
C# ve yazılım konularında yetkili birisi olarak aynı konudan 700 tane saydım zaman boyunca...
Neden console değil kısmına da değineyim bana göre oop konsoldan daha kullanışlı
Sanırım ufak bir anlam karmaşası oldu form diyecektiniz diye düşünüyorum.
Ayrıca Sıfırdan kısmını düzeltip Orta seviye yapmıştım bu makale yazılımın y'siyle alakası olmayanlar için değil daha çok ara verip tekrar dönenler yada diğer dillerden tecrübesi olanlar için.
Ama yazdıklarınız maalesef bu tanıma da uymuyor. çünkü bu yazdıklarınız neredeyse en temel şeyler.

Yanlış anlaşılma olmasın hiç bir hakaret amacım vesaire yok amacım eleştirilerle birbirimizi geliştirmek.
 

tamam ağa

Uzman üye
7 Haz 2023
1,471
841
çok tuhaf yazmışsın misal neden integer? diye birisini sorsa cevabı yok.

yeni başlayan birisi elbet bunları merak edecektir misal int a =5; yaparken aslında ne yapıyoruz?
int nedir neler alır bir harf veya char alabilir mi? alırsa neler olur vs vs.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.