Method pada C#

Method adalah sekumpulan pernyataan yang akan dijalankan ketika dipanggil. Untuk mendefiniskan suatu method pada C#:

[Access modifier] [tipe data] [nama method] (parameter1, parameter2, ...) {
    //Kumpulan perintah
}

Dari struktur di atas:

  • Access modifier, untuk saat ini, gunakan saja access modifier public.
  • Tipe data, bisa berupa void atau tipe data C# lainnya, termasuk enum atau class custom. Merupakan tipe data yang dihasilkan method.
  • Nama method, berupa suatu identifier yang valid.
  • Parameter, sekumpulan variabel pada method untuk berkomunikasi dengan program di luar method. Method juga bisa tidak memiliki parameter.
  • Kumpulan perintah, perintah perintah yang akan dijalankan ketika method dipanggili.

Suatu method harus ditempatkan di dalam suatu class, Method adalah salah satu bentuk dari member suatu class. Suatu method dipanggiil / dijalankan dengan menuliskan namanya.

Method void

Suatu method void adalah suatu method yang hanya menjalankan sekumpulan perintah dan tidak menghasilkan suatu nilai (Tetapi masih dapat menampilkan sesuatu ke layar). Sebagai contoh:

namespace Belajar2 {
  class Program {
    static void Main(string[] args) {
      ContohMethod met = new ContohMethod();
      met.Pemisah(); //Akan menampilkan pemisah
    }
  }

  public class ContohMethod {
    public void Pemisah() {
      Console.WriteLine("----------------------");
      Console.WriteLine("----------------------");
    }
  }
}

Perintah return pada C#

Pada method void, suatu perintah return akan mengakhiri suatu method seperti yang telah dijelaskan sebelumnya di bagian kondisi pada C#. Bagi method dengan tipe data selain void, perintah return harus menyertakan suatu nilai dengan tipe data yang sama dengan tipe data method yang bersangkutan. Pada class ContohMethod, tambahkan method berikut:

    public void TampilBilanganRandom() {
      Random r = new Random();
      int angka = r.Next(1, 50);
      if (angka > 25) {
        Console.WriteLine("Terlalu panjang");
        return;
      }
      for (int i = 1; i <= angka; i++) Console.Write(i + " ");
      Console.WriteLine();
    }

Jangan lupa panggil method tersebut pada method Main pada class Program.

    static void Main(string[] args) {
      ContohMethod met = new ContohMethod();

      met.TampilBilanganRandom();
      met.Pemisah();

      Console.ReadKey();
    }

Method tersebut akan menampilkan sederet angka jika angka random lebih kecil dari 25. Selain itu, ia hanya akan menampilkan "Terlalu panjang". Tanpa perintah return, kode di atas masih akan terus menampilkan angka angka setelah menampilkan "Terlalu panjang". Tetapi dengan perintah return, aliran program akan keluar dari method dan sisa kode pada method tersebut akan diabaikan.

Jika tipe data method bukan void, perintah return harus menyertakan suatu nilai yang akan menjadi nilai method tersebut. Sebagai contoh, tambahkan method berikut ke dalam class ContohMethod:

    public int GaussianRandom() {
      Random r = new Random();
      int angka1 = r.Next(0, 10);
      int angka2 = r.Next(0, 10);
      int angka3 = r.Next(0, 10);
      return angka1 + angka2 + angka3;
    }

Untuk mencoba method tersebut, tambahkan pemanggilan method GaussianRandom pada method Main, sehingga kodenya menjadi:

    static void Main(string[] args) {
      ContohMethod met = new ContohMethod();

      met.TampilBilanganRandom();
      met.Pemisah();
      Console.WriteLine(met.GaussianRandom());
      met.Pemisah();

      Console.ReadKey();
    }

Topik mengenai random Gaussian berada di luar pembahasan kita. Anggap saja sebagai bentuk lain dari random. Suatu method dengan nilai return sebaiknya digunakan seperti suatu variabel seperti ditunjukkan pada kode di atas.

Parameter method pada C#

Suatu method dapat mejadi lebih interaktif dengan parameter. Sebagai contoh:

    public int Max(int a, int b) {
      if (a > b) return a; else return b;
    }

Contoh perintah yang menggunakan method di atas sebagai berikut:

Console.WriteLine("Antara 2 dan 10, " + met.Max(2, 10) + " lebih besar");

Parameter optional pada C#

Parameter optional / pilihan, berarti nilai untuk parameter yang bersangkutan dapat disertakan atau tidak disertakan. Kita dapat mengubah method Max di atas agar dapat membandingkan dua atau tiga nilai sekaligus:

    public int Max(int a, int b, int c = Int32.MinValue) {
      int max1 = (a > b) ? a : b;
      return (c > max1) ? c : max1;
    }

Sekarang, kita masih dapat menggunakan method tersebut dengan hanya dua parameter, tetapikita juga dapat menggunakan method tersebut dengan tiga parameter:

  Console.WriteLine("Antara 2 dan 10, " + met.Max(2, 10) + " lebih besar");
  Console.WriteLine("5, 8, dan 7, yang terbesar adalah: " + met.Max(5, 8, 7));

Untuk mendeklarasikan parameter opsional, kita cukup memberi nilai default kepada parameter yang bersangkutan. Pada contoh di atas, variabel c diberi nilai terkecil pada int, sehingga tidak akan mempengaruhi hasil perbandingan ketika hanya dua parameter yang diberikan. Perlu diketahui bahwa parameter-parameter opsional harus diletakkan sebagai parameter-parameter terakhir.

Method overloading pada C#

Jika Anda mencoba memasukkan double sebagai parameter untuk method Max di atas, akan timbul error. Kita dapat membuat method lain dengan nama yang sama yang menerima parameter yang berbeda. Sebagai contoh:

    public double Max(double a, double b, double c = double.MinValue) {
      double max1 = (a > b) ? a : b;
      return (c > max1) ? c : max1;
    }

Dengan begitu, method Max kita sudah mendukung tipe data double.

Parameter referensi pada C#

Suatu parameter sederhana yang dimasukkan ke dalam suatu method nilainya akan tetap meskipun diubah di dalam method. Sebagai contoh:

    public void tukar(int a, int b) {
      int sementara = a;
      a = b;
      b = sementara;
    }

Jika kita gunakan method di atas:

      int a = 1000;
      int b = 50;
      met.tukar(a, b);
      Console.WriteLine(a); //masih 1000

Program masih akan menampilkan 1000. Akan tetapi apabila kita menyatakan parameternya sebagai referensi:

    public void tukar(ref int a, ref int b) {
      int sementara = a;
      a = b;
      b = sementara;
    }

Dan menggunakan methodnya juga dengan kata kunci ref:

      int a = 1000;
      int b = 50;
      met.tukar(ref a, ref b);
      Console.WriteLine(a); //Menampilkan 50

Program akan menampilkan 50 yang semulanya merupakan nilai variabel b. Perlu diketahui juga bahwa variable yang dideklarasikan di dalam suatu method akan hilang begitu alur program keluar dari method.

Parameter out pada C#

Parameter Out menyediakan cara lain untuk menugaskan nilai ke suatu variabel menggunakan method. Sebagai contoh:

    public bool Kelipatan3(int a, out int terdekat) {
      int mod = a % 3;
      terdekat = (mod == 2) ? a + 1 : a - mod;
      if (mod == 0) return true; else return false;
    }

Method di atas sesungguhnya menghasilkan dua output. Pertama adalah menentukan apakah angka yang bersangkutan merupakan kelipatan 3 atau bukan. Kedua, method tersebut juga menghasilkan faktor kelipatan 3 yang paling dekat dengan angka tersebut. Untuk menggunakan method tersebut:

      int angka = 7;
      int terdekat;
      bool BerupaFaktor = met.Kelipatan3(angka, out terdekat);
      if (BerupaFaktor) Console.WriteLine(angka + " adalah kelipatan 3");
      else Console.WriteLine(angka + " bukan kelipatan 3. Kelipatan terdekat: " + terdekat);

Method rekursif pada C#

Suatu method dapat dipanggil dari method lain pada class yang sama yang bukan method static (method static akan dijelaskan segera). Sebagai contoh:

    public void PemisahBesar() {
      for (int i = 1; i <= 5; i++) Pemisah();
    }

Method yang memanggil dirinya sendiri di dalam dirinya disebut method rekursif. Sebagai contoh:

    public int faktorial(int n) {
      if (n <= 1) return 1;
      return faktorial(n - 1) * n;
    }

Silahkan coba panggil method di atas dengan perintah Console.WriteLine("Factorial of 5: " + met.factorial(5));. Program akan menampilkan 120 ke layar. Nilai 120 berasal dari:

faktorial(5)
faktorial(4) * 5
faktorial(3) * 4 * 5
faktorial(2) * 3 * 4 * 5
faktorial(1) * 2 * 3 * 4 * 5
1 * 2 * 3 * 4 * 5
120

Method static pada C#

Method static adalah method yang dapat diakses tanpa meng-instantiate (membuat objek) suatu class. Method static dapat dipanggil langsung dari class. Karena ia dapat dipanggil tanpa meng-instantiate classnya, kata kunci "this" tidak dapat digunakan di dalam method static. Class static juga tidak dapat memanggil method yang lain yang berada pada class yang sama tanpa meng-instantiate class tersebut, terkecuali method yang dipanggil juga suatu method static.

Kita sebetulnya dapat membuat method-method lain selain method Main pada class Program kita. Tetapi kita tidak akan bisa memanggil method tersebut dalam method main apabila method tersebut bukan method static. Method static seperti method Main hanya dapat memanggil method static lain di dalamnya. Sebagai contoh, buat method berikut pada class Program:

    public static void Ulang(char karakter, int jumlah) {
      for (int i = 1; i <= jumlah; i++) Console.Write(karakter);
      Console.WriteLine();
    }

Dan panggil method tersebut pada method Main:

Ulang('*', 30);

Program akan menampilkan karakter bintang 30 kali. Apabila kita mendeklarasikan method di atas pada class ContohMethod, kita memanggil method tersebut dengan cara:

ContohMethod.Ulang('*', 30);