Let’s shortly present these paradigms and show some examples then we will summarize a table to compare them.
Functional Programming is a technique that mainly depends on evaluating functions and developing the code structure. The primary goal is here to get input data on one side, process the data then produce the output result on the other side. We try to organize our functions as pure functions if it is possible, this is because the outputs of a function purely rely on arguments of the function and there is no mystery magic that is happening behind the scenes, this is called removing side effects in your code.
Functional languages are good when you have a fixed set of things, and as your code evolves, you primarily add new operations to existing things. This can be accomplished by adding new functions that compute with existing data types, and the existing functions are left alone.
Functional programming provides efficiency, bug-free code, nested functions, and simple programming. Each small function does only its job and can be easily invoked and re-invoked at any time. It helps the code to be managed and statements do not need to be double written. It makes it very modular and harmonically working clean code.
Here is an example of a signup page functionality;
Here we have 5 functions, almost all of them are pure functions with the exception of signupHandler. First, a validation control function(validate) is defined and it is called inside of createUser function which was defined right after it.
Rest of the functions are dealing with HTML form connection. getUserInput function returns values from input fields inside of signupHandler function which contains previously defined createUser function. connectForm function links and adds a event listener on the HTML form to trigger signupHandler function when user submits the form.
Object-Oriented Programming is a technique that uses abstraction to create models based on the real world. These object models represent things that we are programming about. These objects can be data structures and can hold data in their attributes and these attributes can be changed through methods(functions) that belong to the other objects or the same object.
For example, we might have an Account object that represents all of the data an account would have: balance, account owner, pin code, expiry date. Those will be the attributes, then the account object would have methods such as deposit money, withdraw money, close account. These would be functions that can manipulate data that object stores.
Object-oriented languages are good when you have a fixed set of operations on things, and as your code evolves, you primarily add new things. This can be accomplished by adding new classes that implement existing methods, and the existing classes are left alone.
One of the biggest advantages of Object-Oriented Programming is that the developer can encapsulate data from outsiders. Encapsulation is the ability to hide variables within classes from outside access. This way the app will not leak any sensitive data and be much more secure.
Here is the previous signup form example with object-oriented style;
Here we have 3 classes that handle all the things needed for signup HTML form to work. Our Validator class has only static methods and attributes so it is never instantiated and User class has the basic blueprint for user that will be created on signup and has ability to print our user details on console when we want to. UserInputForm handles everything related to submitting the form, signupHandler method is making use of Validate class to check inputs on the form and instantiates User class with valid parameters then prints out created User instance information.
Both paradigms have their use cases and the question shouldn’t be which one is better than the other. The question should be which one is better solution for my/your problem. At the end of the day the developer is responsible for their own solution and free to select which tools or methods to use.
I will leave you with visual summary of comparison between two methods;