Sobes.tech
Middle

Funksional proqramlaşdırma paradigması nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Funksional proqramlaşdırma paradigması, proqram təminatının qurulması üçün əsas prinsipi funksiyaların əsas tikinti blokları kimi istifadə edilməsinə əsaslanan bir tərzdədir. Bu, aşağıdakıları vurğulayır:

  • Təmiz funksiyalar: Eyni giriş məlumatları ilə həmişə eyni nəticəni verən və yan təsirləri olmayan funksiyalar (kənar vəziyyəti dəyişmir).
  • Məlumatların dəyişməzliyi: Məlumatlar yaradıldıqdan sonra dəyişdirilə bilməz. Hər hansı bir dəyişiklik yeni nüsxə yaradır.
  • Birinci sinif funksiyalar: Funksiyalar arqument kimi ötürülə bilər, digər funksiyalardan geri qaytarıla və dəyişənlərə təyin oluna bilər.
  • Dəyişdirilə bilən vəziyyətin olmaması: Proqram, dəyişdirilə bilən dəyişənlərin istifadəsini minimallaşdırmağa və ya tamamilə aradan qaldırmağa çalışır.

Üstünlüklər:

  • Yan təsirlərin olmaması səbəbi ilə ayıklama və testlərin sadələşdirilməsi.
  • Dəyişməz məlumatlarla işləyərkən kilidləməyə ehtiyac olmadan paralelliyi və çox ipli işləməni yaxşılaşdırır.
  • Daha oxunaqlı və əvvəlcədən proqnozlaşdırıla bilən kod.

Java-da funksional imkanlar, Java 8-in ortaya çıxması ilə aşağıdakı vasitələrlə həyata keçirilmişdir:

  • Lambda ifadələri.
  • Funksional interfeyslər.
  • Stream API.
  • Metodlara istinadlar.

Stream API istifadə nümunəsi, filtrləmə və çevirmə:

// Lazımi sinflərin idxalı
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

// Nümunə sayıların siyahısı
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

// Stream API istifadə edərək cüt ədədləri filtrləmək və 2 ilə vurmaq
List<Integer> processedNumbers = numbers.stream()
                                        .filter(n -> n % 2 == 0) // Cüt ədədləri filtrləmək
                                        .map(n -> n * 2)         // 2 ilə vurmaq
                                        .collect(Collectors.toList()); // Yeni siyahıya yığmaq

// Nəticəni göstərmək
// System.out.println(processedNumbers); // Çıxış: [4, 8, 12, 16, 20]