Clear        


                
                    // Types and Variables (Tipler ve Değişkenler)

namespace _01_TypesAndVariables
{
    internal class Program
    {
        static void Main(string[] args)
        {
            #region Comments (Yorumlar)
            // bu bir yorumdur, kodlar derkenirken (build işlemi) dikkate alınmaz

            /* 
                bu da bir yorumdur 
            */
            #endregion



            #region Kodları Derleme (Build) ve Çalıştırma (Run, Execute)
            // Build (derleme) işlemi kodların derlenmesini yani makine diline dönüştürülüp çalıştırılabilir bir dosya (.exe) veya diğer uygulamalarda kullanılabilecek bir kütüphane (.dll) oluşturulmasını sağlar.
            // Syntax (söz dizimi kuralları) hatası varsa build edilemez, derleme hatası (Compile Time Error) meydana gelir.

            // Run (execute) işleminde yine öncelikle kodlar syntax hatası yoksa build edilir, uygulama tipine göre örneğin bu solution'da olanlar gibi konsol uygulamalarında derlenen kodlar
            // .exe dosyası üzerinden çalıştırılır.
            #endregion



            #region Konsola Değer Yazdırma
            Console.WriteLine("Hello, World!"); // Konsola Hello, World! yazdırır.
            #endregion



            #region Value Types (Değer Tipler):
            // 1 byte = 8 bits
            #region Integer (Tam Sayı Veri Tipi)
            int number1 = 10; // 32 bits. -2 billion to 2 billion (billion: milyar)
                              // değişken (number1) tanımlama ve değişkene ilk değer (10) atama işlemi,
                              // değişken tanımlama bir kere yapılır, aynı ad ile başka değişken tanımlanamaz, tanımlanan değişkene atama işlemi istenildiği kadar yapılabilir,
                              // örneğin 10 verisinin default (varsayılan) veri tipi int'tir
            Console.WriteLine("Number 1 is {0}", number1); // metinsel veri oluşturma 1. yöntem, {0}: placeholder (yer tutucu), {0} yer tutucusuna number1'in değeri (10) yazdırılır

            Console.WriteLine("Integer minimum value: {0}, maximum value: {1}", int.MinValue, int.MaxValue); // {0} yer tutucusuna int.MinValue, {1} yer tutucusuna ise int.MaxValue değerleri yazdırılır

            int sayi1; // variable declaration (değişken tanımlama)
            sayi1 = 1; // variable value assignment (değişkene değer atama)
            Console.WriteLine("Sayı 1: " + sayi1); // +: concatenation operator (arka arkaya metinsel veri ile birleştirme operatörü),
                                                   // metinsel veri oluşturma 2. yöntem

            sayi1 = 11; // sayi1 değişkeninin son güncel değeri 1 yerine 11 olur
            Console.WriteLine($"Sayı 1: {sayi1}"); // metinsel veri oluşturma 3. yöntem



            uint number2 = 20; // 32 bits. 0 to 4 billion (u: unsigned, yani - işaretsiz)
            Console.WriteLine("Number 2: " + number2);
            #endregion



            #region Long (Tam Sayı Veri Tipi)
            long number3 = 2147483648; // 64 bits. -9 quintillion to 9 quintillion (quintillion: kentilyon)
            Console.WriteLine("Number 3 is " + number3);



            ulong number4 = 40; // 64 bits. 0 to 18 quintillion
            Console.WriteLine("Number 4: " + number4);
            #endregion



            #region Short (Tam Sayı Veri Tipi)
            short number5 = -19; // 16 bits. -32,768 to 32,767
            Console.WriteLine("Number 5: " + number5);



            ushort number6 = 19; // 16 bits. 0 to 65,535
            Console.WriteLine("Number 6: " + number6);
            #endregion



            #region Byte (Tam Sayı Veri Tipi)
            byte number7 = 255; // 8 bits. 0 to 255
            Console.WriteLine("Number 7: " + number7);



            sbyte number8 = -128; // 8 bits. -128 to 127
            Console.WriteLine("Number 8: " + number8);
            #endregion



            #region Boolean (Tam Sayı Veri Tipi: true = 1, false = 0 olduğu için, ancak Mantıksal (Doğruluk) Veri Tipi olarak da adlandırılır)
            bool condition = true; // 1 bit (1 byte in C#). true (1) or false (0)
            Console.WriteLine("Condition: " + condition); // konsola Condition: True yazdırır, değişkenin verisi true olmasına rağmen konsola yazdırırken True olarak formatlar



            condition = false;
            Console.WriteLine($"New condition: {condition}"); // konsola Condition: False yazdırır
            #endregion



            #region Char (Karakter Veri Tipi)
            char character = 'A'; // ASCII characters (8 bits), Unicode characters (16 bits) in C#
                                  // İngilizce bir klavyedeki her bir karakterin ASCII tablosunda sayısal bir ondalık değeri vardır,
                                  // bu ondalık değere değişkenin başına (int) yazılarak birbirlerine uyumlu tip dönüşümü (casting) üzerinden ulaşılabilir,
                                  // A karakterinin ASCII tablosundaki ondalık sayısal değeri 65'tir,
                                  // Türkçe karakterler (Ö, ö, Ç, ç, Ş, ş, İ, ı, Ğ, ğ, Ü, ü) unicode karakterlerdir
            Console.WriteLine("Character is: " + character + ", ASCII code is: " + (int)character);
            #endregion



            #region Double (Ondalık Sayı Veri Tipi)
            double number9 = 1.7; // 64 bits. 15 significant digits. For the double datatype, positive values are 4.9 x 10^-324 to 1.8 x 10^308. Negative values are -1.8 x 10^308 to -4.9 x 10^-324
                                  // ondalık veriler için programlama dillerinde her zaman . ayracı kullanılır,
                                  // örneğin 1.7 verisinin default (varsayılan) veri tipi double'dır
            Console.WriteLine("Number 9: " + number9); // konsola eğer bilgisayarın bölgesel ayarı Türkçe ise Number 9: 1,7 İngilizce ise Number 9: 1.7 şeklinde formatlayarak yazdırır
            #endregion



            #region Float (Ondalık Sayı Veri Tipi)
            float number10 = -12.34567F; // 32 bits. 7 significant digits. For the float datatype, positive values are 1.4 x 10^-45 to 3.4 x 10^38. Negative values are -3.4 x 10^38 to -1.4 x 10^-45
            number10 = 1.2f; // sonda F veya f kullanılabilir
            Console.WriteLine("Number 10 is: " + number10 + ", minimum value: " + float.MinValue + ", maximum value: " + float.MaxValue);
            #endregion



            #region Decimal (Ondalık Sayı Veri Tipi)
            decimal number11 = 11.77M; // 24 * 8 bits. 28 to 29 significant digits. For the decimal datatype, positive values are 1.0 x 10^-28 to 7.9 x 10^28. Negative values are -7.9 x 10^28 to -1.0 x 10^-28
            number11 = -3.2m; // sonda M veya m kullanılabilir
            Console.WriteLine("Number 11: " + number11);
            #endregion



            #region Enum (Sıralı Küme Veri Tipi)
            Console.WriteLine($"Day is {Days.Monday}, day value is {(int)Days.Monday}"); // (int) ile birbirlerine uyumlu tip dönüşümü üzerinden Monday elemanının sahip olduğu 0 değerine ulaşılabilir



            Console.WriteLine("Gün: {0}, gün değeri: {1}", Gunler.Cuma, (int)Gunler.Cuma);



            Console.WriteLine("Cinsiyet: " + Cinsiyet.Kadın + ", cinsiyet değeri: " + (int)Cinsiyet.Kadın);
            #endregion
            #endregion



            #region Reference Types (Referans Tipler):
            #region String (Metinsel Veri Tipi, Karakter Dizisi)
            string characters = "Ankara"; // 4 byte address. Length up to 2 billion bytes. A string variable in C# cannot be declared as fixed length. Array of characters
            Console.WriteLine("String is: " + characters);
            #endregion
            #endregion



            #region Var (Atanan değere göre veri tipini otomatik tanımlar, yukarıdaki tüm tipler için kullanılabilir)
            var number12 = 123;
            Console.WriteLine("Number 12 is: " + number12);



            number12 = 'A';
            Console.WriteLine("New number 12 is: " + number12);



            var character12 = 'A'; // yalnızca tek karakter yazılır.
            Console.WriteLine("Character is: " + character12);



            var string12 = "Çağıl";
            Console.WriteLine("String is: " + string12);
            #endregion



            #region Veri Tiplerinin C# Yapısal Karşılıkları
            Int32 degisken1; // veri tipi karşılığı int degisken1;
            Int64 degisken2; // veri tipi karşılığı long degisken2;
            Int16 degisken3; // veri tipi karşılığı short degisken3;
            Byte degisken4; // veri tipi karşılığı byte degisken4;
            Boolean degisken5; // veri tipi karşılığı bool degisken5;
            Double degisken6; // veri tipi karşılığı double degisken6;
            Single degisken7; // veri tipi karşılığı float degisken7;
            Decimal degisken8; // veri tipi karşılığı decimal degisken8;
            Char degisken9; // veri tipi karşılığı char degisken9;
            String degisken10; // veri tipi karşılığı string degisken10;
            #endregion
        }
    }



    #region Enum (Sıralı Küme Veri Tipi)
    enum Days
    {
        Monday, // default value: 0
        Tuesday, // default value: 1
        Wednesday, // default value: 2
        Thursday, // default value: 3
        Friday, // default value: 4
        Saturday, // default value: 5
        Sunday // default value: 6
    }



    enum Gunler
    {
        Pazartesi = 1, // value: 1
        Salı, // value: 2
        Çarşamba, // value: 3
        Perşembe, // value: 4
        Cuma, // value: 5
        Cumartesi, // value: 6
        Pazar // value: 7
    }



    enum Cinsiyet
    {
        Kadın = 11, // value: 11
        Erkek = 22 // value: 22
    }
    #endregion
}