Skip to content
Javlon's Blog
Ortga qaytish

Functional Interface

Nima uchun kerak?

Funksional dasturlash tillaridan OOPga yoʻnaltirilgan tilga oʻtgan vaqtlarimda function va method bitta tushunchami degan savolga duch kelganman. Va ular oʻxshash boʻlsada bir-biridan farqli jihatlarini topganman.

Function bu hech qanday class yoki obyektga bogʻliq boʻlmagan holda mustaqil mavjud boʻla oladigan funksionallik. Method esa aksincha, ular albatta biror obyekt yoki classga tegishli boʻlishi kerak.

Java 8 da qoʻshilgan foydali xususiyatlardan biri bu — Functional Interface hisoblanadi.

Functional Interface’ning asosiy maqsadi — Java-ga Funksional dasturlash unsurlarini olib kirish va Lyambda (->) ifodalarini ishlatish uchun asos boʻlib xizmat qiladi.

Functional Interface yordamida yuqoridagi aytganimdek methodlarni xuddi mustaqil functionlardek ishlata olish, methodning oʻzini oʻzgaruvchi kabi metodlarga argument sifatida uzatish imkonini beradi.

Qanday foydalanamiz?

Functional interface yaratish uchun faqat bitta abstract methodga ega boʻlgan interface yaratish shart. Koʻp ham, oz ham emas. @FunctionalInterface annotatsiyasini qoʻyish majburiy emas, lekin u qoʻyilsa, kompilyator interfeysda ikkinchi abstrakt metod qoʻshilib ketmasligini va qoidaga amal qilinganini tekshirib turadi.

@FunctionalInterface
public interface MathOperation {

    double calculate(double a, double b);
}MathOperation.java
public class Main1 {
    public static void main(String[] args) {
        
        MathOperation addition = (a, b) -> a + b;
        MathOperation subtraction = (a, b) -> a - b;
        MathOperation multiplication = (a, b) -> a * b;
        MathOperation division = (a, b) -> b != 0 ? a / b : 0;
    
        System.out.println("Qoʻshish: " + addition.calculate(20, 10));      
        System.out.println("Ayrish: " + subtraction.calculate(20, 10));
        System.out.println("Koʻpaytirish: " + multiplication.calculate(20, 10));
        System.out.println("Boʻlish: " + division.calculate(20, 10));

        Runnable task = () -> System.out.println("Task1");
    }
}Main1.java

Chiqish:

Qoʻshish: 30.0
Ayrish: 10.0
Koʻpaytirish: 200.0
Boʻlish: 2.0

Java 8 dan boshlab qator classlarda functional interface ishlatish mumkin.

public class Main2 {
    public static void main(String[] args) {
        Runnable task = () -> System.out.println("Task1");
    }
}Main2.java

Aynan Runnable interface’ning oʻzi ham functional interface hisoblanadi:

package java.lang;

@FunctionalInterface
public interface Runnable {
    /**
     * Runs this operation.
     */
    void run();
}Runnable.java

java.util.function paketida 40 dan ortiq tayyor functional interfacelar mavjud. Ulardan eng koʻp ishlatiladiganlari:

InterfeysAbstrakt MetodVazifasiMisol (Lambda)
Predicateboolean test(T t)Shartni tekshiradi (true/false qaytaradi).str -> str.isEmpty()
Consumervoid accept(T t)Qiymatni qabul qiladi, hech narsa qaytarmaydi.val -> System.out.println(val)
SupplierT get()Argument olmaydi, lekin qiymat qaytaradi.() -> Math.random()
Function<T, R>R apply(T t)T tipidagi qiymatni qabul qilib, R tipiga oʻzgartirib qaytaradi.str -> str.length()

Obuna Bo'ling

Yangi maqolalar va qisqa qaydlarni telegram kanalimda kuzatib boring.


Ulashish:

Oldingi post
Energiya
Keyingi post
Yodlashdan bogʻlashgacha