OCA Java imtahan mövzuları

Lambda Example

Bildiyimiz kimi java obyekt yönümlü dildir. Amma 8-ci versiyada gələn yeniliklərlə java funksional proqramlaşdırma imkanlarını da özünə əlavə edib. Bunun üçün lambda ifadələrindən (lambda expressions) istifadə olunur. Lambda ifadələrini biz anonim metod kimi də başa düşə bilərik. Yəni real metodlarda olduğu kimi lambda ifadələrinin də parametr listi və gövdəsi olur, yeganə fərqi odur ki, adı olmur. Biz lambda ifadəsini metoda parametr olaraq da göndərə bilərik. Lambda ifadələrinə qısaca lambdas deyilir.

OCA imtahanında ancaq sadə lambda ifadələri soruşulur, məqsəd lambda ilə bağlı əsas anlayışları və sintaksisi mənimsətməkdir. Əsas lambda sualları çox güman OCP imtahanında soruşulacaq.

 

Lambda Example

Lambda ifadələrinin nə qədər faydalı ola biləcəyini görmək üçün ənənəvi qayda ilə yazılmış bir nümunəyə baxaq və sonra həmin nümunədə müvafiq kod nümunələrini lambda ifadələri ilə əvəz edərək müqayisə aparaq. Görək lambda ifadələri nə dərəcədə faydalıdır.

public class Animal {
    private String name;
    private boolean canHop;
    private boolean canSwim;
    
    public Animal(String speciesName, boolean hopper, boolean swimmer) {
        name = speciesName;
        canHop = hopper;
        canSwim = swimmer;
    }
    
    public boolean canHop() { return canHop; }
    public boolean canSwim() { return canSwim; }
    public String toString() { return name; }  // P.S.
}
public interface Checker {
    boolean test(Animal a);
}
public class CheckIfHopper implements Checker {
    
    @Override
    public boolean test(Animal a) {
        return a.canHop();
    }
}
public class TraditionalSearch {
    
    public static void main(String[] args) {
        List<Animal> animals = new ArrayList<>();
        animals.add(new Animal("fish", false, true));
        animals.add(new Animal("kangaroo", true, false));
        animals.add(new Animal("rabbit", true, false));
        animals.add(new Animal("turtle", false, true));
        animals.add(new Animal("frog", true, true));

        print(animals, new CheckIfHopper());
    }

    private static void print(List<Animal> animals, Checker checker) {
        for (Animal animal: animals) 
            if (checker.test(animal)) 
                System.out.println(animal);
    }
}

Output:

kangaroo
rabbit
frog

P.S. toString() metodu ovverride olunduğuna görə biz animal`ı print edəndə toString metodundan geri döndürdüyümüz dəyər print olunur.

Yuxarıdakı kodun gördüyü iş qısaca ondan ibarətdir ki, bizdə heyvanların listi var və biz bilmək istəyirik ki, bu heyvanlardan hansılar hoppanmağı bacarır. print() metodu bizim təyin etdiyimiz şərtə uyğun olaraq hoppanmağı bacaran heyvanların siyahısını bizə göstərir. Bəs biz əgər üzməyi bacaran heyvanların siyahısını görmək istəsək nə baş verəcək? Təəssüf ki, bunun üçün bizə başqa class lazım olacaq, CheckIfSwims classı yaratmalıyıq. Classı yaratdıqdan sonra isə nəticəni görmək üçün yenidən print() metodunu çağırmalıyıq, bu dəfə isə parametr olaraq new CheckIfSwims() göndərməliyik, yəni yeni obyekt yaradılır. Başqa bir yoxlama üçün artıq əlavə olaraq 2 iş gördük. Bu əlavə işlərdən bizi lambdas xilas edir. Lambdas ilə yazdıqda TraditionalSearch classında sadəcə 14-cü sətir aşağıdakı sətirlə əvəz olunur:

14:  print(animals, a -> a.canHop());

və ya

14:  print(animals, (Animal a) -> { return a.canHop(); } );

Kodu lambdas ilə əvəz etdiyimizə görə artıq bizə CheckIfHopper classı lazım olmayacaq. Plyus əgər biz üzməyi bacaran heyvanları seçmək istəsək əlavə class yaratmağa ehtiyac qalmayacaq, bir sətirlə biz bunu edə bilərik:

    print(animals, a -> a.canSwim());

və ya üzməyi bacarmayanlar:

    print(animals, a -> ! a.canSwim());

Biz burada sadəcə 2 davranışı göstərdik, təsəvvür edin sizdən yalnız hoppanmaq və üzmək deyil, bir neçə xüsusiyyət üzrə filter etmək tələb olunur. Bu zaman lamdas-ın önəmi daha çox nəzərə çarpacaq. Növbəti məqalədə Lambda`nın sintaksisinə nəzər salacağıq.

 

[topics lang=az]

About the author

Mushfiq Mammadov

Leave a Comment


The reCAPTCHA verification period has expired. Please reload the page.

 

This site uses Akismet to reduce spam. Learn how your comment data is processed.