Tüm programlama dillerinde olduğu gibi C# dilinde de değişkenler tanımlanırken bazı kurallara uyulması gerekmektedir. Bunun yanı sıra değişkenlerin faaliyet alanının (değişkene erişilebilecek bölgelerin) iyi bilinmesi de önemlidir.
Değişken Tanımlarken ve İsimlendirilirken Dikkat Edilecek Hususlar
1-C# dili büyük-küçük harf duyarlı bir olduğu için, değişken isimleri buna göre verilmelidir. Aşağıdaki değişkenlerin üçü de farklı değişken olarak algılanır.
int sayi; int Sayi; int SAYI;
2-Değişken isimleri rakam ile başlayamaz, ancak diğer karakterler rakam olabilir.
int 1sayi; // yanlış
int sayi1; //doğru
3-Değişken ismi birden fazla kelimeden oluşuyorsa araya boşluk konulmaz. İhtiyaç halinde _ ile kelimeler birleştirilebilir.
int sinav notu; //yanlış
int sinavnotu; //doğru
int sinav_notu; //doğru
4-C# dilinde kullanılan özel komutlar veya anahtar kelimeler değişken ismi olarak kullanılmaz.
Örneğin değişken isimleri, if,switch, for, do, continue, default, case, catch, try, finally, true, false, public, static, private, this, using, while, protected, v.b kelimeler değişken ismi olarak kullanılamaz. Bu anahtar kelimeleri aklınızda tutmak zorunda değilsiniz, zaman içerisinde zaten birçoğunu öğreneceksiniz.
5-Değişken isimleri içerisinde özel karakterler kullanılmaz. Örneğin ?, !, >, <, =, {, %, ‘, ), #, @, +, -, /, *, &, [ gibi. Yukarıda da bahsedildiği gibi sadece _ (alt çizgi) kullanımı istisnadır.
Değişken isimlerinde Türkçe karakter kullanımı hataya neden olmasa da kullanılması tavsiye edilmez.
Değişkenlerin Yaşam Alanı
Genel kural şudur; değişkenler tanımlandığı blok içerisinde faaliyet gösterirler. Tabi bu durumun istisnaları mevcuttur. Burada istisnalara değinip kafanızı karıştırmayacağım.
static void Main(string[] args) { double sayi1 = 15, sayi2 = 25; } void hesapla() { double ort = (sayi1 + sayi2)/2; }
Bu örnekte hesapla metodu (bloğu) içerisinden sayi1 ve sayi2 değişkenlerine ulaşmak ve işlem yapmak mümkün değildir. Yukarıda ki gibi bir kullanım hataya sebep olur.
Aynı durum if, for, while gibi koşul ve döngü blokları içinde geçerlidir.
static void Main(string[] args) { int deger = 45; if (deger > 20) { int toplam = 100; } Console.WriteLine(toplam); }
Bu örnekte toplam değişkeni if bloğu içerisinde tanımlandığı için, sadece bu blok içerisinde varlığını sürdürebilir. Yukarıdaki gibi bir kullanım hataya neden olacaktır.
Değişken Kullanım Örnekleri
int sayi=5; int x,y=8,z; //Aynı türdeki değişkenler aynı anda tanımlanabilir. bool aktif = true; float f = 5.4f; // Değerin sonuna eklediğimiz f harfi değişkenin float türünde olduğunu gösterir. double d = 3.2; byte b = 230; long l = 123456789; short s = -312; decimal dec = -5.26m; //Değerin sonundaki m harfi değişkenin decimal türünde olduğunu gösterir. char ch = 'c'; //Char tipinde ki değişkenler tek tırnak içerisine yazılır. String deger=”merhaba”;
Tür | Boyut | Kapasite | Örnek |
---|---|---|---|
byte | 1 bayt | 0, …, 255 (tam sayı) | byte a=5; |
sbyte | 1 bayt | -128, …, 127 (tam sayı) | sbyte a=5; |
short | 2 bayt | -32768, …, 32767 (tam sayı) | short a=5; |
ushort | 2 bayt | 0, …, 65535 (tam sayı) | ushort a=5; |
int | 4 bayt | -2147483648, …, 2147483647 (tam sayı) | int a=5; |
uint | 4 bayt | 0, …, 4294967295 (tam sayı) | uint a=5; |
long | 8 bayt | -9223372036854775808, …, 9223372036854775807 (tam sayı) | long a=5; |
ulong | 8 bayt | 0, …, 18446744073709551615 (tam sayı) | ulong a=5; |
float | 4 bayt | ±1.5*10-45, …, ±3.4*1038 (reel sayı) | float a=5F; veya float a=5f; |
double | 8 bayt | ±5.0*10-324, …, ±1.7*10308 (reel sayı) | double a=5; veya double a=5d; veya double a=5D; |
decimal | 16 bayt | ±1.5*10-28, …, ±7.9*1028 (reel sayı) | decimal a=5M; veya decimal a=5m; |
Bazı değişken türlerinde değer atarken değerin sonuna bir karakter eklenir, bu değişken türlerindeki değişkenlere değer atarken siz de bunlara dikkat etmelisiniz. Metinsel türler:
Tür | Boyut | Açıklama | Örnek |
---|---|---|---|
char | 2 bayt | Tek bir karakteri tutar. | char a='h'; |
string | Sınırsız | Metin tutar. | string a="Bilişim Teknolojileri Alanı"; |
bool
Koşullu yapılarda kullanılır. Bool türünden değerlere true, false veya 2<1 gibi ifadeler örnek verilebilir. Örnekler:
bool b1=true;
bool b2=false;
bool b3=5>4;
object
Bu değişken türüne her türden veri atanabilir. Örnekler:
object a=10;
object b=’k’;
object c=”metin”;
object d=12.7f;
C#’taki bütün değişken türleri object türünden türemiştir.
Değişkeni programımız içinde kullanma
Bir örnek:
using System; class degiskenler { static void Main() { byte a=5; Console.WriteLine(a); } } //Burada a değişkeninin değerini ekrana yazdırdık.
Başka bir örnek:
using System; class degiskenler { static void Main() { byte a=5; byte b=8; Console.WriteLine(a+b); } } //Bu programda iki değişkenimizin değerlerinin toplamını ekrana yazdırdık.
using System; class degiskenler { static void Main() { string a="Bilişim", b="Akanı"; Console.WriteLine(a+b); } }
Bu programda aynı satırda iki tane string değişkeni tanımladık ve değer verdik. Bu değişkenlerin değerlerini WriteLine metoduyla ekrana yan yana yazdırdık. WriteLine metodu + işaretini gördüğünde sayısal değişken ve değerleri toplar, string türünden değişken ve değerleri yan yana yazar, char türünden değişken ve değerlerin Unicode karşılıklarını toplar. Ancak tabii ki + karakterinin ayırdığı değişken veya değerler char ile stringse char karakterle string metni yan yana yazar.
using System; class degiskenler { static void Main() { string a; a=Console.ReadLine(); Console.WriteLine(a+" metnini yazdınız."); } }
Bu program kullanıcıdan bir metin alıp bunu ekrana “… metnini yazdınız.” şeklinde yazıyor. ReadLine metodunu kullanıcı entera basana kadar programı bekletmek için kullanmıştık. Aslında ReadLine metodunun en yaygın kullanımı kullanıcının bilgi girişi yapmasını sağlamaktır. Dikkat ettiyseniz programımızda kullanıcının girdiği bilgi a değişkenine atanıyor. Sonra da WriteLine metoduyla ekrana bu değişken ve ” metnini yazdınız.” metni yan yana yazdırılıyor. Burada asıl önemsememiz gereken şey Console.ReadLine() ifadesinin string türünden bir değer gibi kullanılabilmesidir. C#’ta bunun gibi birçok metot bir değer gibi kullanılabilir. Tahmin edebileceğiniz üzere WriteLine gibi birçok metot da bir değer gibi kullanılamaz. Başka bir örnek:
using System; class degiskenler { static void Main() { int a, b; a=20; b=a; Console.WriteLine(b); } }
Bu programda da görebileceğiniz gibi değişkenlere değer olarak başka bir değişkeni atayabiliriz. Ancak değerini atadığımız değişkene daha önceden bir değer atanmış olması gerekiyor. Burada b değişkenine a değişkeninin değeri atanıyor. Ancak aşağıdaki gibi bir kullanım kesinlikle hatalıdır.
using System; class degiskenler { static void Main() { Console.ReadLine()="metin"; string a=Console.ReadLine(); Console.WriteLine(a); } }
Burada Console.ReadLine() ifadesi bir değişkenmiş gibi kullanılmaya çalışılıyor, ancak hatalı. Çünkü Console.ReadLine() ifadesi yalnızca bir değermiş gibi kullanılabilir.
Değişken adlandırma kuralları
Şimdiye kadar değişkenlere ad, a veya b gibi basit adlar verdik. Ancak aşağıdaki kuralları ihlal etmemek şartıyla değişkenlere istediğiniz adı verebilirsiniz.
- Değişken adları boşluk, simge içeremez.
- Değişkenler bir numerik karakterle başlayamaz.
- C#’ın diğer bütün komut, metot ve benzerlerinde olduğu gibi değişken adlarında büyük-küçük harf duyarlılığı vardır. Yani degisken isimli bir değişkenle Degisken isimli bir değişken birbirinden farklıdır.
- Değişken adları Türkçe karakterlerden(ğ,ü,ş,ö,ç,ı) oluşamaz. (Yeni versiyonlarda Türkçe karakterler kullanılabilir.)
Sık yapılan hatalar
C#’ta değişkenlerle ilgili sık yapılan hatalar şunlardır:
Aynı satırda farklı türden değişkenler tanımlamaya çalışma. Örneğin aşağıdaki örnek hatalıdır:
int a, string b;
Değişkene uygunsuz değer vermeye çalışma. Örnek:
int a;
a=”metin”;
Değişkeni tanımlamadan ve/veya değişkene ilk değer vermeden değişkeni kullanmaya çalışma. Aşağıdaki örnekte iki değişkenin de kullanımı hatalıdır.
using System;
class degiskenler
{
static void Main()
{
int b;
Console.WriteLine(a);
Console.WriteLine(b);
}
}
Değişken tanımlaması ve/veya değer vermeyi yanlış yerde yapma. Örnek:
using System;
class degiskenler
{
int a=5;
static void Main()
{
Console.WriteLine(a);
}
}
Diğer using dışındaki bütün komutlarda da olduğu gibi değişken tanım ve değer vermelerini de Main bloğunun içinde yapmalıyız.
Bazı değişken türlerindeki değişkenlere değer verirken eklenmesi gereken karakteri eklememek. Örnek:
using System;
class degiskenler
{
static void Main()
{
float a=12.5;
Console.WriteLine(a);
}
}
Ondalık sayıların ondalık kısmını ayırırken nokta (.) yerine virgül (,) kullanmak. Örnek:
using System;
class degiskenler
{
static void Main()
{
float a=12,5f;
Console.WriteLine(a);
}
}
Metinsel değişkenlerle matematiksel işlem yapmaya çalışmak. Örnek:
using System;
class degiskenler
{
static void Main()
{
string a=”1″, b=”2″;
int c=a+b;
Console.WriteLine(a);
}
}
Bir değişkeni birden fazla kez tanımlamak. Örnek:
using System;
class degiskenler
{
static void Main()
{
string a;
string a=”deneme”;
Console.WriteLine(a);
}
}
Değişkenlere değer verirken yanlış şekilde değer vermek. Örnek:
using System;
class degiskenler
{
static void Main()
{
string a=deneme;
Console.WriteLine(a);
}
}
Sabit değişkenler
Programımızda bazen değeri hiç değişmeyecek değişkenler tanımlarız. Örneğin pi isimli float türünden bir değişken tanımlayıp buna 3.14 değerini verip programımızda pi sayısına ihtiyaç duyulduğunda bu değişkeni kullanabiliriz. Sabit değişkenlerin normal değişkenlerden farkı değişkeni değiştirmek istediğimizde ortaya çıkar, sabit olarak belirtilen değişkeni değiştirirsek derleyici hata verip programımızı derlemez. Bu daha çok uzun program kodlarında işe yarayabilir. Ayrıca sabit değişkenlere tanımlandığı satırda değer vermeliyiz. Herhangi bir değişkeni sabit olarak belirtmemiz için değişken türünden önce const anahtar sözcüğü kullanılır. Örnekler:
const int a = 5;
const string b =”deneme”;
const char c =’s’;
Aşağıdaki gibi bir durum, değişkene tanımlandığı satırda değer verilmediği için hatalıdır.
const int a;
a=5;
Sabit değişkenlere değer olarak sabit, sabit değişken ya da sabit ve/veya sabit değişkenlerden oluşan matematiksel ifadeler verilebilir. Örnek:
const int a=5;
const int b=a+7;
const int c=a*b;
Aşağıdaki gibi bir durum hatalıdır.
int a=5;
const int b=a+8;
Escape sequence (\) kullanımı
Bir string sabitin içinde özel karakterler olması için escape sequence kullanılır. Örnekler:
string ad=”Deneme\”Deneme”;
Console.WriteLine(ad);
Bu satırda ” karakterinin ad değişkenine atanan string sabitin içine koyulmasını sağladık. Yukarıdaki kod ekrana Deneme”Deneme yazar. Başka bir örnek:
string yol=”Windows\\Program Files”;
Burada bir illegal karakter olan \ karakterinin başına tekrar \ koyarak stringin bir tane \ almasını sağladık.
string yol=@”Windows\Program Files”;
Burada yol değişkenine tırnak içerisindeki metin olduğu gibi aktarılır, ancak doğal olarak ” karakterinde işe yaramaz.
Console.WriteLine(“Satır\nYeni satır\nYeni satır”);
Örnekte de gördüğünüz üzere C#’ta \n yeni satır yapmak için kullanılır.