Functional programming is gaining momentum nowadays and many languages like F#, RUST, and GO are some of the popular languages which promote functional programming.
Functional programming is the process of building software by composing pure functions, avoiding shared state, mutable data, and side-effects. Functional programming is declarative rather than imperative, and the application state flows through pure functions. Contrast with object-oriented programming, where the application state is usually shared and colocated with methods in objects.
Functional programming is a programming paradigm, meaning that it is a way of thinking about software construction based on some fundamental, defining principles (listed above). Other examples of programming paradigms include object-oriented programming and procedural programming.
Functional code tends to be more concise, more predictable, and easier to test than imperative or object-oriented code — but if you’re unfamiliar with it and the common patterns associated with it, functional code can also seem a lot denser, and the related literature can be impenetrable to newcomers.