Konuyu Oyla:
  • Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5
   
Konu: C# - Temel Veri Türleri / RAM - Değişkenler {0}
Hera
*
avatar
Teğmen
Durum: Çevrimdışı
Seviye Puanı: 3
Yaşam Puanı: 73 / 73
Deneyim: 93 / 100
Rep Sayısı: 3
Mesaj Sayısı: 27
Üyelik Tarihi: 13.04.2019
     
Yorum: #1
C# - Temel Veri Türleri / RAM - Değişkenler {0}
14.04.2019 18:59
Yavaştan C# anlatımlarına başlıyorum. Tüm konularımda en detaylı şekilde her şeyi açıklayarak anlatacağım. Kafasında soru işareti olan lütfen saklamayıp sorsun. Umarım katkım olur Smile



Bu başlık altında C# dilinde kullanılan temel veri türlerinden bahsedeceğim. Her dilde olduğu gibi, C# dilinde de, önceden tanımlanmış ve dillerin temelini oluşturan ve veri saklamak için kullanılan bir takım veri türleri vardır. C# dilinde temel olarak veri tipleri ikiye ayrılır. Bunlar, önceden tanımlanmış veri türleri de kendi arasında referans tipi (referance type) ve değer tipi (value type) olmak üzere ikiye ayrılır. Daha fazla detaylandırmadan önce veri tiplerini nasıl tanımlanır, nasıl ilk değer verilir ve veri türlerinin faaliyet alanı gibi temel konulardan bahsedeyim.

Değişkenler
Değişkenler, içinde farklı türlerde veri saklayabildiğimiz bellek gözeneklerinin programlamadaki karşılıklarıdır. Hemen hemen bütün programlama dillerinde değişkenler, kullanılmaya başlamadan önce tanımlanırlar. Bu işleme tanımlama denilmektedir. Derleyici tanımlama satırını görünce bellekte nesnenin özelliğie uygun miktarda yer tahsis (ayırır) eder.
Modern bilgisayar sistemlerinde programlar belleğe yüklendikten sonra mikroişlemci vasıtası ile çalıştırılırlar. Birazdan veri türlerinin nerede yer ayırıldığı hakkında yazı yazacağım. Bir verinin bellekte tutulması altı bölgeden birisinde olmaktadır. Bu bölgeler;

I. Stack Bölgesi
Genel anlamda stack bölgesi dediğimizde RAM'i anlayabilirsiniz. Programımızın içinde basit bir tamsayı türünden nesnenin tipik olarak çalışma zamanında yüklendiği yer RAM'in stack dediğimiz bölgeleridir. Stack bölgelerinde Mikroişlemcilerde bulunan Stack Pointer vasıtası ile doğrudan erişilebilir. Stack pointer, o anda bellekte çalışan bölgenin adresini tutan yapıdır. Stack pointer, bellekteki alan tahsisatına göre bir azaltılır yada bir artırılır. Bu yüzden stack bölgesinde tutulacak verilerin çalışma zamanı öncesi ne kadar alan kapladığını bilinmesi gerekir. Aksi bir durumda Stack Pointer işlevi ile çelişkili bir durum olurdu. .NET platformunun altyapısını oluşturan JIT Derleyicileride programı yüklediğinde Stack Pointer'ı doğru konumlandırmak için tahsisatını yapacağı verinin tam boyutunu bilmesi gerekir. Bütün veriler eğer stack bölgesinde tahsisat yapılmış olsaydı, programlarımızın esnekliği azaslırdı; zira C#'ta bazı nesneler referans yolu ile belirtildikleri için verinin kendisi Stack'ta bulunmayabilir.

II. Hesap Bölgesi
Stack bölgelerinde olduğu gibi Heap alanları da RAM'de bulunan hafıza alanlarıdır. Bütün C# nesneleri bu bölgelde oluşturulur. Stack'ten farklı olarak heap bölgesinde tahsisatı yapılacak nesnenin derleyicisi tarafından bilinmesi zorunlu değildir. Bu yüzden, Hesap bölgesi kullanmak programlarımıza büyük esneklik katmaktadır. C#'ta Hesap bölgesinde bir nesneye alan tahsisatı yapmak için ileride göstereceğim new anahtar kelimesi kullanılır. New anahtar kelimesi ile tahsisat yapılmış veriler çalışma zamanında dinamik olarak yaratılırlar. Yani derleme zamanında veriler için herhangi bir tasisat yapılmaz. Heap alanın bize sunduğu esneklik avantajının yanı sıra bazı dezavantajlarıda var. Bunlardan en önemlisi işlemlerin hızının stack mekanizmasına göre daha yavaş olmasıdır.

III. Register Bölgesi
Stack ve Heap tahsisat (allocation) mekanizmalarına göre çok hızlıdır. Sebebi ise Register bölgesinin ikincil bir bellekte olmamasıdır. Register'lar mikroişlemcinin içinde bulunan sınırlı sayıdaki ypaılardır. Register sayıları sınırlı olduğu için derleyiciler çok sık işlem yaptıkları verileri hız kazanmak için registarlarda tutarlar. Bizim mikroişlemci Register'larıan doğrudan erişim hakkımız yoktur. Kısacası Register'larla ilgili işlemler tamamen derleyicinin kararındadır.

IV. Static Bölge
Bellekteki herhangi sabit bir bölgeyi temsil eeder. Static alanlarda tutulan veriler RAM'ın bütün çalışma süresince saklanırlar. C# ile bir nesneye static özelliği vermek için static anahtar sözcüğü kullanılır.

V. Sabit Bölge
Sabit (constant) değerler genellikle program kodlarının içine gömülü şekildedir. Bu değelerin değişmesi mümkün değildir. Sadece okuma amaçlı oldukları için hızlılık açısından bazı durumlarda ROM (Read Only Memory)'da tutulurlar.

VI. RAM Olmaya Bölge
Bellek bölgesinin temsil etmeyen disk alanlarını temsil eder. Bazı veri türlerini kalıcı olması istenir. Bu durumda yukarıda saydıklarımdan herhangi bir bölge verilerin bir kısmı program sonlandığında disklere kaydeddilir. Kısacası program çalışmadığında verinin bulunmasını istiyorsa bu tür disk sistemleri kullanmalıyız (Klasik floppy ve harddisk'te olduğu gibi).


Değiken Tanımlama


C# Dilinde genel olarak değişken tanımlama aşağıdaki gibi olmaktadır;

<veri türü> <ismi>;

Örneğin, işaretsiz (pozitif ve negatif değerler kapsayan) ve 32 bitlik bir tamsayı olan "a" isimli bir değişken şu şekilde tanımlanır;

int a;

Benzer şekilde bu tarz tanımlamalarda geçerlidir;

char e;
double b;
bool c;
float d;


Fakat yukarıda gösterdiğim tanımlamalarda bir eksiklik var. Tanımlanan değişkenlerde herhangi bir değer tutulmamaktadır. Bu yüzden C# derleyicisi şimdilik "a" değişkenini kullanmamıza müsade etmez. Çünkü değişkenlerde neyin olduğu henüz belli değildir. Bu yüzden değişkenlere = operatörüyle değerler atarız ya da değişken bildiriminden sonra, değişkene bir değer atarız. Bir değişkene bir dedğer atama kiçin iki farklı yöndem kullanılır. Al tarafta bu iki yönteme örnek vereyim;

int a = 10;

Yukarıdaki ifade ile değişken tanımlanırken bellekteki değer 10 olarak düzenleniyor.

int b;
b = 10;


Yukarıdaki ilk satırda değişken tanımladıktan sonra ikinci satırda değişkene değer atanıyor. İşlevsel olarak bu iki kullanım arasında bir fark yoktur.

int a = 10, b;

Eğer bir satırdan birden fazla değişken tanımlamak istiyorsanız bu virgüllü yapıyı kullanmanızı öneririm. Bu durumda a ve b "int" türünden değişkenlerdir deriz.

Virgül kullanarak tek satırda aynı türden birden fazla değişken tanımlaması yapabiliriz.

double a, b, c;

{ C# dilinde bir değişkene herhangi bir değer atamadan onu kullanmak yasaktır. Yani derlenme işlemi olmaz. Örneğin aşağıdaki gibi bir kullanım derleme zamanında hata verecektir. Bu yüzden eğer bir değişkeni kullanmak istiyorsak, yukarıda anlattığım gibi değişkenlere bir değer vermek zorundayız. Bu kural önceden tanımlanmış ereferans tipleri içinde değer tipleri içinde geçerlidir. }

int a;
Console.WriteLine(a);

( Bu iki satır olan program derlenmeyecektir )

{ Tanımlamalar kaynak kodun herhangi bir yerinde yapılabilir. Bu konuda sınırlama yoktur. }

Değişken tanımlamayla ilgili diğer önemli bir konu da değişkenlerin adlandırılmasıdır. C ve C++ dillerinde de olduğu gibi değişken isimlerinde küçük-büyük harf duyarlılığı (case sensivitiy) vardır. Değişken isimlendirme ile ilgili temel kuralları şöyle sıralayabilirim;

1. C#'ta değişken isimlerinde büyük harf-küçük harf duyarlılığı (case sensivitiy) vardır. Büyük harfler ile küçük harfler farklı algılanır. Yani 'UCRET' ile 'Ucret' C# için farklıdır. Örneğin örnekteki gibi programı çalıştırdığımızd ekrana iki farklı değer yazdıracak.

Kod:
static void Main(string[] args)
        {
            int Ucret = 10;
            int UCRET;
            UCRET = 20;
            Console.WriteLine(Ucret);
            Console.WriteLine(UCRET);
        }

2. Değişken isimleri 1,2,3,.. gibi numerik bir karakter ile başlayamaz. Ayrıca değişken isimlerinde boşluk karakteri olamaz. Aşağıdaki örnekte ilk iki değişken yanlış tanımlanmış, sonuncu değişken ise doğru tanımlanmıştır.
Kod:
int 1ucret = 10;            // Yanlış
int ucret katsayi = 2;    // Yanlış
int ucret1 = 10;           // Doğru



Elimden geldiğince detaylandırarak anlattım uzun olabilir. Okudaktan sonra eğer C#'a yeni başladıysanız tek seferde anlamanızı kimse beklemez o yüzden tek seferde geçmeyin Smile
(Bu konu en son: 14.04.2019 Tarihinde, Saat: 19:07 düzenlenmiştir. Düzenleyen: Hera.)
Alinti
Rep Verenler: The_ZiziL
MECZUP
*
avatar
Binbaşı
Durum: Çevrimdışı
Seviye Puanı: 14
Yaşam Puanı: 340 / 340
Deneyim: 63 / 100
Rep Sayısı: 33
Mesaj Sayısı: 245
Üyelik Tarihi: 17.10.2018
      
Yorum: #2
RE: C# - Temel Veri Türleri / RAM - Değişkenler {0}
14.04.2019 22:32
Bu dili hiç sevmiyom çok kullanıldığı için Smile Eline sağlık

Meczup Official

VarsaYoksa Cyberizm
Alinti
The_ZiziL
*
avatar
Valhalla
Durum: Çevrimdışı
Seviye Puanı: 36
Yaşam Puanı: 894 / 894
Deneyim: 76 / 100
Rep Sayısı: 575
Mesaj Sayısı: 1971
Üyelik Tarihi: 06.02.2017
     
Yorum: #3
RE: C# - Temel Veri Türleri / RAM - Değişkenler {0}
15.04.2019 08:15
Teşekkürler, Emeğine Sağlık.

Allah’tan utanmayan insanlardan da utanmaz…
Alinti
Hera
*
avatar
Teğmen
Durum: Çevrimdışı
Seviye Puanı: 3
Yaşam Puanı: 73 / 73
Deneyim: 93 / 100
Rep Sayısı:
Mesaj Sayısı: 27
Üyelik Tarihi: 13.04.2019
     
Yorum: #4
Cvp: C# - Temel Veri Türleri / RAM - Değişkenler {0}
15.04.2019 09:18
(14.04.2019 22:32)MECZUP Nickli Kullanıcıdan Alıntı:  Bu dili hiç sevmiyom çok kullanıldığı için Smile Eline sağlık
C# çok kullanılıyor evet fakat nesne tabanlı olduğu için herkes yanlış kullanıyor. Bu yüzden konu açmaya başladım. Yorumlar için teşekkür ederim Smile
Alinti
#Ayar
*
avatar
Tabutçu
Durum: Çevrimdışı
Seviye Puanı: 35
Yaşam Puanı: 786 / 873
Deneyim: 95 / 100
Rep Sayısı: 1547
Mesaj Sayısı: 1860
Üyelik Tarihi: 13.08.2013
      
Yorum: #5
RE: C# - Temel Veri Türleri / RAM - Değişkenler {0}
15.04.2019 11:57
Teşekkürler, Emeğine Sağlık Smile

Başka forumlarda üyeliğim bulunmamaktadır.
ayar
Alinti



1 Ziyaretçi