Kayıtlar

2022 tarihine ait yayınlar gösteriliyor

Class vs Object

Class(sınıf), veriye erişime belirleyen, veriyi saklayan ve verileri işleyen yapılardır. Object(nesne), sınıflardan oluşur. Aralarındaki önemli farklar : Class tanımlandıktan sonra otomatik olarak kullanılmaz. Instance'ı alındığı zaman object oluşmuş olur. Dolayısıyla classlar soyuttur, objectler somuttur. Class metodlar ile objectlerin davranışlarını, değişkenleri ile nesnelerin durumlarını temsil ederler.

Generic ile Non-Generic Koleksiyonlar

Generic koleksiyonlar, tek veri tipinde değer saklayabilir. "System.Collection.Generic" namespaceinden beslenir. Tek tip değer saklaması kötü gözüksede, "Strong Typed" yani tip güvenliği sağlar. ArrayList, SortedList, Stack, Queue ve Hashtable generic koleksiyonlardır. Non-Generic koleksiyonlar, birden fazla veri tipinde değerler saklayabilirler. "System.Collection" namespace'inden beslenir. "Strong Typed" yani tip güvenliği sağlamadığı için dönüşüm yapılırken hata alınabilir. List<T>,Dictionary<TKey,TValue>,SortedList<TKey,TValue>,Queue<T>,Stack<T> ve Hashset<T> generic olmayan koleksiyonlardır.

Array, Multidimensional Array, Jagged Array ve ArrayList

Array : Diziler tek tipteki birden fazla veriyi saklamaya yarar. Referans tipidir. Kapladığı yer sakladığı veriye göre hesaplanır. Multidimensinal Array : Çok boyutlu dizi, aynı tipteki birden fazla katmanlı veriyi saklamaya yarar. Jagged Array :   Array içinde array kullanımıdır. ArrayList : Array mantığının aynısıdır. Diğerlerinden farklı olarak boyutu değiştirilebilir ve tek tip değerler tutmak zorunda değildir.

Döngüler (For, Foreach, Break/Continue)

Döngüler, liste halindeki datalar üzerindeki işlemlerde veya bir işin belli bir miktarda yapılmasını sağlayan yapılardırç For ve Foreach ağırlıklı olarak kullanılır. For döngüsü, datayı bildiğimiz durumlarda kullanılmalıdır. Ayrıca indeks ile değerini bulabileceğimiz sınıflarda kullanılır.(Array, Dictionary vs...) Aksi durumlarda hata verdirir. 20 adet verisi olan bir listeyi, döngüde 30 kere döndürürsek 21. işlemde hata alırız. Foreach döngüsü, datayı bilmediğimiz veya propertyleri kolay olumak için kullanılmalıdır.  Performans açısından For daha performanslı gözüksede, programda kullanılan class/viewmodel/dto gibi elementler büyüdükçe Foreach kullanımı daha anlamlı olacaktır. Aralarındaki fark hiçbirzaman string/stringbuilder etkisi kadar olmayacaktır muhtemelen ama milyon datalar işin içine girince işler değişebilir. Bu tip durumlarda da bu kadar büyük bir loopa gerek varmı sorusu doğar. Batch bir işlem yapılmayacak ise gerek bile duyulmayacaktır. Örneğin 40 tane propertysi olan...

Try Catch ile Hata Yönetimi (Custom Exception)

Hata yönetimi, "Try-Catch-Finally" bloğu ile yapılır. "Try" kısmında yapılmak istenen işlem yapılır. "Catch" kısmı hataya düştüğü kısımdır burda hatanın yönetilmesi gerekir. "Finally" kısmı ise hatalı yada hatasız her durumda yapılması gereken bir işi yapar. Dışardan alınan servislerde, dönüşüm işlemleri yapılan yerlerde ve nullable data gelebilen durumlarda çoğunlukla kullanılır.  Catch bloğunda exception kontrolü yapılmaz ise pahalı bir işlem değildir. Birden fazla catch kullanılabilir ama "exception" parametresi alan en sonda olmalıdır. Finally kullanılması zorunlu değildir ama dispose/close gibi işlemler burda yapılmalıdır. Mevcut exception türleri ihtiyaçları karşılar ama projedeki sınıflara özel exceptionlar yazılabilir. Bu exceptionlara düşürmek içinde bir metod mutlaka yazılmalıdır.

Koşullar (if-else, swtich-case)

Koşullar, farklı kararlar için farklı işlem yapılmasını sağlar. "If-Else" ve "Switch-Case" olarak 2 koşul türü vardır. Koşulların kullanılmasında bir sıkıntı yoktur ama bir class içinde 10dan fazla kontrol yapılıyor ise o classta bir sıkıntı vardır. Tasarım desenlerinden, yapmak istediğimiz işe uygun olan patterni kullanıp koşul sayısını minimuma indirmeliyiz. Diğer bir riskte, koşulların kod bloklarının birbirine benzer olduğu durumlarda tekrar eden kod bloğu sayısının artmasıdır. Bu durumda da OOP devreye girip ortak metodlar kullanmamızı önerir.

Metodlar (Static, void, Ref, Out, Params, Tuple)

Metod, bir işi yapan kodların bi arada bulunduğu bloktur. Kod tekrarını azaltmak için önemlidir, kullanılması gerekir. Birden fazla işide yapabilir ama SOLID prensiplerine göre bir metod tek iş yapmalıdır. Metod tanımlanırken "Erişim(Access Modifier) + Dönüş Tipi(Return Type) + Adı(Name)" yapısı kullanılır. Her metod dönüş yapmak yani bir değer vermek zorunda değildir.  Void dönüş tipi olan metodlar değer dönmez, istenen datasının değerlerini değiştirir. Erişim belirteçleri genelde "Public" yada "Private" seçilir. Default değer "Private"dır. Public erişimi, heryerden erişim sağlar. Private erişimi, sadece kendi sınıfı içinden erişim sağlar.

Matematiksel İşlemler (Math Class)

Matematiksel işlemler için "Math" sınıfı kullanılır. Math sınıfı statik bir sınıftır, statik olduğu içinde instance almadan(new'lemeden) kullanabiliriz. Math.Abs() : Mutlak değerini hesaplar. Math.Ceiling() : Yukarı yuvarlama yapar. Math.Floor() : Aşağı yuvarlama yapar. Math.Round() : En yakın tamsayıya yuvarlar.  Math.Max(a, b) : En büyüğünü verir. Math.Min(a, b) : En küçüğünü verir. Math.Pow(a, b) : a üzeri b hesaplar. Math.Sqrt(): Karekökünü hesaplar. Math.Truncate() : Virgülsüz kısmı verir.

Operatörler (Aritmetik, Karşılaştırma, Mantıksal)

Aritmetik Operatörler : Karşılaştırma Operatörleri : Mantıksal Operatörler :

Bool, Enum, Nullable, Struct, Var, Object, Dynamic, Random, Tuple Türleri

Bool : CTS'deki (Common Type System) " System.Boolean" tipidir. Değer tipidir, ram üzerinde Stack bölgesinde tutulur. 2 byte yer kaplar. True, False ve Null değerlerini alabilir. Enum : Hardcode metin/sayı yazılmasını engellemek ve statik tanımlamalar yapmak için uygundur. Struct : Çeşitli verileri birarada saklamak ve temel seviyede kullanmak için uygundur. Class kadar yetenekli değildir ama performans dostudur. Değer tipidir, Stack üzerinde tutulur. Var,  Object,  Dynamic : Atanacak değerlere göre, runtime zamanı atama yapılır. Var, atanan tür değiştirilemez ve genellikle hızlı kodlama yapmak için tercih edilir. Object, atanan tür değiştirilebilir ve reflection işlemi gerektiren durumlarda kullanılabilir. Dynamic,  atanan tür değiştirilebilir. Random : Rastgele sayı üreten bir classtır. Nullable : Hiçbir değer atamamaktır. Default değerden farklı olarak, yok hükmünde bir değerdir. Tuple : Class oluşturmadan, birden fazla propertyi tutabilen bir yapıdır.

DateTime ve TimeSpan (Formatlama, Tarih İşlemleri)

CTS'deki (Common Type System) " System.DateTime " tipidir. Değer tipidir, ram üzerinde Stack bölgesinde tutulur. 8 byte yer kaplar. Newlendiği durumlarda Heap üzerinde de yer kaplar.Tarih ve saat değerlerini saklar.

Tip Dönüşümleri (Type Conversation, Implicit, Explicit, Parse, Convert)

Tipler, değer aralıkları izin verdiğince birbirlerine dönüştürülebilir.  Bilinçsiz (Implicit) : Küçük değer tutan tipler, büyük değerlere dönüşürken otomatik dönüşür  char > int > long > float > double Bilinçli (Explicit) : Büyük değer tutan tipler, küçük değerlere dönüşürken otomatik yapılmaz. double > float > long > int > char Parse : Parse metodu ile dönüştürme yapılır. Convert : Convert sınıfı ile dönüştürme yapılır

Derinlemesine Sayısal Değerler (Tamsayılar (Byte, Short, Integer, Long), Küsüratlılar (Float, Double, Decimal) )

Resim
  Sayılar tam sayılar ve küsüratlı sayılar olmak üzere ikiye ayrılır. Array olarak kullanılmakça Ram üzerinde Stack alanında tutulurlar ve hızlı çalışırlar. Herhangibir sayı tutmak için hepsi kullanılabilir, dikkatli olunması gereken konu performanstır. Sınırları belli olan(plakalar, ülkeler, şubeler vs...) yada sıralama yapılması gerekmeyen(tc kimlik no, forma numarası vs...) gibi senaryolarda iyi düşünülmelidir. Genel olarak yapılan hatalar; Sayı olan heryerde int kullanmak :  Aşırı büyük sayılarda hata verir, ufak sayıları tutmak için gereksiz yer kaplar. Data yada analiz incelenip ona seçilmelidir. Float ve double'ı parasal işlemler için kullanmak : Decimal tipi bu iş içindir. TC Kimlik numarası için long kullanmak : Kimlik numarası için sıralama çoğunlukla gerekmemektedir. Bu tarz büyük sayı olan ama sıralama gerektirmeyen sayılar için string kullanılabilir. Fatura/Sipariş no için int kullanmak : Bu tarz sayılar işinize bağlı hızlıca artabilir. Özellikle sipariş no gibi a...

Derinlemesine Char

CTS'deki (Common Type System) "System.Char" tipidir. Char ise değer tipidir, ram üzerinde Stack bölgesinde tutulur. Char[] ise referans tipidir, Heap bölgesinde tutulur. Tek karakterlik değerler, Hexadecimal, Integer ve Unicode tutmak için kullanılır.

Visual Studio 2019 Kurulumu

Resim
visualstudio.microsoft.com  adresinden ücretsiz olan "community 2019" sürümünü indirebilirsiniz. Yükleme tamamlandıktan sonra gelen installer ekranından : ASP.NET and Web Development Node.js Development .NET Desktop Development Universal Windows Platform Development Data Storage and Processing .NET Core Cross-Platform Development

Derinlemesine String ve Metodları

CTS'deki (Common Type System) "System.String" tipidir. Referans tipidir, ram üzerindeHeap bölgesinde tutulur. Metinsel değerleri tutmak için kullanılır. String, Char'ların bir araya gelmesinden oluşur ama char array değildir. Char değişkeni mutable bir tiptir(değişibilir), string immutable(değişemez) bir tiptir.  Yani bir string'e sonradan başka bir değer atandığında ilk değer değişmez, ram üzerinde Heap bölgesinde yeni bir alan açılır. Metodlar :  Length :  Yazıda kaç karakter olduğunu sayar. Boşluklarıda sayar. Sayı döner. ToUpper :  Yazıyı büyük harf yapar. ToLower :  Yazıyı küçük harf yapar. ToLowerInvariant :  Yazıdaki büyük harfleri küçük harfe çevirir. ToUpperInvariant :  Yazıdaki küçük harfleri büyük harfe çevirir. EndsWith :  Yazının sonunu kontrol eder. True/False döner. StartsWith :  Yazının başını kontrol eder. True/False döner. Replace :  Yazıda değişiklik yapmayı sağlar. TrimEnd :  Yazının sonundaki boşlukları siler. T...

Değişkenler ve Ram Kullanımları(Heap, Stack)

Resim
Değişkenler, veri saklamaya yarar. Her veri tipi için özel değişkenler vardır. Değişkenler nerede saklanır : Ram üzerinde 2 kısım vardır, Heap ve Stack. Stack kısmında değer tipleri, Heap kısmında referans tipleri saklanır.  Stack'te saklama işlemi yapılırken verinin saklandığı yer bellidir bu yüzden hızlıdır. Kodlar derlenirken,  ram üzerinde yer açılır ve yazdırılır. Uygulama kapandığında yada değişken işlevsiz hale getirildiğinde bu bilgiler ram'dan otomatik silinir. "Stack Overflow" hatası burdan kaynaklanmaktadır, kodlar derlenirken kaplanan alan dışında bir alanda veri ararsak bu hatayı alırız. Heap'te saklama işlemi yapılırken Ram üzerinde ne kadar yer tuttuğu bilinmediği için, runtime sırasında yapılır. Array içindeki değer tipleride, Heap'te saklanır. Heap'te garbage collector yoktur, saklanan verinin yazılımcı tarafından silinmesi(null,dispose) beklenir, eğer silme işlemi yapılmazsa "Memory Leak" oluşur. Memory Leak sonucunda da uygulam...

Syntax, Genel Kurallar ve Yorum Satırı

Resim
Kullandığımız Her kütüphane(dll) için using ile kütüphaneyi ekleriz. Kodumuzun olduğu yeri belirten namespace olmalı   ve süslü parantezler içinde olmalıdır. Classımız yada Classtan miras alan herhangi bir obje başlamalı ve süslü parantezler içinde olmalıdır. Metodlarımız olmalı  ve süslü parantezler içinde olmalıdır. Her satırın sonunda ";" olmalıdır. Case Sensivite yani küçük büyük harf duyarlıdır, dolayısıyla dikkatli yazılmalıdır.

Çalışma Mantığı, Terimleri, CIL, CLR, JIT, CTS, Garbage Collector

Resim
C# ile yazılan proje build edildiğinde, projede değişen kodların olduğu katmanlarda dll veya exe'ler yeniden oluşturulur. Proje compile edildiğinde, dll dosyalarındaki kodlar makine diline dönüştürülür. Bu yüzden büyük projelerde compile süresi uzayabilir çünkü tüm projedeki kodlar, makine diline dönüştürülmelidir. Terimler : Compile : Derlemek Compile Time : Yüksek seviyeli dilin, düşük seviyeli dile dönüştürülmesi Run : Çalıştırmak Run Time : Programın çalıştığı zaman aralığı Garbage Collector : Ram üzerine yazılan kayıtların temizlenmesi işidir. CIL (Common Intermediate Language) : E xe dosyalarının içindeki "ortak dil" diye çevirebileceğimiz kodlardır. CLR  (Common Language Runtime)  : .NET frameworkte programın çalışmasını sağlar. Garbage Collector işinide otomatik yapar. JIT (Just In Time) : CIL kodlarını, makine diline çevirir. CTS (Common Type System) : Farklı dillerde farklı adlardaki ortak değişkenlerin, ortak tipidir.

Nedir, Tarihçe, Nerelerde Kullanılır

Resim
1996 yılında  Microsoft 'a katılan  Anders Hejlsberg ve ekibinin , 2000 yılında geliştirdiği yüksek seviyeli bir programlama dilidir yani donanım bilgisi ve  assembly kodlama  yapabilmesine gerek yoktur. C# ile Java, PHP, Python vs... diğer arasında pek bir fark yoktur. Çoğu, diğer dillerin yaptığı herşeyi yapabilir. Doğaları gereği ufak avantajları/dezavantajları olabilir ama hiçbirinin diğerine baskın bir net bir üstünlüğü yoktur. C#'ın diğerlerine göre en büyük üstünlüğü Microsoft tarafından geliştirilmesidir.  C# ile yapılabilecek uygulama türleri : ASP.NET ile web uygulamaları XAMARIN  ile mobil uygulamalar Windows Servisler Masaüstü Uygulamaları Unity  ile oyun geliştirme Blazor  ile SPA geliştirme C# Atalarından Farkı : C ve C++'a göre Object Oriented bir dildir. Hafıza kontrolünü kendi yapar.(Garbage Collector) C ve C++'ta Ram üzerindeki kayıtları kendinizin silmesi gerekir. C ve C++ gibi makine diline yakın değildir daha yüksek seviyeli b...