Clear        


                
                    // Methods (Methodlar)

namespace _03_Methods
{
    internal class Program
    {
        static void Main(string[] args) // Main de bir methoddur
        {
            #region Method Çağrımları
            DisplayHello(); // 1, DisplayHello üzerine cursor konduktan sonra klavyede F12 tuşuna basılarak veya farenin sağ tuşuna tıklayıp Go To Implementation denilerek aşağıdaki DisplayHello methoduna gidilebilir



            Sum(1, 2); // 2



            Console.WriteLine("PI: " + GetPi()); // 3, WriteLine da bir methoddur ve method içerisinde başka bir method çağrılabilir, içeride çağrılan methodun sonucu dışarıdaki methodda kullanılır



            int number1 = 7;
            short number2 = 4;
            long subtractResult = Subtract(number1, number2); // 4, genelde methodlar çağrıldıktan sonra dönen sonuç methodun dönüş tipi ile aynı tipte olan bir değişkende saklanır ve daha sonra kullanılır
            Console.WriteLine("Subtract Result: " + subtractResult);



            string calisan = KurumaGoreCalisanGetir("Çağıl", "Alsaç"); // 5
            Console.WriteLine(calisan);



            calisan = KurumaGoreCalisanGetir("Leo", "Alsaç", "Apple"); // 5, eğer default olarak tanımlanan parametreye değer gönderilirse method içerisinde gönderilen değer kullanılır
            Console.WriteLine(calisan);



            Console.WriteLine(DepartmanaGoreCalisanGetir("Çağıl", "Alsaç")); // 5
            Console.WriteLine(DepartmanaGoreCalisanGetir("Çağıl", "Alsaç", "Yazılım")); // 5



            Console.WriteLine(DepartmanaGoreCalisanGetir("Leo", "Alsaç", "Apple", "İletişim")); // 5
            #endregion
        }



        #region Methodlar
        // 1) Parantez içerisine herhangi bir parametre almayan ve geriye herhangi bir sonuç dönmeyen methodlar, genelde ekrana veri yazdırma için kullanılır
        static void DisplayHello() // Bazı durumlar hariç static yazmaya gerek yoktur, yukarıdaki Main methodu static olduğu için burada yazmamız gerekiyor
        {
            Console.WriteLine("Hello!");
        }



        // 2) Parantez içerisine bir veya birden fazla parametre alan ve geriye herhangi bir sonuç dönmeyen methodlar
        static void Sum(int number1, int number2) // parametre adlarının (number1 ve number2) bir önemi yoktur, önemli olan parametrelerin sırası ve tipleridir, parametre tipleri farklı olabilir
        {
            int result = number1 + number2;
            Console.WriteLine($"{number1} + {number2} = {result}");
        }



        // 3) Parantez içerisine herhangi bir parametre almayan ve geriye herhangi bir tipte sonuç dönen methodlar
        static double GetPi() // methoddan geriye veri dönebilmek için return yazılır ve method başında dönülecek verinin tipi belirtilir
        {
            return 3.14;
        }



        // 4) Parantez içerisine bir veya birden fazla parametre alan ve geriye herhangi bir tipte sonuç dönen methodlar
        static long Subtract(int number1, short number2) // Sum ve Main methodlarındaki number1 ve number2 parametreleri ile Subtract methodundaki number1 ve number2 parametrelerinin birbirleriyle bağlantısı yoktur,
                                                         // bu parametreler sadece içerisinde kullanıldıkları methodda geçerlidir
        {
            return number1 - number2;
        }



        // 5) Default (varsayılan) parametreli methodlar
        static string KurumaGoreCalisanGetir(string ad, string soyad, string kurum = "Microsoft") // default değerler her zaman methodun en son parametrelerine verilir, istenirse tüm parametrelere default değer atanabilir
        {
            return ad + " " + soyad + " isimli çalışan " + kurum + " kurumunda çalışmaktadır.";
        }



        static string DepartmanaGoreCalisanGetir(string ad, string soyad, string kurum = "Microsoft", string departman = "Eğitim")
        {
            return ad + " " + soyad + " isimli çalışan " + kurum + " kurumunda " + departman + " departmanında çalışmaktadır.";
        }
        #endregion
    }
}