TUGAS DELEGATE, EVENT, DAN LAMBDAS 5108100038

11

description

Delegate, Event, dan Lambda dalam C#

Transcript of TUGAS DELEGATE, EVENT, DAN LAMBDAS 5108100038

Page 1: TUGAS DELEGATE, EVENT, DAN LAMBDAS 5108100038

 

Page 2: TUGAS DELEGATE, EVENT, DAN LAMBDAS 5108100038

 

Delegate

Delegates adalah type-safe method reference (pada C++ disebut method pointer). Dengan menggunakan delegates maka program dapat secara dinamis memanggil method pada saat runtime. Tujuan dari delegates yang sebenarnya adalah menyediakan infrastruktur untuk mensupport penggunaan Event.

Delegates merupakan reference type object yang mempunyai signature dan return type dari method. Delegate instance digunakan untuk merefer ke method. Semua method yang di refer oleh instance delegate harus mempunyai signatur yang sesuai dengan delegate nya. Cara penulisan delegate pada C# adalah:

[modifiers] delegate <return type> <delegate name>([parameter list]);

Proses Penggunaan Delegate

1. Mendefinisikan delegate. 2. Membuat instance dari delegate dan mendaftarkan method pada delegate tersebut. 3. Memanggil method melalui delegate. 4. Menghapus delegate bila tidak diperlukan lagi.

Page 3: TUGAS DELEGATE, EVENT, DAN LAMBDAS 5108100038

Gambar: Visualisasi penggunaan delegate

 

Berikut adalah gambar yang menunjukkan registration dan Invocation pada delegate:

Page 4: TUGAS DELEGATE, EVENT, DAN LAMBDAS 5108100038

Contoh penerapan delegate dengan menggunakan C#:

Saat program di-run:

Page 5: TUGAS DELEGATE, EVENT, DAN LAMBDAS 5108100038

 

Event Event adalah notifikasi otomatis bila terjadi sesuatu aksi. Terdapat beberapa operasi yang dapat dilakukan pada event:

Assignment dengan operator += Remove dengan operator -=

Event memiliki kaitan yang sangat erat dengan delegate. Keyword event diberikan pada saat instansiasi sebuah object delegate.

Event digunakan sebagai automatic notification ketika suatu action terjadi.  Pada C# event biasanya digunakan pada pemrograman GUI (Graphical User Interface), seperti button click, menu selection.

Cara untuk mendefinisikan event adalah sebagai berikut:

[modifiers] event [delegate] name;

 

Page 6: TUGAS DELEGATE, EVENT, DAN LAMBDAS 5108100038

Gambar: Contoh penggunaan event

 

Contoh penerapan event pada C# Windows Form Application:

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

namespace Percobaan_Lagi

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

 

Page 7: TUGAS DELEGATE, EVENT, DAN LAMBDAS 5108100038

        private void Form1_Click(object sender, EventArgs e)

        {

            MessageBox.Show("Form Diklik");

        }

    }

}

 

 

Saat di-run dan belum di-klik:

Saat di-klik muncul message box di bawah:

 

Lambdas

Sebuah ekspresi lambda adalah fungsi anonim yang dapat berisi ekspresi dan statements, dan dapat digunakan untuk membuat delegate atau ekspresi tree type.

Page 8: TUGAS DELEGATE, EVENT, DAN LAMBDAS 5108100038

Semua ekspresi lambda lambda menggunakan operator =>, yang dibaca sebagai "goes to". Sisi kiri dari operator lambda menunjukkan parameter input (jika ada) dan sisi kanan memegang ekspresi atau pernyataan blok. Ekspresi lambda x => x * x dibaca " x goes to x times x", Ekspresi ini dapat diterapkan ke tipe delegate sebagai berikut:

delegate int del(int i);

static void Main(string[] args)

{

    del myDelegate = x => x * x;

    int j = myDelegate(5); //j = 25

}

Untuk membuat ekspresi tree type:

using System.Linq.Expressions;

 

namespace ConsoleApplication1

{

    class Program

    {

        static void Main(string[] args)

        {

            Expression<del> myET = x => x * x;

        }

    }

}

 

Sebuah ekspresi lambda dengan sebuah ekspresi di bagian kanan disebut expression lambda. Expression Lambda digunakan secara ekstensif dalam pembentukan Ekspresi Tree. Bentuk dasar ekspression lambda:

(input parameters) => expression

Dua atau lebih parameter input dipisahkan koma dan diberi kurung:

(x, y) => x == y

Page 9: TUGAS DELEGATE, EVENT, DAN LAMBDAS 5108100038

Terkadang sangat sulit atau bahkan mustahil bagi compiler untuk menentukan tipe input. Untuk itu bisa digunakan bentuk berikut:

(int x, string s) => s.Length > x

Untuk input kosongan bisa digunakan kurung kosong:

() => SomeMethod()

Statement lambda dapat ditulis dengan:

(input parameters) => (statement;)

Contoh penerapan lambda dalam C#:

using System;

using System.Collections.Generic;

 

class Program

{

    static void Main(string[] args)

    {

        Console.WriteLine("***** Fun with Lambdas *****\n");

        TraditionalDelegateSyntax();

        Console.ReadLine();

    }

    static void TraditionalDelegateSyntax()

    {

        // Make a list of integers.

        List<int> list = new List<int>();

        list.AddRange(new int[] { 20, 1, 4, 8, 9, 44 });

        // Call FindAll() using traditional delegate syntax.

        Predicate<int> callback = new Predicate<int>(IsEvenNumber);

       List<int> evenNumbers = list.FindAll(callback);

        Console.WriteLine("Here are your even numbers:");

Page 10: TUGAS DELEGATE, EVENT, DAN LAMBDAS 5108100038

        foreach (int evenNumber in evenNumbers)

        {

            Console.Write("{0}\t", evenNumber);

        }

        Console.WriteLine();

    }

    // Target for the Predicate<> delegate.

    static bool IsEvenNumber(int i)

    {

        // Is it an even number?

        return (i % 2 == 0);

    }

}

Saat di-run: