-
Yazılımda en önemli yapıtaşlarından biridir.
-
Operatörler temel anlamda bir işin sorumluluğunu üstlenen temel yapıtaşlarıdır.
-
Bir işin sorumluluğunu üstlenen, sorumluluk alan bir operasyon gerçekleştiren yapılanmalardır.
-
Diyelim ki toplama işlemi yapacağız. Biz toplamayı yaparken
+
operatörünü kullanıyoruz. Yazılımda+
operatörü benim yerime toplama işlemini gerçekleştiren bu sorumluluğunu üstlenen bir değerdir/yapıdır. Nasıl ki+
ile birşeyleri toplayabiliyorsam diğer operatörlerle belirli işlemleri belirli sorumlulukları gerçekleştirebilmekteyiz. Bu işlemler bu sorumluluklar türlü türlü farklı farklı sorumluluklar olabilir. Bunlara uygun metinsel ya da direkt sembolik operatörlerimiz vardır. -
Operatörler belirli bir sorumluluğu/işi/operasyonu üstlenen sembolik yahut metinsel yapılardır.
-
Bizim yerimize o sorumluluğu icra ederler...
-
Nasıl ki bir inşaatta o inşaatla ilgili çalışmayı yapan kepçenin kullanıcısı operatörse ne yapıyor benim yerime oradaki işi yapıyor. Buradaki de benim yerime toplamayı yapıyor, kontrolleri yapıyor gerekli dönüşüm işlemlerini yapıyor vs falan aklına ne gelirse yapıyor.
-
Operatör dediğimi,z yapının teknik boyutuna girdiğimizde operatörleri kullanırken bir operatör okur yazarlığı gerekiyor.
-
Operatör bir işi benim yerime yapan görevlidir/operasyoncudur/operasyonu yürüten işçidir.
-
Nasıl ki karakollarda planlamayı yapanlar stratejisyenlerse operasyonu genellikle özel harekatlar yapıyor. İşte özel harekatlar orada operatörler oluyor. Sorumluluğu üstlenen/yapan oradaki stratejik kararda olması gereken işi yapanlar özel harekatsa bizim de yazılımdaki özel harekatlarımız operatörlerimizdir.
-
Belirli bir işe ihtiyacın var örneğin 1 arttırman gerekiyor orada
++
operatörünü kullanacaksın senin yerine 1 arttırıyor gibi -
Mesela
null
kontrolü yapacaksın orada?
operatörü gelecektir. -
Farklı şekilde yapabileceğin uzun uzun yapacağın işlemleri kısaca yapmanı sağlayan sembolik yahut metinsel değerlere operatörler diyoruz.
-
Herhangi bir operatör genellikle sağındaki ve solundaki değerler üzerinde bir bağıntı oluşturur. Bu operatör aritmetik olabilir mantıksal olabilir ya da herhangi bir işleyişi sorumluluğu üstlenen operatörde olabilir.
-
Operatör dediğin genellikle iki değer arasına konulur ve bu iki değer arasında işlem yapan bir yapıdır.
-
Oepratörler genellikle iki değer arasında matematiksel, matıksal yahut farklı bir işlemsel görev/operasyon yapan yapılardır.
-
İki değer arasına sen bir operatör yerleştirdiysen o yerleştirdiğin operatörün mahiyetine göre sonuç olarak bir işlem yapacaktır. Bir sonuç dönecektir sana
-
Operatörler genellikle yaptıkları işlem neticesinde bir sonuç dönerler. Dönülen sonucu sen alıp başka bir işlemde de kullanbilirsin. Örneğin
- 3 + 5 Burada
+
operatörü 3 ile 5'i toplar ve sonuçta 8 değerini döndürüyor.
- 3 + 5 Burada
-
Operatörleri kullanırken geriye dönüş değerlerine dikkat edilmesi gerekmektedir. Özellikle aritmetik operatörlerde dikkat edilmelidir.
-
Bir operatör işlem yaparken geriye ne döndürüyor bu çok önemli buna dikkat etmezseniz eğer ezbere kod yazmış olursunuz.
-
Operatör Türleri
- Aritmetik Operatörler
- Karşılaştırma Operatörleri
- Mantıksal Operatörler
- Diğer/Özel İşlem Operatörler
-
Aritmetik operatörler
+
,-
,*
,/
,%
olmak üzere 5 tanedir. -
Aritmetik operatörlerin geriye dönüş değerleri vardır.
-
Aritmetik operatörler iki sayısal değer üzerinde işlem yapan operatörler oldukları için işlem neticesinde geriye 'uygun türde' sonuç dönerler.
-
int sonuc = 3 + 5;
+
operatörü diyor ki : Soluma ve sağıma vermiş olduğun ikiint
tür üzerinde ben bir işlem yaparım. Bu işlem neticesinde sana sonucu daint
döndürürüm. -
int sonuc2 = x * y;
*
operatörü diyor ki : Soluma ve sağıma vermiş olduğun değerler üzerinde ben bir işlem yaparım kombinasyon uygularım. Bu işlem neticesinde sana sonucu daint
döndürürüm. -
Aritmetik operatörlerde işlem yaparken hangi türlerde çalışıyorsanız o türlerde sonuç döner.
-
Aynı türde olan sayısal türler üzerinde işlem yaparken sonuç türü aynı olacaktır.
Aritmetik Operatörler
// +
// -
// *
// /
// %
Aritmetik Operatörler Geriye Dönüş Değeri
//Aritmetik operatörler iki sayısal değer üzerinde işlem yapan operatörler oldukları için işlem neticesinde geriye 'uygun türde' sonuç dönerler.
int sonuc = 3 + 5;
int x = 3,
y = 5;
// int y = 5;
int sonuc2 = x * y;
//Aynı türde olan sayısal türler üzerinde işlem yaparken sonuç türü aynı olacaktır.
double s1 = 123;
double s2 = 321;
double sonuc3 = s1 + s2;
decimal sayi1 = 123123;
decimal sayi2 = 3214532;
decimal sonuc4 = sayi1 % sayi2;
-
İki farklı türde sayısal değerler üzerinde yapılan aritmetik işlem neticesinde sonuç büyük olan türde dönecektir.
-
Elinde diyelim ki
int
değer var ve birdeshort
değer var yapmış olduğun işlem netice olarakshort
'un kapsam alanını geçebilir. O yüzden aritmetik işlemlerde sayısal türler birbirinden farklıysa varsayılan olarak büyük olan baz alınır. Yani sonuç olarak büyük olan türde sonuç dönecektir.
- Aritmetik operatörler kapsam alanı küçük olan türü kapsam alanı büyük olan türe bilinçsiz bir şekilde dönüştürülerek o şekilde hesap yapılır... O yüzden sonuç büyük olan türde elde edilecektir/edilmektedir.
(int) * (double)
//İki farklı türde sayısal değerler üzerinde yapılan aritmetik işlem neticesinde sonuç büyük olan türde dönecektir.
int s1 = 10;
double s2 = 5;
double sonuc = s1 + s2;
- Burada senin verdiğin
int
'i bakmış ikisine de demiş ki ulandouble
int
den daha büyük o zaman benint
i dönüştürüyorum veint
olan değeridouble
mış gibi algılıyorum yani orada bilinçsiz tür dönüşümü yapıyorum sonucu dadouble
döndürüyorum.
-
byte
ile herhangi bir sayısal tür örneğinint
ile yapılan sayısal işlemi ele aldığımızda kapsam alanı büyük olan yaniint
'de sonuç dönmesini bekliyoruz. -
Genel prensibimiz iki farklı türdeki sayısal değerler kendi aralarında aritmetik işleme tabi tutuluyorsa sonuç kapsam alanı büyük olanın türünde dönecektir.
(byte) * (int) = ?
int s1 = 3;
byte s2 = 123;
int sonuc = s1 - s2;
-
Aynı türlerdeki sayısal değerler üzerinde yapılan herhangi bir aritmetik işlem neticesinde sonuç aynı türde döner.
-
Amma velakin iki
byte
arasında yapılan sayısal/aritmetik işlemlerde sonuç her daimint
olarak dönecektir. -
Normalde iki aynı türdedeki sayısal değer üzerinde yapılan aritmetik işlem neticesinde sonuç aynı türde dönecekken, bu iki değer
byte
ise sonuç her daimint
dönecektir. Böyle kabul edilmiştir... İstisnadır...
(byte) * (byte) = ? (İstisna! - Mülakat!!!)
byte s1 = 10;
byte s2 = 5;
int deger = s1-s2;
System.Console.WriteLine(deger);
-
Matematiksel kuralların hepsi programlama da geçerlidir.
-
İşlem öncesi dediğimiz kanunlar kurallar parantez mevzuları aynen birebir yazılımda da geçerli olacaktır.
-
Matematik prensipleri programlama da %100 geçerlidir.
-
İki sayısal değer arasında büyüklük, küçüklük ve eşitlik durumuna göre karşılaştırma yapan ve sonuç dönen operatörlerdir.
-
Ayriyeten metinsel değerlerde de eşitlik durumunu kontrol edebiliriz.
-
Karşılaştırma operatörlerimiz;
<
(küçüklük) Soldaki ifade sağdakinden küçük mü?x < y
>
(büyüklük) Soldaki ifade sağdakinden büyük mü?x > y
<=
(küçük veya eşitlik) Soldaki ifade sağdakinden küçük mü veya eşit mi?x <= y
>=
(büyük veya eşitlik) Soldaki ifade sağdakinden büyük mü veya eşit mi?x >= y
==
(eşitlik) Soldaki ifade sağdakine eşit mi?x == y
-
Karşılaştırma operatörleri sayısal değerler arasında yahut metinsel ifadelerde de iki değer birbirleriyle karşılaştırılıyorsa geriye
boolean
türde yanitrue
ya dafalse
döndürecektir. -
Karşılaştırma operatörleri geriye her daim bool türde bir değer döndürecektir.
Karşılaştırma Operatörlerinin Geriye Dönüş Değerleri
//Karşılaştırma operatörleri geriye her daim bool türde bir değer döndürecektir.
int i1 = 123;
int i2 = 321;
bool sonuc = i1 > i2;
-
Yazılım sürecinde kod yazarken algoritmalar oluştururken genellikle çok kullandığımız o algoritmadaki mantık boyutlarında olmazsa olmaz diyeceğimiz operasyonlarımız operatörlerimiz mantık operatörleridir.
-
Belirli şartların durumunu değerlendirip kendine göre sonuç döndüren operatörlerdir. Ve, Veya, Ya da operatörleridir.
-
Günlük hayatta beşeri hayatta biz bunları kullanıyoruz Yani kullanış dilimizde var. Birilerinden bişey isterken birilerine talimat verirken ya da aldığımız emirleri yerine getirirken oradaki Ve, Ya da Veya ya dikkat ediyoruz.
-
Tüm şartları değerlendirip kendine göre sonuç döndüren operatörlerdir.
-
Ve veya'dan farklı kendine göre farklı şekilde değerlendirir. Veya bambaşka durumları değerlendirir.
-
ve(
&&
) operatörü, tümmm şartların yerine getirilmiş olmasını isterrrr.- Anne bana mutfaktan patates ve köfte getir dedin. Şimdi annen sana patates ve köfteyi getirirse ve mantığına göre hem patatesin gelmesi gerekecek hem de köftenin gelmesi gerekecek Eğer ki bu ikisinden biri ya da ikisi de gelmezse sen razı olmazsın.
- İkiside geldiği sürece iki koşul/şart doğrulandığı yerine getirildiği sürece ve doğrulanmış olacaktır.
-
veya(
||
) operatörü, şartlardan en az bir tanesinin yerine getirilmiş olması yeterlidir.- Anne bana mutfaktan patates veya köfte getirir misin dedin. Şimdi annen sana ya patatesi getirebilir ya da köfteyi getirebilir sen razı olursun tamahkarsın yani sıkıntı yok patatesi de getirebilir, ikisini de getirebilir, köfteyi de getirebilir, sıkıntı yok ama en az bir tanesinin gelmesine razısın.
- İki şarttan en az bir tanesinin sağlanması gerekmektedir.
-
yada(
^
) operatörü şartlardan kesinlike bir tanesinin yerine getirilmesini isterr...- Diyelim ki sınıftayız yan sınıfla kavgaya gideceğiz. Sen veya sen benle geleceksin dediğimde ikisinden biride gelebilir olur ikiside gelebilir olur ama ikisi de gelmezse olmaz. Veya kullanıyorsam şartlardan birinin gelmesi yeterlidir. Yada da ise sen ya da sen geleceksin dediğim zaman ya sen geleceksin ya da sen geleceksin ikiniz aynı anda gelemezsiniz ikinizin gelmeme durumu da olmaz ikinizin aynı anda gelme durumu da olmaz.
- En fazla bir tanesinin ve en az da bir tanesinin yerine getirilmesini ister.
-
Küçük bir çocuk var yanınızda parayı verdiniz dediniz ki al yeğenim bana parliament ve marlbora al dediniz.
- Gitti parliament getirdi marlbora getirmedi OLMADI
- Gitti marlbora getirdi parliament getirmedi OLMADI
- Gitti ikisini de getirmedi OLMADI
- Gitti marlbora getirdi parliament getirdi OLDU
-
Küçük bir çocuk var yanınızda parayı verdiniz dediniz ki al yeğenim bana parliament veya marlbora al dediniz.
- Gitti parliament getirdi marlbora getirmedi OLDU
- Gitti marlbora getirdi parliament getirmedi OLDU
- Gitti marlbora getirdi parliament getirdi OLDU
- Gitti ikisini de getirmedi OLMADI
-
Küçük bir çocuk var yanınızda parayı verdiniz dediniz ki al yeğenim bana parliament ya da marlbora al dediniz.
- Gitti parliament getirdi marlbora getirmedi OLDU
- Gitti marlbora getirdi parliament getirmedi OLDU
- Gitti marlbora getirdi parliament getirdi OLMADI
- Gitti ikisini de getirmedi OLMADI
Mantıksal Operatörler
// Tüm şartları değerlendirip, kendine göre sonuç döndüren operatörlerdir.
ve &&
//ve(&&) operatörü, tümmm şartların yerine getirilmiş olmasını isterrrr.
//Patates ve Köfte
// true && true
veya ||
//veya(||) operatörü, şartlardan en az bir tanesinin yerine getirilmiş olması yeterlidir.
//Patates veya Köfte
// true/false || false/true
yada ^
//ya da ^ operatörü şarlardan kesinlikle birtanesinin yerine getirilmesini isterrr...
//true ^ false veyahut false ^ true
-
Mantıksal operatörler iki tane değer arasında mantıksal ilişkiyi değerlendirir.
-
Salt veri türlerinde bu operatörleri kullanamayız. Ve veya ile kullanacağın durumlar mantıksal bir spesifikte olmalıdır.
-
Eğer ki mantıksal operatörleri kullanıyorsak kullancağımız değerler mantıksal değerler olması lazım.
-
Mantıksal operatörler, mantıksal değerler üzerinde kullanılır...
-
Diyelim ki sen patates ve köfte durumunu mantıksal olarak değerlendiriyorsun. Sen bunları salt değer olarak mantıksal olarak kullanamazsın en fazla mantıksal olarak verebilirsin. Çünkü elindeki mantıksal operatör patatesin ya geldiğiyle ilgilenir ya da gelmediğiyle ilgilenir. İşte böyle bir durumda patates veya köfte, patates ve köfte, patates ya da köfte durumlarını incelerken biz
boolean
durumları incelemiş oluyoruz. Yani uzun lafın kısası mantıksal operatörleri kullanacağınız değerlerin kesinlikleboolean
olması gerekmektedir -
Mantıksal operatörler geriye bool/mantıksal sonuçlar dönerler...
-
Özet olarak her iki değer de boolean türden değerler olmalıdır. Başka bir şansınız yoktur.
Mantıksal Operatörlerin Kullanım Mantığı
bool patetes = true, kofte = false;
bool sonuc1 = patetes && kofte;
bool sonuc2 = patetes || kofte;
bool sonuc3 = patetes ^ kofte;
System.Console.WriteLine(sonuc1);
System.Console.WriteLine(sonuc2);
System.Console.WriteLine(sonuc3);
//Mantıksal operatörler geriye bool/mantıksal sonuçlar dönerler...
#endregion
-
Mantıksal Operatörler
boolean
türdeki değerler üzerinde işlem yaparlar. Nasıl ki aritmetik operatörler sayısal türler üzerinde işlem yapıyorsa nasıl ki karşılaştırma operatörleri genellikle sayısal türler üzerinde bir karşılaştırma yapıyorsa benzer mantıkla Mantıksal Operatörlerde sadeceboolean
türler üzerinde işlem yaparlar. -
Gidipte sen x, y, z tür üzerindeki değerlerde mantıksal operatörleri kullanıp işlem yapamazsın.
-
ve (
&&
)true && true;
truetrue && false;
falsefalse && true;
falsefalse && false;
false
-
veya (
||
)true || true;
true || false;
false || true;
false || false;
-
ve (
^
)true ^ true;
true ^ false;
false ^ true;
false ^ false;
#region Mantıksal Operatörlerin Geriye Dönüş Değeri
//ve &&
System.Console.WriteLine(true && true); //true
System.Console.WriteLine(true && false); //false
System.Console.WriteLine(false && true); //false
System.Console.WriteLine(false && false);//false
//veya ||
System.Console.WriteLine(true || true); //true
System.Console.WriteLine(true || false); //true
System.Console.WriteLine(false || true); //true
System.Console.WriteLine(false || false);//false
//yada ^
System.Console.WriteLine(true ^ true); //false
System.Console.WriteLine(true ^ false); //true
System.Console.WriteLine(false ^ true); //true
System.Console.WriteLine(false ^ false);//false
//SHIFT + 3 + SPACE
Örnek
System.Console.WriteLine(((true && true) || false && ((true ^ false) && false) || true));//true
-
Aslında birer aritmetik operatörlerdir.
-
Arttırma ve azaltma operatörleri bir sayıyı 1 arttırır ya da bir azaltır.
-
Sayısal olarak elimideki bir n sayısı ya 1 arttıracaktır ya da bir azaltacaktır
n+1
^n-1
-
Bu operatörlerin var olmasının sebebi biz yazılım süreçlerinde döngü dediğimiz yapılanmaları sıkça kullanırız. Döngülerde kombinasyonlar vardır. O kombinasyon geçerli olduğu sürece döngü dönmeye devam edecektir. İşte oradaki kombinasyonda genellikle şunu yaparız. Mesela 1'den 100'e kadar bir kombinasyon oluşturursun elinde bir değişken olur bunu 1 arttırırsın. Oradaki kombinasyon 1'den 100'e kadar artarken sen arada 100 kere işlem yapmış olursun. Kombinasyona göre işlem sayını belirliyorsun. Programlama da birşeyi şu kadar yap diye bişey yok. Orada bir kombinasyon oluşturman lazım matematiksel formül koyman lazım. İşte böyle durumlarda genellikle biz elimizdeki sayıları 1 arttırırız.
-
Programlama da şöyle bakarsanız eldeki sayıları 1 arttırmak 1 azaltmak aşırı derece de yüksek oranda kullanılan operasyonlardır. Bu operasyonlara özel operatörler geliştirilmiştir.
- Arttırma operatörü
++
- Azaltma operatörü
--
- Arttırma operatörü
-
int i = 10;
i++;
Öncelikle i değeri döndürür sonrasında ise i değerini 1 arttırır. İlk bellektekini getir sonra bellektekini 1 arttır.++i;
Öncelikle i değeri 1 arttırılır ardından i değerini döndürür. İlk bellektekini arttır sonra bellektekini getir.Console.WriteLine(i++)
Önce i'yi döndürecek sonra arttıracak yani 10 değerini ekrana yazacaktır. Ekranda 11 olsa da bellekte 11 olacaktır.Console.WriteLine(++i)
Önce i'yi arttıracak sonra i yi döndürecektir yani 11 değerini ekrana yazacaktır. Ekrandaki değerle bellekteki değer aynıdır.i++
Arka plandai = i + 1
şeklinde çalışıri--
Arka plandai = i - 1
şeklinde çalışır
-
Arttırma azaltma operatörleri spesifik açıdan çok hızlı hareket etmemizi sağlayan operatörlerdir.
Arttırma Azaltma Operatörleri
Örnek 1
// ++
int i = 5;
i++;
System.Console.WriteLine(i);
++i;
System.Console.WriteLine(i++); // Çıktı : 5 | Bellek : 6
System.Console.WriteLine(++i); // Çıktı : 7 | Bellek : 7
// --
Örnek 2
int a = 5;
int b = a++;
System.Console.WriteLine(a);
System.Console.WriteLine(b);
Örnek 3
int i1 = 5;
int i2 = ++i1;
int i3 = i1;
i2 = ++i2;
//++i2;
System.Console.WriteLine(i1);
System.Console.WriteLine(i2);
System.Console.WriteLine(i3);
-
Birer aritmetik operatörlerdir.
-
Pratik şekilde aritmetik işlem yapmamızı sağlar.
-
Matematiksel işlemleri daha hızlı daha praitk yapmamızı sağlarlar.
-
Genellikle kullanırız.
- Çünkü yazılımcılar üşengeçtir. Tembelizdir. Yani tembel derken deli divane çalışırsın amma velakin yazacağın kodun mümkün mertebe daha pratik ve daha okunabilirlik açısından düşünebilirsiniz ama daha kısa kod yazmaktır amacımız.
- Bonkör değilizdir. Lüzumsuz yera herhangi bir alanda tahsis edilmesini istemeyiz. Ya da bellekte kullanmadığım değerin bulunması beni rahatsız eder.
-
Arttırma azaltma operatörleri bir sayının değerini sadece ve sadece 1 arttırmak ya da 1 azaltmak için kullandığımız operatörlerdi. Bunun dışında bir sayısal ifadeye 1 den fazla değer eklemek istiyorsam mesela 3 değerini burada arttırma azaltma operatörlerini kullanamayız işte burada devreye üzerine ekleme/yığma operatörleri girmektedir. Sadece ekleme çıkarma değil tüm aritmetik operasyonları (toplama, çıkarma, çarpma, bölme, mod alma) gerçekleştirebiliriz.
i = i + 3;
Bunu kullanabiliriz. ancak bunun yerine;i+=3;
arka planda bu şekilde çalışır :i = i + 3;
i-=3;
arka planda bu şekilde çalışır :i = i - 3;
i*=3;
arka planda bu şekilde çalışır :i = i * 3;
i/=3;
arka planda bu şekilde çalışır :i = i / 3;
i%=3;
arka planda bu şekilde çalışır :i = i % 3;
Üzerine Ekleme Yığma Operatörleri
// +=
// -=
// *=
// /=
// %=
-
Metinsel ifadeler
+
operatörüyle yanyana birleştirilebilirler. Normalde sayısal değerler+
operatörüyle aritmetik işleme tabi tutulurlar ama elindeki değerler eğer ki metinselse bu metinsel değerlerde bu sefer metinsel birleştirme operasyonuna tabi tutulurlar.int a = 5, b = 3; System.Console.WriteLine(a + b);
Aritmetik operasyon yapılır sayılar toplanır. Çıktı : 8string c = "Ahmet", d = "Mehmet"; System.Console.WriteLine(c + d);
Burada ise metinsel birleştirme yapılır Çıktı : AhmetMehmet
-
İşin içinde metin varsa eğer buradaki toplama aritmetik bir toplama değil yanyana birleştirme olacaktır.
int e = 5; string f = "abc"; Console.WriteLine(e + f)
Burada yine metinsel birleştirme yapılır Çıktı : 5abc- Burada
int
değer object'e dönüştürülür. Burada da bilinçsiz bir tür dönüşümü vardır aslında. Boxing yapılmıştır. Boxing esasında bir yandan da bilinçsiz tür dönüşümüne benzer. - Elimizde bulunan
int
değeriobject
'e çevirmiş yani boxing yapmış.string
bize diyor ki sen elindeki herhangi birstring
ifade ile birobject
değeri toplarsan/+
operatörüne tabi tutarsan sonuç yinestring
olacaktır.
- Burada
-
Tür dönüşümlerinde herhangi bir değeri
string
'e dönüştürebilmek için .ToString fonksiyonunu kullanıyorduk. Ayriyetten ilgili türüstring
'e dönüştürebilmek içinstring
bir ifade ile+
operatörüne tabi tutulması yeterli olacaktır. -
string
ile herhangi bir türdeki ifadeleri topladığınızda yani+
operatörüne tabi tuttuğunuzda sonuçstring
dönecektir ve yanyana birleştirme yapılacaktır.
-
Metinsel ifadelerde
+=
operatörünü de kullanabilmekteyiz. Yani metinsel ifadeler birbilerinin üstlerine yığılabilmektedir. -
string g = "ahmet"; string h = "mehmet"; g+=h;
Bu durumda ilk olarak g değişkenine h değişkenini ekleyecek ve bu değeri g değişkenine atayacaktır. Yani buradaki değer g'ye yığılmış olacaktır. -
==
operatörü ile metinsel ifadeleri kıyaslayabilir yani karşılaştırabiliriz. Eşitlik durumunu karşılaştırabiliyoruz. -
string i ="Ahmet";string j = "Mehmet"; i == j;
Bu durumda i ve j içerik/değer olarak birbirlerinin aynısı mı?==
operatörü ikistring
değeri algılayacak ve sonuç olarak boolean dönecektir.
-
string
değerlerde karşılaştırma operatörlerini direkt kullanamayız. Çünküstring
ifadeler bir matematiksel aritmetik işlem yapabileceğimiz bir sayısal değer değildir. Dolayısıyla büyüklük küçüklük sayısal değerlere göre olacaktır. Biz insanlar şu bardak öbür bardaktan büyüktür diyebiliyoruz. Ama gözümüzün gördüğü o niceliği hesaplayabildiğinden dolayı bu yorumda bulunabiliyorsun. Ama sen yazılımda iki metinsel ifadeyi birbirleriyle büyüklük küçüklük olarak neye göre ifade etmek istersin örneğin karakter sayısına göre değil mi? İşte burada onu da bildirmek zorundayız.string i ="Ahmet";string j = "Mehmet"; i.Length > j.Length;
Bize mevcudiyette bulunan değerin karakter sayısını döndürür.Length
fonksiyonu
-
Demek ki elindeki metinsel değerlerin birinin diğerinden büyük mü küçük mü olduğunu anlayabilmen için bunların Length'lerini yazdırıp o şekilde kıyaslamaya tabi tutabilirsin. Aksi taktirde elindeki metinlerin türü
string
olduğu sürece davranışsal olarak bunları karşılaştırabilmen mümkün değildir. Çünkü tür karşılaştırmaya uygun değildir. -
Elimizdeki metinsel ifadeleri bizler karşılaştırma da sadece eşitlik durumunu karşılaştırabiliyoruz değersel anlamda onun dışında iki metinsel ifadeyi birbirinden büyük mü küçük mü diye karşılaştırma yapamamaktayız.
-
Eşit değil mi operatörünü(
!=
) de kullanabiliyoruz.
-
Programlama da olumsuzluk anlamına gelir yani tersi/değili anlamına gelecektir.
-
Mantıksal yapılarda olumsuzluk ifade eder.
true
ya dafalse
!true = false
!false = true
-
!
operatörü bizlere yine olumsuzluk mahiyetinde eşit değillik durumunu da bizlere bildirmektedir.==
-> Eşitlik!=
-> Eşit Değillik
-
!
operatörü gördüğümüz her yerde bir olumsuzluk aklımıza gelmelidir. -
!
operatörü Null References(C# 8.0) özelliğini de yerine getirmektedir.string
ifadelerdenull
durumlarında belirli kontroller yapmamızı sağlar.
-
!
operatörü!=
dışında sade ve sadece mantıksal değerlerin yanında kullanılabilir...!3
,!"Ahmet"
gibi değerlerde kullanamayız.!true
burada kullanabiliriz.- Mantıksallarda sadece tersine bir olumsuzluk alabiliriz. Doğruyu yanlış yanlışı doğru yapmış oluruz.
-
Diyelim ki senin elinde bir veri var ve bu veri yani bri işlem yapıyorsun yapmış olduğun bu işlem
bool
döndüğünü düşünürsek dönen sonucun tersini alabiliriz. -
Manevratik bir operatördür.
-
Örneğin Elimizde bir kullanıcının satış yapıp yapmadığına dair verileri çekeceğiz çektiğimiz veriler boş mu dolu mu bunun kontrolünü yaparken
!
operatörü ile manevralar sağlayabiliyoruz.
System.Console.WriteLine(!true);
int i = 3;
int i2 = 5;
System.Console.WriteLine(i != i2);
System.Console.WriteLine(!(i != i2));
-
Kalıpsal bir operatördür. Çok fazla kullanırız.
-
Şarta bağlı değer döndüren bir operatördür.
-
Akış kontrol şemalarında duruma göre farklı kodları çalıştırmak nasıl gerçekleştirilir ileride bunu inceleyeceğiz.
-
Duruma göre farklı değeri döndürebilmek için normalde if ya da switch yapılanmalarını kullanabiliyoruz ama bir değer döndürmek için bu kadar kalıba gerek yoktur. İşte ternary operatörü kendi kalıbında şarta göre duruma göre farklı değerleri döndürmemizi sağlayan bir operatördür.
-
Bir değişkene/metoda/property'e değer atarken, eğer ki bu değer şarta göre fark edecekse satır bazlı/tek satırda bu şart kontrolünü yaparak duruma göre değeri döndürmemizi sağlayan bir kalıpsal operatördür.
- Örneğin eğer hava yağmurluysa şemsiye al yok eğer değilse şemsiyeyi alma.
-
Diyelim ki biz evlilere ve bekarlara kampanya yapan bir şirkette çalıştığımızı varsayalım Eğer ki evliyse 'Evlilere Kampanya' bekarsa 'Bekarlara Kampanya' sisteminden yararlanacak.
bool medeniHal;
string mesaj;
-
Ternary operatörünü kullanmak için;
.......Şart/Durum.......... ? .......Birinci Durum........ : .......İkinci Durum........
- Şartta geriye bir değer döndüren, karşılaştırma yahut mantıksal işlem neticesinde bool sonuc...
- Örneğin medeniHal
true
'mu 3 5'ten büyük mü? hava yağmurlu mu? - Eğer şart
true
ise Birinci Durum yok eğer dşartfalse
ise ikinci durum döndürülecektir.
- Örneğin medeniHal
- Ve biz bureadan dönen değeri değişkenimizle karşılarız.
- Geriye döndüreceğimiz değer iki durumda da aynı türde olmalıdır.
- Geriye dönen değeri karşılayacağın bir tane türün/değişkenin/alanın olacak. eğer ki birinci durum
string
ikinci durumint
olursa buradaki karşılayan değişken dönen değere göre şeklini belirleyemeyecektir. Dönecek değerler ikisi de aynı türde olmalıdır. - Dönen değerler farklı olabilir ama aynı türde olmalıdır. Dolayısıyla aynı türde olacakki sen ortak türdeki bir değişkenle karşılayacaksın
- Şartta geriye bir değer döndüren, karşılaştırma yahut mantıksal işlem neticesinde bool sonuc...
-
C# 9.0 ile Polimorfizm kurallarına göre birbirlerinden türeyen değerlerde artık desteklenmektedir.
-
Satır bazlı şarta bağlı değerleri döndürebildik.
//Bir değişkene/metoda/property'e değer atarken, eğer ki bu değer şarta göre fark edecekse satır bazlı/tek satırda bu şart kontrolünü yaparak duruma göre değeri döndürmemizi sağlayan bir kalıpsal operatördür.
bool medeniHal = true;
string mesaj = medeniHal == true ? "Evlilere Kampanya...." : "Bekarlara Kampanya....";
System.Console.WriteLine(mesaj);
-
Bazen kontrol etmemiz gereken durumlar birden fazla olabilir. Böyle durumda aynı kalıp üzerinde semantik bir ayar çekmemiz gerekebilir.
-
Birden fazla Condition
:
operatöründen sonra tekrardan?
operatörünü kullanarak çok rahat bir şekilde oluşturulabilir. İstediğimiz kadar kullanabiliriz.string sonuc = yas < 25 ? "A" : (yas == 25 ? "B" : "C");
int yas = 25;
//Yaşı 25'den büyük olanlara A, 25 olanlara B ve 25'den büyük olanlara C değerini döndüren ternary operatörünü oluşturalım
string sonuc = yas < 25 ? "A" : (yas == 25 ? "B" : "C");
System.Console.WriteLine(sonuc);
//Kullanıcı tarafından girilen sayının aşağıdaki önergelere göre hesabını gerçekleştiren kodu geliştiriniz.
// sayı < 3 => sayı * 5
// sayı > 3 && sayı < 9 => sayı * 3
// sayı >= 9 && sayı % 2 == 0 => sayı * 10
// sayı % 2 == 1 => sayı
// Hiçbiri değilse => -1
System.Console.Write("Sayı Giriniz : ");
// string sayi = Console.ReadLine();
// int _sayi = int.Parse(sayi);
int sayi = int.Parse(Console.ReadLine());// Console.ReadLine() => Kullanıcının girdiği değeri string olarak getiren/yakalayan bir komuttur. Console.ReadLine komutu kullanicinin console'dan bir değer girmesini bekler.
// int sonuc = sayi < 3 ? sayi * 5 : (sayi > 3 && sayi < 9 ? sayi * 3 : (sayi >= 9 && sayi % 2 == 0 ? sayi * 10 : sayi));
int sonuc = sayi < 3 ? sayi * 5 : (sayi > 3 && sayi < 9 ? sayi * 3 : (sayi >= 9 && sayi % 2 == 0 ? sayi * 10 : sayi % 2 == 1 ? sayi : -1));
System.Console.WriteLine("Sonuç : " + sonuc);
Console.ReadLine()
=> Kullanıcının girdiği değeri string olarak getiren/yakalayan bir komuttur.
Console.ReadLine()
komutu kullanicinin console'dan bir değer girmesini bekler.
//Hava durumunu tutan string değişkenin değerine göre aşağıdaki önergeleri uygulayan programı yazınız.
//"Yağmurlu" => "Şemsiye almalısın"
//"Güneşli" => "Bol bol d vitamini alman dileğiyle..."
//"Kapalı" => "Yağmur Yağabilir"
string havaDurumu = "";
System.Console.WriteLine(havaDurumu == "Yağmurlu" ? "Şemsiye almalısın" : (havaDurumu == "Güneşli" ? "Bol bol d vitamini alman dileğiyle..." : "Yağmur Yağabilir"));
-
En sonuncu önerge de şartını bildirmek zorunda değiliz. Zaten en sona geldiğimizde başka ihtimal yok.
-
Bize önerge de verilen duruma göre en son farklı bir olmamazlık gibi yani hiçbir ihtimalin olmayacağı durumu vermezse son önergeyi kontrol etmemize gerek yoktur.
-
Algoritmalar da bu böyledir. 3 tane şart verdiyse 3. zaten diğer ikisinin olmadığı durumda geçerli olan şarttır. Yok eğer 4 tane şart varsa artık bu 4.'sü de hiçbirinin anlamına geliyorsa hiçbirinin olmadığı durumlarda geçerliyse 3.'yü de kontrol edersin eğer o da değilse hiçbiri anlamına gelen sonuncu şartın değerini uygularsın.
-
Algoritma yazarken aman aman bir eğitime ihtiyacınız yoktur. Algoritma da her daim analitik düşünmeniz lazım. Eğer oraya analitiği yerleştirirseniz zaten takır takır gelecektir.
-
Ternary operatörü gelişmiş mimarilerde tek seferlik değer atamayı sağlayan ve şartları hızlıca kontrol etmemizi sağlayan operatördür.
-
Bir yazılımcı olarak bunu kullanmak/okumak zahmetli şeklinde ön yargılarla kendini doldurma. Kompleks olup olmaması mesele değil. Burada işine yarayıp yaramaması efektif olup olmaması meseledir. Bazen If blokları ternary operatörünün kullanıldığı yerlerden daha kompleks bir yapıya bürünebiliyor.
-
Assign Operatörü(
=
) bir değişkene/alana/field'a/property'e değer atamamızı sağlayan bir operatördür. -
Atama assign operatörü olarak geçmektedir. Herhangi bir elimizdeki değişkene değer atarken sol taraftaki değişken kısmına sağ taraftaki değeri atamamızı sağlayan bir operatördür.
- Atama operatörünün sağı ve solu bizim için önem arz etmektedir.
- Eğer ki bir değişkeni atama operatörünün solunda çağırıyorsak burada değişkenin kendi gelir.
- Eğer ki bir değişken atama operatörünün sağında çağırıyorsak burada değişkenin değeri gelir.
- Assign operatörünün
=
kullanıldığı operasyonlarda değişken sağda çağırılıyorsa o değişkenin değeri yok eğer solda çağrılıyorsa değişkenin kendisi gelecektir ki gelen değeri kendisine o değişkene atayabilsin.
- İleride Referans türlü değişkenlerde atama operatörünün sorumluluğu değişip referans etme operatörü olduğunu konuşacağız...
int a = 5;
-
Elimizdeki değerler/değerlerin türleri alt elemanlara sahiptir. Bu alt elemanlara Member Access/Üye Erişim(
.
) operatörü ile erişim sağlayabiliriz. -
int i= 5;
i.
dediğimiz andaint
üzerinden erişebildiğimiz elemanlar karşımıza çıkar. İşte biz bu elemanlara member'lar deriz.
-
İleride Object Oriented Programming'te kendi
class
'larımızı oluşturacağız. Örneğin Öğrenci diye birclass
oluşturacaksın. Öğrencini adı, Öğrencinin soyadı bunlara property diyeceğiz. Bu property'lerde öğrenciclass
ının elemanları olacak. Öğrencinin notunu hesaplayan bir metot koyacaksın. O da bir eleman/member olacak. -
Yani eleman dediğimiz olay bir türün altındaki kodlardır. Altında erişebildiğiniz Property ya da metotlardır.
-
Bir kodun devamında çağırabildiğin bütün kodlar o kodun o türün memberlarıdır.
-
Member Access Operatörü(
.
) elimizdeki kodun değerin türüne uygun memberlara erişmemizi sağlayan bir operatördür. Örneğin;i.ToString();
int
türünün member'ı olanToString()
'e.
operatörü ile erişebiliyorum.ToString()
metodu değeristring
e çevirir.ToString()
ten sonra da bizler.
operatörü ile erişimlerimize devam edebiliriz. Ta ki elimdeki değerin değer olmayacağı duruma kadar. Ya da işim bitene kadar.
-
Bir kod yazdın onun altındaki türlerden birine erişmeni sağlayan
.
operatörüdür. Bununda altındaki türlerden birine erişmeni sağlayan.
operatörüdür. -
Yani devamını getireceksen bir alt member'ı çağıracaksan biz member access
.
operatörünü kullanmaktayız.
-
Member access, elimizdeki bir değerin türüne uygun elemanlarını/fonksiyonlarını/metotlarını/property'lerini/fieldlarını erişmemizi/çalıştırmamızı/çağırmamızı sağlayan bir operatördür.
-
Member access kodun devamını getirir.
-
Sen eğer yazdığın kodunda devamı gelecekse member access'le getirebiliyorsun. .bilmemne.bilmemne.bilmemne şeklinde. Burada şöyle düşünebilirsin bir tane çaydanlık var işte .SuKoy.SuyuIsıt.ÇayKoy.ÇayıDemle gibi Burada istediğin nitelikleri elemanları çağırabilirsin. Çağırıp çağırıp üzerinde işlemler gerçekleştirebilirsin.
-
.
operatörünü gördüğün zaman o değerin altındaki/içerisinde bulunan bir eleman çağırılmış.
//Member access, elimizdeki bir değerin türüne uygun elemanlarını/fonksiyonlarını/metotlarını/property'lerini/fieldlarını erişmemizi/çalıştırmamızı/çağırmamızı sağlayan bir operatördür.
//Member access kodun devamını getirir.
int i = 5;
System.Console.WriteLine(i.ToString());
-
Yapısal olarak genellikle dönüşümlerde kullandığımız bir operatördür. Birden fazla sorumluluk üstlenmektedir.
-
3 farklı noktada cast operatörünü (
()
) inceledik.- Boxing -> Unboxing => Boxing yapılan değeri Unboxing yaparken kullandık.
- Elimizdeki
object
türdeki değişkene herhangi bir türdeki değeri atadığımızda boxing yapmış oluruz. İşte biz bu değeri kendi türünde elde etmek istiyorsak Cast operatörünü çağırıp kendi türünü belirterek elde edebiliriz.object x = 123;
intx2 = (int)x;
- Elimizdeki
- Bilinçli Tür Dönmüşümü yaparken kullanıyorduk.
- Elimizdeki bir sayısal türü kendisinden daha az değer aralığına sahip bir başka türe dönüştürmektir burada bilinçli bir şekilde kendi irademizle karar vermeliyiz. İşte biz burada değer aralığı az olan değişkene değer aralığı fazla olan değişkeni direkt atama yapamayız. Çünkü büyük değer aralığında olanın değeri küçük değer aralığına sığmayabilir. Veri kaybı söz konusu olabilir işte buradaki sorumluluğu sen üstleneceksin. Ve cast operatöründen faydalanacaksın.
int a = 5;
short b = (short)a;
- Elimizdeki bir sayısal türü kendisinden daha az değer aralığına sahip bir başka türe dönüştürmektir burada bilinçli bir şekilde kendi irademizle karar vermeliyiz. İşte biz burada değer aralığı az olan değişkene değer aralığı fazla olan değişkeni direkt atama yapamayız. Çünkü büyük değer aralığında olanın değeri küçük değer aralığına sığmayabilir. Veri kaybı söz konusu olabilir işte buradaki sorumluluğu sen üstleneceksin. Ve cast operatöründen faydalanacaksın.
- Elimizdeki bir
char
'ıint
e ya da elimizdekiint
ichar
a dönüşütürürken burada ASCII kaynak kodları üzerinden dönüşümü sağlarken kullanıyorduk.- Yani sen
int
'ichar
a cast edersen sana ASCII'ye karşılık gelen karakteri verecektir. - Benzer mantıkla tam tersini yaptığında yani
char
ıint
e cast ettiğinde burada karaktere karşılık gelen ASCII kaynak kodunu döndürecektir.int ascii = 93;
char c = (char)ascii;
- Yani sen
- Boxing -> Unboxing => Boxing yapılan değeri Unboxing yaparken kullandık.
-
Cast operatörünün(
()
) fıtratı elimizde bir değer var başında cast operatörünü biz çağırıyorduk. Cast operatörünün içerisinde vermiş olduğumuz tür neyse ona uygun dönüşümü sağlar. -
İleride polimorfizm durumunda base class referansıyla işaretlenen bir nesneyi kendi türünde de elde edebilmemizi sağlamaktadır.
-
Base class dediğimiz bir ata tür olacak onun kendisinden türeyen başka bir nesneyi referans ettiği zaman onu kendi türünde elde etmek. Yani bir nevi Unboxing'i kendi nesnelerimiz üzerinde nasıl yaptığımızı inceleyeceğiz.
//Genellikle tür dönüşümlerine kullanılan bir operatördür.
//1. Boxing -> Unboxing
object x = 1;
int x2 = (int)x;
//2. Bilinçli Tür Dönüşümü
int a = 5;
short b = (short)a;
//3. char -> int | int -> char (ASCII)
int ascii = 93;
char c = (char)ascii;
char d = 'd';
int asciiNumber = (int)d;
//İleride polimorfizm durumunda base class referansıyla işaretlenen bir nesneyi kendi türünde de elde edebilmemizi sağlamaktadır.
-
sizeof
operatörü metinsel bir keyworddür. -
Verilen türün bellekte kaç byte'lık yer kapladığını
int
olarak geriye döndürür -
sizeof(type)
dediğimizde parantez içinde verdiğimiz türün bellekte kaç byte'lık yer kapladığını bize bildirir.
//Verilen türün bellekte kaç byte'lık yer kapladığını `int` olarak geriye döndürür.
System.Console.WriteLine("int : " + sizeof(int));
System.Console.WriteLine("long : " + sizeof(long));
System.Console.WriteLine("decimal : " + sizeof(decimal));
-
Verdiğimiz türün type'ını getirir.
-
İleri düzey programlamada göreceğimiz reflection'a girmemizi sağlayan bir operatördür.
-
typeof operatörü verilen türün/değerin type'ını/türünü getirir.
-
O tür ile ilgili bilgileri deinmek için kullanılan bir operatördür.
-
İleride(İleri Düzey Programlama da) reflection dediğimiz bir konuda elimizdeki bir türün reflection'ına girmek için kullanıldığını göreceğiz.
-
typeof operatörü verilen türün/değerin type'ını/türünü getirir.
-
O tür ile ilgili bilgileri edinmek için kullanılan bir operatördür.
-
İleride(İleri Düzey Programlama da) reflection dediğimiz bir konuda elimizdeki bir türün reflection'ına girmek için kullanıldığını göreceğiz.
-
Type t = typeof(int);
//int türüne ait tümmm bilgiler t değişkenine atanmıştır.t.
dediğinde yani member access operatörünü(.
) kullanıdığında burada bu türle ilgili bütün bilgileri alabilirsin.
-
Elimizdeki verilerin type'ını türüyle ilgili bilgileri elde etmek için typeof keywordünü kullanıyoruz.
//typeof operatörü verilen türün/değerin type'ını/türünü getirir.
//O tür ile ilgili bilgileri deinmek için kullanılan bir operatördür.
//İleride(İleri Düzey Programlama da) reflection dediğimiz bir konuda elimizdeki bir türün reflection'ına girmek için kullanıldığını göreceğiz.
Type t = typeof(int);//int türüne ait tümmm bilgiler t değişkenine atanmıştır.
System.Console.WriteLine(t.Name);
System.Console.WriteLine(t.IsPrimitive);
System.Console.WriteLine(t.IsClass);
System.Console.WriteLine(t.IsValueType);
-
Herhangi bir değerin/türün default değerini döndüren bir operatördür.
-
Belirtilen türün default değerini döndüren bir operatördür.
-
Belirtilen türün default değerini döndüren bir operatördür...
-
Default değer ne demektir? Default değerler, her tür için yazılım tarafında tanımlanmış bir varsayılan değer demektir.
- sayısal = 0
- bool = false
- string = null
- char = \0
- referans = null
- Herhangi bir değişken tanımladığında eğer ki değer atamazsanız default olarak sistem tarafından verilecek değerler bunlardır.
-
Hangi türün hangi değere sahip olduğunu bilmiyorsak default keywordüyle operatörüyle çok rahat öğrenebiliyoruz.
-
Elimizdeki herahngi bir değişkene default değerini vermek istiyorsak eğer direkt
default
keywordünü atayabiliriz.int a = default;
//Belirtilen türün default değerini döndüren bir operatördür...
//Default değer ne demektir? Default değerler, her tür için yazılım tarafında tanımlanmış bir varsayılan değer demektir.
//sayısal = 0
//bool = false
//string = null
//char = \0
//referans = null
System.Console.WriteLine(default(decimal));
System.Console.WriteLine(default(string));
System.Console.WriteLine(default(Program));
System.Console.WriteLine(default(short));
System.Console.WriteLine(default(byte));
int a1 = default;
int a2 = default(int);
-
Elimizde herhangi bir boxing'e tabi tutulmuş değerin öz türünü öğrenmek için kullandığımız bir operatördür.
-
Boxing'e tabi tutulmuş değerin öz türünü öğrenebilmek/check edebilmek/kontrol edebilmek için kullanılan bir operatördür.
-
is
operatörü denetleme neticesinde durumu bool yani true ya da false olarak döndürecektir. -
Bazen elimizdeki object'in içerisindeki değerin hangisi olduğunu bilemeyebiliriz. İşte bilemediğimiz durumlarda
is
operatörü ile kontrol edeceğiz. -
object x = true; //Boxing
//x'in içerisinde programatik olarak hangi türün olduğunu öğrenmek istiyorsamis
operatörünü kullanabilirim. -
Console.WriteLine(x is bool)
//Diyecez ki senbool
' mısın eğer kibool
isetrue
ise dönen değerbool
'a cast edeceğiz. Yok eğerfalse
ise etmeyeceğiz. Çünkü bir Unboxing işleminde öz tür neyse o türe göre bir Unboxing yapmamız gerekir. Farklı bir türe Unboxing işlemini yaparsak patlama meydana geliyordu. Dolayısıyla bizim ilk önce check etmemiz gerekebilir. Check edeceğimiz durumlarda dais
operatörünü kullanmamız gerekecektir. -
İleride if yapılanmasında vs. çok tercih ettiğimiz bir operatör olacaktır.
-
Nihayetinde elimize gelen bir object türdeki değişkenin değerlerini kontrol ederken diyeceksinki eğer x'in değeri
bool
ise şu işlemi yap yok eğer x'in değeridecimal
sa şu işlemi yap gibisinden farklı farklı algoritmalar çalıştırabileceksin. -
OOP yapılanmasında polimorfizm
is
operatörüyle kalıtımsal durumlardaki nesnelerin türlerini de öğrenebiceleğiz...
//Boxing'e tabi tutulmuş değerin öz türünü öğrenebilmek/check edebilmek/kontrol edebilmek için kullanılan bir operatördür.
//is operatörü denetleme neticesinde durumu bool yani true ya da false olarak döndürür.
object x = true; //Boxing
System.Console.WriteLine(x is bool);
System.Console.WriteLine(x is int);
System.Console.WriteLine(x is Program);
//İleride if yapılanmasında vs. çok tercih ettiğimiz bir operatör olacaktır.
//OOP yapılanmasında polimorfizm `is` operatörüyle kalıtımsal durumlardaki nesnelerin türlerini de öğrenebiceleğiz...
-
Bir değerin
null
olup olmamasını kontrol eden ve sonuç olarakbool
döndüren bir operatördür. -
is null
operatörünü sadecenull
olabilen türlerde kullanabilmekteyiz. -
Bizim iki türlü değişkenlerimiz vardır. Bunlar değer türlü değişkenler ve Referans türlü değişkenler.
- Referans türlü değişkenler
null
olabilen yani nullable olan değişkenlerdir- Herhangi bir referans türlü değişkene
null
değer atayabilirsin.
- Herhangi bir referans türlü değişkene
- Değer türlü değişkenler
null
olamayan yani not nullable değişkenlerdir.- Yani sen
int
değişkenenull
değeri veremezsin.
- Yani sen
- Referans türlü değişkenler
-
Değer türlerinde
null
kullanamayız çünkü değer türlerin illaki bir değeri olmalı hiç yoktan default değerlerden biri olmalıdır. Varsayılan bir değer olmalıdır. -
Referans türlerde referansın yapısı olan
null
olma durumu hiçbir nesneyi işaretlememesinden öne gelir. Yani bir referans türlü değişken bir değer işaret etmek zorunda değildir. -
Dolayısıyla
is null
operatörünü değer türlü değişkenlerde kullanamazsınız. -
Değer türlü değişkenlerde
null
alıp alamama durumunu ileride nullable operasyonuyla daha farklı hale getireceğiz. -
Değer türlü değişkenler normal şartlarda
null
alamaz.
//Bir değişkenin değerinin null olup olmamasını kontrol eden ve sonuç olarak bool döndüren bir operatördür.
string a = null;
System.Console.WriteLine(a is null);
//is null operatörünü sadece null olabilen türlerde kullanabilmekteyiz.
int b = null;
System.Console.WriteLine(b is null);
-
is null
operatörü varsa haliyleis not null
operatörü de olacaktır. -
Elimizdeki değerin
null
olup olmamasıyla ilgilenmekte ve geriyebool
döndürmektedir. -
is null
operatörüne nazaran tam tersi mantıkta çalışıyor/işliyor.is null
null
olduğundatrue
döndürürkenis not null
null
olmadığındatrue
döndürür. -
Sadece
null
alabilen türlerde kullanılabilir. -
Değer türlü bir değişkende kontrol yapamazsın. Nullable olan değerlerde çalıştırabilmekteyiz.
//Elimizdeki değerin null olup olmamasıyla ilgilenmekte ve geriye bool döndürmektedir.
string a = null;
System.Console.WriteLine(a is not null);
//Sadece null alabilen türlerde kullanılabilir.
-
cast operatörüne(
()
) alternatif olarak üretilmiş bir operatördür. Yani dönüşümde kullandığımız operatör olacaktır. -
cast operatörünü 3 farklı dönüşümde kullanırız;
- UnBoxing
- Bilinçli Tür Dönüşümü
int
char
arasında ASCII kaynak kodları üzerinden bir dönüşüm yaparken kullanabiliriz.
-
as
operatörü cast operatörünün(()
) UnBoxing boyutuna alternatif olarak üretilmiş bir operatördür. -
Cast operatörünün UnBoxing işlemine alternatif olarak üretilmiş bir operatördür...
-
Cast operatöründe UnBoxing işlemini uygularken elimizdeki herhangi bir
object
türünden bir değişkende Boxing edilmiş bir değişkeni biz kendi öz türünde elde etmek için Cast operatörünü(()
) kullanabiliriz.object x = 123;
(int)x
Buradaki temel husus Boxing edilmiş bir değerin dışarıya Cast operatörüyle(()
) UnBoxing edilmesinde dikkat edilmesi gereken kural türüne uygun bir şekilde Cast edilmesi gerekiyor! Eğer ki farklı bir türde Cast edilirse hata verecektir.
-
Amma velakin
as
operatörü buradaki davranışa bir alternatif getirir. Eğer ki UnBoxing yaparken Boxing edilmiş değerle aynı türde değilse hata vermiyorumnull
döndürüyorum diyor. -
as
operatöründe türüne uygun bir şekildeas
edilmesi zaruri değildir... Eğer ki tür uygunsa UnBoxing işlemi başarıyla yapılacak, yok eğer tür uygun değilse HATA VERMEYECEKnull
değer döndürecektir... -
Bu durumda programatik olarak yazılımın sonlanmadan akışta kontrol edilmesine müsaade edecek ve işleme devam edecektir.
-
Prototip =>
object x = 123
;Type y = x as Type;
=> as operatörü tür uygun olmadığı taktirde geriyenull
döndüreceği için bunull
ı karşılayabilen türlerle çalışmak isteyecektir. Haliyleas
operatörü değer türlü değişkenlerde kullanılamaz!!!- Nullable olmayan türlerle çalışamaz.
- Referans türlerdeki değişkenlerle çalışabilir...
-
Genellikle OOP'de kullanacağımız bir operatördür.
as Operatörü
//Cast operatörünün UnBoxing işlemine alternatif olarak üretilmiş bir operatördür...
Cast Örneklendirmesi
object x = "Ahmet";
int x2 = (int)x;
System.Console.WriteLine(x2);
as Örneklendirmesi
object y = "Mehmet";
Program y1 = y as Program;
System.Console.WriteLine(y1);
-
C# programlama dilinde normal şartlarda değer türlü değişkenler(
int
,short
,byte
,char
,bool
)null
değeri alamaz. Eğer ki bir değer türlü değişkeninnull
değerini almasını istiyorsanız onu nullable yapmanız gerekiyor. Bunu da nullable operatörü(?
) ile yapabilirsiniz. -
Prototip :
degişken_türü? değişken_adı;
-> Bu formatta tanımlanan değişkenlernull
değer alabilir.
-
Bir değer türlü değişkeni nullable operatörüyle(
?
)null
değer alabilir hale getiriyorsanız artıkis null
veis not null
kontrollerini yapabiliyorsunuz anlamına gelir. Hatta ve hattaas
operatörünü de kullanabiliriz. -
Bir değer türlü değişken nullable yapıldıysa eğer;
is null
,is not null
,as
gibinull
ile çalışan operatörleri üzerinde kullanabiliriz. -
C# programlama dilinde değer türlü değişkenler normal şartlarda null değer alamazlar(Not Nullable)
-
Bir değer türlü değişkenbin null değer alabilmesi için (yani nullable olabilmesi için) ? operatörünün kullanılması gerekmektedir.
-
int? a = null;
Bir değer türlü değişkenden ziyade referans türlüymüş gibi hareket edecek venull
değerlerini karşılayabilecek -
İleride EntityFramework dediğimiz ORM aracında bazen veritabanında oluşturulacak bazı kolonların nullable olup olmamasını biz nullable operatörüyle(
?
) ORM üzerinden belirleyebiliyoruz. Yani bir değişkeninnull
olup olmamasını nullable operatörüyle(?
) belirleyebiliyoruz.
//C# programlama dilinde değer türlü değişkenler normal şartlarda null değer alamazlar(Not Nullable)
//Bir değer türlü değişkenbin null değer alabilmesi için (yani nullable olabilmesi için) ? operatörünün kullanılması gerekmektedir.
int? a = null;//Bir değer türlü değişkenden ziyade referans türlüymüş gibi hareket edecek ve null değerlerini karşılayabilecek
bool? b = null;
System.Console.WriteLine(a);
System.Console.WriteLine(a is null);
System.Console.WriteLine(b is not null);
object sayi = 4;
int? sayi2 = sayi as int?;
Console.WriteLine(sayi2);
//Bir değer türlü değişken nullable yapıldıysa eğer; is null, is not null, as gibi null ile çalışan operatörleri üzerinde kullanabiliriz.
as Örneklendirme
object x = 123;
int? y = x as int?;
-
Null birleştirme operatörü(
??
) -
Elimizdeki değişkenlerden
null
olan varsa eğer yerine başka bir değeri göndermeyi sağlayan bir operatördür. -
Elimizdeki değişkenin değerinin
null
olma durumuna istinaden farklı bir değeri göndermemizi sağlayan operatördür. -
Diyelim ki elimizde;
string a = null
a değişkeni var ve biz bu a değişkenininnull
olup olmadığını bilmiyoruz.a ?? "Merhaba"
a'nın değeri eğernull
değilse a'nın değerini yazdır. Yok eğer a'nın değerinull
ise"Merhaba"
yazdır demiş olduk.
-
Null Coalescing Operatörü(
??
) if'ten else'ten ve bunun gibi kontrollerden bizleri kurtarmaktadır.a == null ? "Merhaba" : a
normalde bu şekilde yazman gereken kontrolü;a ?? "Merhaba"
bu şekilde yazarak daha hızlı/efektif/sistematik bir şekilde sonucu elde et diye Null Coalescing operatörü(??
) üretilmiştir.
-
Null Coalescing Operatöründe(
??
) her iki taraftaki değişken yahut değerler aynı türde olmalıdır.
//Elimizdeki değişkenin değerinin null olma durumuna istinaden farklı bir değeri göndermemizi sağlayan operatördür.
string a = "Ahmet";
System.Console.WriteLine(a ?? "Merhaba");
System.Console.WriteLine(a == null ? "Merhaba" : a);
System.Console.WriteLine(a ?? 3);
//Sol ve sağdaki türler birebir aynı olmalıdır. Aksi taktirde derleyici hata verecektir...
-
C# 8.0 ile gelmiştir.
-
Null Coalescing Operatörünün(
??
) assigment/assign/atama işlemini yapan daha gelişmiş bir versiyonudur. -
Amacı elimizdeki değerler eğer
null
ise değerini değiştirmeyi yok eğer değilse de var olan değerini korumayı sağlayan bir operatördür. -
x ??= "Merhaba";
x'in değeri eğernull
ise"Merhaba"
değerini x'e ata demiş oluyoruz. -
System.Console.WriteLine(x ??= "Merhaba");
x'in değerinull
ise"Merhaba"
yazdır ve"Merhaba"
değerini x'e atama yap. Eğer kinull
değilse direkt olarak x'in değerini yazdıracaktır.
-
Gerçek hayatta uzaktan sana kullanıcın id değeri geldi varsayalım. Eğer ki gelen id
null
ise varsayılan bir değer atama yapabilirsin. Eğernull
değilse id ne ise o şekil devam etsin demiş oluyorsun. -
Birebir Null Coalescing Operatörüyle(
??
) aynı mantıkta çalışır.
string x = null;
System.Console.WriteLine(x ??= "Merhaba");
System.Console.WriteLine(x);
int? id = null;
id ??= 1;//id null ise 1 değerini ata, yok eğer değilse değerini koru...
- Operatör Nedir?
- Operatör Okur Yazarlığı
- Aritmetik Operatörler
- Aritmetik Operatörler Geriye Dönüş Değeri
- (int) * (double) = ?
- (byte) * (int) = ?
- (byte) * (byte) = ? (İstisna! – Mülakat!!!)
- Matematiksel İşlemler(Öncelik Sırası)
- Karşılaştırma Operatörleri
- Karşılaştırma Operatörleri Geriye Dönüş Değeri
- Mantıksal Operatörler
- Mantıksal Operatörler Kullanım Mantığı(Solu Sağı bool olmalı)
- Mantıksal Operatörler Geriye Dönüş Değeri
- Arttırma Azaltma Operatörleri
- Üzerine Ekleme Yığma Operatörleri
- Metinsel İfadelerde Kullanılan Operatörler
- Diğer Operatörler
- ! Operatörü
- Ternary Operatörü
- Birden Fazla Condition Uygulamak
- Örnek 1
- Örnek 2
- Atama(Assign) Operatörü
- .(Member Access – üye Erişim) Operatörü
- Cast Operatörü
- sizeof Operatörü
- typeof Operatörü
- default Operatörü
- is Operatörü
- is null Operatörü
- is not null Operatörü
- as Operatörü
- ?(Nullable) Operatörü
- ??(Null-Coalescing) Operatörü
- ??= Operatörü (Null-Coalescing Assignment) (C# 8.0)
- Özet