Menu
CoddyTech

Extension method

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C# di Coddy. Pelajaran 39 dari 70.

Extension methods memungkinkan kamu menambahkan method baru ke tipe yang sudah ada tanpa mengubah kode sumbernya atau membuat class turunan. Method ini tampak seperti method bawaan tipe tersebut, sehingga kodemu lebih mudah dibaca dan dipahami.

Untuk membuat extension method, definisikan method static di dalam class static, dengan parameter pertama yang didahului kata kunci this:

public static class StringExtensions
{
    public static int WordCount(this string str)
    {
        return str.Split(' ').Length;
    }
}

Sekarang kamu dapat memanggil method ini langsung pada string apa pun:

string sentence = "Hello World Today";
int count = sentence.WordCount();  // 3

Parameter this string str memberi tahu kompiler bahwa method ini memperluas tipe string. Saat kamu memanggil sentence.WordCount(), kompiler menerjemahkannya menjadi StringExtensions.WordCount(sentence) di balik layar.

Extension method juga dapat menerima parameter tambahan:

public static bool IsLongerThan(this string str, int length)
{
    return str.Length > length;
}

// Penggunaan
bool result = "Hello".IsLongerThan(3);  // true

Teknik ini banyak digunakan di LINQ, tempat method seperti Where() dan Select() menjadi extension method untuk IEnumerable. Extension method sangat berguna untuk menambahkan fungsi utilitas ke tipe yang tidak kamu kendalikan, sehingga kodemu tetap rapi dan ekspresif.

challenge icon

Tantangan

Mudah

Mari buat sekumpulan extension method yang berguna untuk bilangan bulat dan menambahkan fungsi praktis yang biasanya kamu harapkan sudah tersedia. Kamu akan membuat class static yang berisi extension method yang dapat dipanggil langsung pada bilangan bulat apa pun, sehingga kodemu lebih ekspresif dan mudah dibaca.

Kamu akan menyusun kodemu dalam dua file:

  • IntExtensions.cs: Buat class static bernama IntExtensions di namespace Utilities. Class ini akan berisi extension method yang meningkatkan tipe int:
    • IsEven() - mengembalikan true jika bilangan tersebut genap, dan false jika tidak
    • Square() - mengembalikan hasil perkalian bilangan tersebut dengan dirinya sendiri
    • IsInRange(int min, int max) - mengembalikan true jika bilangan tersebut berada di antara min dan max (inklusif), dan false jika tidak
    Ingat bahwa extension method harus berupa method static di dalam class static, dengan parameter pertama menggunakan kata kunci this untuk menentukan tipe yang kamu perluas.
  • Program.cs: Di file utama, baca bilangan bulat dari input dan tunjukkan penggunaan ketiga extension method. Panggil setiap method langsung pada bilangan bulat seolah-olah method tersebut sudah tersedia secara bawaan, lalu cetak hasilnya.

Kamu akan menerima tiga input:

  • Bilangan yang akan diuji (bilangan bulat)
  • Nilai minimum untuk pemeriksaan rentang (bilangan bulat)
  • Nilai maksimum untuk pemeriksaan rentang (bilangan bulat)

Cetak output dengan format ini:

Is {number} even? {True/False}
Square of {number}: {result}
Is {number} in range [{min}-{max}]? {True/False}

Misalnya, jika inputnya adalah 7, 5, dan 10, outputnya akan seperti ini:

Is 7 even? False
Square of 7: 49
Is 7 in range [5-10]? True

Perhatikan betapa alami kamu dapat menulis number.IsEven() dan number.Square(). Extension method ini terasa seperti sudah selalu menjadi bagian dari tipe bilangan bulat!

Coba sendiri

using System;
using Utilities;

class Program
{
    public static void Main(string[] args)
    {
        // Baca input
        int number = Convert.ToInt32(Console.ReadLine());
        int min = Convert.ToInt32(Console.ReadLine());
        int max = Convert.ToInt32(Console.ReadLine());

        // TODO: Gunakan method ekstensi pada 'number' dan cetak hasilnya
        // Panggil number.IsEven(), number.Square(), dan number.IsInRange(min, max)
        // Cetak dengan format berikut:
        // Apakah {number} genap? {True/False}
        // Kuadrat dari {number}: {result}
        // Apakah {number} berada dalam rentang [{min}-{max}]? {True/False}

    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler C# online