Daha önce C#’a kısa bir giriş yapıp daha sonra da Visual Studio 17’yi inceledik. Şimdi artık yavaş yavaş programlamanın içine giriyoruz. Bu yazımda C# değişken tanımlama, bellek yerleşimi, ekrana mesaj yazdırma ve kullanıcıdan girdi alma gibi temel adımları anlatacağım. Daha fazla uzatmadan hemen konuya girelim. ☺

C# Değişken Tanımlama

Bir program yazmaya başladığınızda genellikle görevleri yerine getirmek için veri kullanırsınız. C#’ta bir değişkeni kullanmak için önce veri türü ve adını belirtmelisiniz. Değişkenin ismi harflerden ve sayılardan oluşabilir. Hatta değişken tanımlarken _, – gibi karakterleri de kullanabilirsiniz. Bir değişkeni en iyi şekilde tanımlamak istiyorsanız içerdiği verinin adını verebilirsiniz.

Örneğin pi sayısını bir değişkende tutacağınızı varsayalım;

 pi = 3.14

gibi bir tanımlama yapmanız gerekiyor. Tabi bir veriyi veri türü olmadan tanımlayamazsınız. C#’ta yaygın olarak kullanılan veri türlerine bakalım.

C# Veri Türleri

byte: 0 – 255 arasındaki tam sayıları tanımlamak için kullanılır. Bellekte 1 bayt yer kaplar. En küçük tam sayı tanımlama veri türüdür.
sbyte: byte ile tanımlanan sayının işaretlenmiş halidir. -128 ile 127 arasında tam sayıları tanımlamak için kullanılır. Bellekte 1 bayt yer kaplar.
short: -32768 – 32767 arasındaki tam sayıları tanımlamak için kullanılır. Bellekte 2 bayt yer kaplar.
ushort: 0 – 65535 arasındaki tam sayıları tanımlamak için kullanılır. short tanımlamasının unsigned(işaretlenmemiş) olarak yapılmış tanımlamadır. Bellekte 2 bayt yer kaplar.

int: -2147483648 – 2147483647 arasında tam sayı tanımlamak için kullanılır. Bellekte 4 bayt yer kaplar.
uint: 0 – 4294967295 arasında tam sayı tanımlamak için kullanılır. int tanımlamasının unsigned(işaretlenmemiş) olarak yapılmış tanımlamadır. Bellekte 4 bayt yer kaplar.
long: -9223372036854775808 – 9223372036854775807 arasında tam sayı tanımlamak için kullanılır. Bellekte 8 bayt yer kaplar.
ulong: 0 – 18446744073709551615 arasında tam sayı tanımlamak için kullanılır. Bellekte 8 bayt yer kaplar.

float: ±1.5*10-45 – ±3.4*1038 arasında ondalıklı sayıları tanımlamak için kullanılır. Bellekte 4 bayt yer kaplar.
double: ±5.0*10-324 – ±1.7*10308 arasında ondalıklı sayıları tanımlamak için kullanılır. Bellekte 8 byte yer kaplar. float’a göre 2 kat hassastır.
decimal: ±1.5*10-28 – ±7.9*1028 arasındaki ondalıklı tanımlamak için kullanılır. Bellekte 16 byte yer kaplar.

bool: True ya da false veya 0 ya da 1 değerlerinden birisini tanımlamak için kullanılır. Bellekte en az yer kaplayan değişkendir. 1 bit yer kaplar.

char: Tek bir karakter tanımlamak için kullanılır. Tanımlarken ‘ ‘ arasında gösterilir. Bellekte 2 byte yer kaplar.
string: Bir karakter dizisi tanımlamak için kullanılır. Tanımlarken ” ” arasında gösterilir. Bellekte içine aldığı değer kadar yer kaplar.

int x = 15;
float y = 3.5;
double pi = 3.14;
bool isTrue = true;
char z = 'd';
string name = "derya";

C# Ram Bölümlemesi (Bellek Kullanımı)

C#’ta tanımladığımız değişkenlerin bellekte ne kadar yer tanımladığını az önce öğrendik. .NET Framework bellek yönetimini önemli ölçüde kendisi yapar. Ancak biz de belli ölçülerde bellek yönetimi yapabiliriz. C#’ta veriler iki ana dala ayrılır. Stack ve Heap bölgesinde farklı iki türde verileri depolayabiliriz.

Ram Bölümlenmesi

Stack bölgesinde değer tipli değişkenleri saklamak için kullanılan bölgelerdir. int, double, byte gibi sayabileceğimiz değişkeler stack bölgesinde tutulur.

Heap bölgesinde referans tipli değişkenler tutulur. string ve object’in yanı sıra new olarak türetebileceğiniz bütün değişkenler heap bölgesinde tutulur. Değişkenlerin adresi ise stack bölgesinde tutulur.

Heap Bölümlemesi

Burada göstermeye çalıştığım gibi C# içerisinde deneme değerini barındıran bir değişken hayal edelim. Değişken adresi stack bölgesinde 0x7fff5694dc58 olarak tutulur. Bu direkt olarak “deneme” değerini gösterir.

C# Değişken Tanımlama

Ekrana Mesaj Yazdırma

Eveet işin zevkli kısmına geldik. Visual Studio’da new project diyerek yeni bir proje açıyorsunuz.

İlk önce o hepimizin bildiği klasik ekran ile başlayalım. Ekrana Hello World mesajını yazdıralım. C#’ta ekrana mesaj yazdırmak için Console sınıfının iki adet metodu mevcut. Write metodu verilen mesajı yazar ve imleci karakterin sonunda bırakır. Yani; “Hello World!|” yazdığınızda imleç bu şekilde sağda durur. WriteLine metodunu kullandığınızda ise imleç bir alt satıra iner. Şimdi ekrana “Hello World!” yazdıralım.

namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Console.ReadKey();
        }
    }
}

İşte bu kadar kolay! Burada kullandığımız yapıları biraz açıklayayım. namespace programı oluşturduğuma ekranında programa verdiğimiz isim. Class Program ise programın çalıştığı sınıfı gösterir. Daha ileri derslerimizde bu yapıyı derinlemesine inceleyeceğiz. Main programın çalıştıran ilk metottur. Main olmazsa program çalışmaz. Main metotu geriye hiçbir değer döndürmediği için de void olmalıdır. static ve void anahtar kelimelerinin de derslerini birkaç ders sonra anlatacağım. Şimdilik main yapısını bu şekilde kullanalım. Küçük bir not ekleyeyim. Eğer “Console.ReadKey()” metodunu eklemezsek Visual Studio çıktıyı ekrana saniyeler içerisinde gösterir ve kapanır.

Kullanıcıdan Veri Alma

Şimdi kullanıcıdan veri alma örneği yapalım. Örneğin; kullanıcıdan adını alıp ekrana “Hello X!” olarak yazdıralım.

namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            string kullaniciAdi;
            Console.WriteLine("İsminiz nedir?");
            kullaniciAdi = Console.ReadLine();
            Console.WriteLine("Hello " + kullaniciAdi + "!");
            Console.ReadKey();
        }
    }
}

ReadLine methodu kullanıcıdan aldığı değeri kullaniciAdi isimli string değişkene atar. Bir sonraki komutta da kullanıcıdan alınan değer Hello yazısı ile birlikte kullanıcının ekranına ismini yazar. Örnek çıktısına bakalım.
C Sharp İsim Yazdırma

Bu kodu farklı bir şekilde de yazabilirsiniz.

namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            string kullaniciAdi;
            Console.WriteLine("İsminiz nedir?");
            kullaniciAdi = Console.ReadLine();
            Console.WriteLine("Hello {0}!", kullaniciAdi;
            Console.ReadKey();
        }
    }
}

Bu şekilde yazarak {0} yazılan yere kullaniciAdi isimli değişken gelir. Daha kullanışlı bir yöntemdir. Bu sayede yazılacak mesajı bölmeden birden çok değişkeni ekrana yazabilirsiniz.

C# 6 ile birlikte hayatımıza yeni bir kavram daha girdi. String Interpolation yani String Interpolasyon şeklinde Türkçeleştirebiliriz sanırım. Kod yazarken ve okurken büyük bir kolaylık sağladığı için son dönemlerde çok tercih ediliyor. Hemen kullanım örneğini görelim.

string kullaniciAdi;
Console.WriteLine("İsminiz nedir?");
kullaniciAdi = Console.ReadLine();
Console.WriteLine($"Hello {kullaniciAdi}");
Console.ReadKey();

Gördüğünüz gibi tırnak işaretinden önce bir dolar işareti koyduktan sonra süslü parantezler içerisine yazdırmak istediğimiz değişkeni yazdırıyoruz ve sonuç olarak normal bir şekilde yazdırıyor.

ReadLine metodu herhangi bir argüman almadan çalışır ve geriye her zaman string değer döndürür. Eğer metodun farklı değerlere dönüştürülmesi isteniyorsa Convert.ToXXX yöntemi kullanılmalıdır. Örneğin kullanıcıdan ismini aldıktan sonra yaşını da alıp değeri ekrana yazdıran bir program yazalım.

namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            string kullaniciAdi;
            int kullaniciYasi;
            Console.WriteLine("İsminiz nedir?");
            kullaniciAdi = Console.ReadLine();
            Console.WriteLine("Merhaba {0}! Yaşınızı girer misiniz?", kullaniciAdi);
            kullaniciYasi = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Yaşınız {0}", kullaniciYasi);
            Console.ReadKey();
        }
    }
}

Csharp Kullanıcıdan Veri Alma

Convert.ToInt32 metodu girilen girdiyi integer değerine dönüştürür. Dönüştürmek istediğiniz tüm veri türlerini bu yöntem içerisinde bulabilirsiniz.

Şimdiye kadar değişken türlerini, C# değişken tanımlama ve ram bölümlemesini öğrendik. İlk ders yazımız şimdilik bu kadar! Bir sonraki yazıya kadar kendinize iyi bakın. 😊