В мире программирования доступны различные парадигмы программирования. Мир программирования состоит из множества языков, которые поддерживают определенные парадигмы программирования. Эти парадигмы программирования помогают нам структурировать наш код и эффективно решать сложные проблемы.

Когда мы изучаем новый язык программирования, мы изучаем множество тем, таких как переменные, условные операторы (if, switch), итеративные операторы (for, while, do- while), функции и массивы. Это основные концепции программирования. Используя эти концепции, мы пишем код последовательно. Это называется императивное программирование.

Допустим, я хочу вычислить факториал числа, тогда мы можем использовать класс BufferedReader и InputStreamClass из библиотеки Java для приема входных данных от пользователя. Затем реализуйте структуру цикла и в конце напечатайте факториал.

Мы выполнили императивное программирование следующим образом:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public static void main(String[] args) throws NumberFormatException, IOException 
 {
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  System.out.print("Enter a number: ");
  int number = Integer.parseInt(br.readLine());
        int factorial = 1;
        for (int i = 1; i <= number; i++) {
            factorial *= i;
        }

        System.out.println("Factorial of " + number + " is: " + factorial);
 }

В императивном программировании мы указываем все, что хотим сделать, шаг за шагом. Вот результат, который мы получаем:

Вы можете ясно видеть, что кода слишком много. Этот последовательный подход хорош, но неэффективен.

Используя методы функционального программирования, тот же код можно переписать так:

import java.util.Scanner;
import java.util.stream.LongStream;

public static void main(String[] args) 
 {
   Scanner sc = new Scanner(System.in);
   System.out.print("Enter a number: ");
   int number = sc.nextInt();
   sc.close();
   System.out.println("Factorial of " + number + " is: " + 
   LongStream.rangeClosed(1, number).reduce(1, (x, y) -> x * y));
 }

Очевидно, что мы используем меньше кода, используя конструкции функционального программирования. Вот результат:

Я использую Java, но существует множество языков программирования, таких как Kotlin, Python и т. д., которые поддерживают несколько парадигм программирования.

Понимание функционального программирования

Давайте посмотрим на изображение ниже:

Рассматривайте резервуар для воды как контейнер для наших данных. Резервуар для воды заполнен водой и не может быть изменен напрямую. Аналогично, в функциональном программировании данные рассматриваются как неизменяемые (не могут быть изменены).

Чтобы получить воду из бака, должен быть проход, через который может течь вода. Это наш конвейер, действующий как функция. Точно так же, как трубы перенаправляют воду из одного места в другое, функции функционального программирования преобразуют данные из одного состояния в другое.

Кроме того, эти функции являются чистыми по своей природе, поскольку они не меняют исходные данные, точно так же, как труба не меняет воду в резервуаре на что-то другое. Он просто пропускает воду (передаёт данные).

Мы реализовали проход для получения воды. Теперь пришло время набрать воду, позволив трубе забирать воду из резервуара. Вот тут-то и появляется tap. Предположим, что касание — это приложение нашей функции. Поворот крана позволяет воде течь по трубе, аналогично применению функции к данным, которое предполагает передачу данных в качестве входных данных в функцию, чтобы в результате получить вновь преобразованные данные.

Это краткое введение в функциональное программирование. Я окунусь глубже в своих следующих постах.

✍🏽автор: Аджит Кумар Саху