Függényeket általában akkor írunk, ha egy programkódot, kódrészletet többször, akár különböző paraméterekkel szeretnénk végrehajtani. Akkor is hasznos, ha a kódunkat kisebb, logikai részekre szeretnénk bontani.

Van azonban egy fontos haszna még: a keretrendszer által generált különféle események (pl. egy gombra kattintás) kezelésére. Ebben az esetben általában csak egy helyen használnánk a függényt: az eseményre feliratkozáskor. Pl.:

public class Form1: Form
{
    Button btn = new Button();

    public Form1()
    {
        btn.Text = "Katt";
        this.Controls.Add(btn);
        // Nincs (), mert itt a btn_Clicked nem függvényhívás -
        // nem a végeredményt várjuk, hanem magára a függvényre hivatkozunk
        btn.Click += btn_Clicked;
    }

    private void btn_Clicked(object sender, EventArgs e)
    {
        MessageBox.Show("Kattintottal");
    }
}

A példában a btn_Clicked függvény csak azért szerepel, hogy a kattintás eseményre reagálhassunk. Nem fogjuk máskor meghívni, többször felhasználni, de mégis fel kellett vennünk egy külön függvényt. Vagy mégsem?

Lambda függvények

A névtelen (anonymous) függvény, vagy lambda függvény egy olyan függvény, amit rögtön a felhasználás helyén definiálunk. Ekkor még nevet sem kell adnunk, mivel később úgysem fogunk hivatkozni rá. A legtöbb programnyelven még a típusokat sem kell kiírni, mert a felhasználás helyéből kiderül, hogy a paramétereknek/visszatérési értéknek milyen típusúnak kell lennie.

A fenti példával ekvivalens lambda függvény:

(sender, e) => {
    MessageBox.Show("Kattintottal");
}

A teljes kód pedig:

public class Form1: Form
{
    Button btn = new Button();

    public Form1()
    {
        btn.Text = "Katt";
        this.Controls.Add(btn);
        btn.Click += (sender, e) => {
            MessageBox.Show("Kattintottal");
        };
    }
}

Ha nincs paraméter, akkor üres zárójeleket írunk. Megadhatunk visszatérési értéket is:

() => {
    Console.WriteLine("Esemeny");
    return 2;
}

Más programozási nyelveken

JavaScript

<button id='gomb'>Katt</button>
let button = document.getElementById('gomb');
button.addEventListener('click', () => { window.alert('Kattintottal'); });

Régebbi, kompatibilis szintaxissal:

let button = document.getElementById('gomb');
button.addEventListener('click', function() {
    window.alert('Kattintottal');
});

Java

Ugyanaz, mint C#-ban vagy JavaScript-ben, de a dupla => nyíl helyett -> szimpla nyilat használunk.

public class NewJFrame extends javax.swing.JFrame {
    public NewJFrame() {
        initComponents();

        jButton1.addActionListener((e) -> {
            JOptionPane.showMessageDialog(this, "Kattintottal");
        });
    }

A lambda függvények egyéb felhasználási területei (példák):

C#

Rendezzük ABC szerint csökkenő sorrendbe az alábbi osztály objektumait:

class Szemely
{
    public string Nev { get; private set; }
    public DateTime SzulDat { get; private set; }

    public Szemely(string nev, DateTime szulDat)
    {
        this.Nev = nev;
        this.SzulDat = szulDat;
    }
}

A rendezés:

var list = new List<Szemely>();
list.Add(new Szemely("Kovacs Bela", new DateTime(2000, 1, 1)));
list.Add(new Szemely("Molnar Julianna", new DateTime(1970, 10, 10)));
list.Add(new Szemely("Telapo", new DateTime(1600, 12, 6)));

// A Sort függvény egy összehasonlító függvényt vár paraméterként:
list.Sort((sz1, sz2) => {
    int compareResult = sz1.Nev.CompareTo(sz2.Nev);
    if (compareResult > 0)
    {
        return -1;
    }
    else if (compareResult < 0)
    {
        return 1;
    }
    else
    {
        return 0;
    }
});

Ugyanez tömörebben:

var list = new List<Szemely>();
list.Add(new Szemely("Kovacs Bela", new DateTime(2000, 1, 1)));
list.Add(new Szemely("Molnar Julianna", new DateTime(1970, 10, 10)));
list.Add(new Szemely("Telapo", new DateTime(1600, 12, 6)));

// A negatív előjel miatt fordított sorrendű lesz a rendezés
list.Sort((sz1, sz2) => -(sz1.Nev.CompareTo(sz2.Nev)));

A tömör példában, ha nem írunk kapcsos zárójeleket, akkor csak egy kifejezést lehet megadni, amit automatikusan visszatérési értékként használ fel.

PHP

Válogassuk ki a tömb nemnegatív elemeit:

$t = [4, -6, 234, -78.88, -9, 0];

// Az array_filter paramétere az egy elem kiválasztását eldöntő függvény
$kivalogatott = array_filter($t, function($elem) {
    return $elem >= 0;
});

A legtöbb programozási tételre létezik beépített függvény, a kiválogatási, összehasonlítási feltételeket pedig (lambda vagy hagyományos) függvényként lehet átadni.