From Objects to Functions
Build Your Software Faster and Safer with Functional Programming and Kotlin
by: Uberto Barbini
Published | 2023-09-14 |
---|---|
Internal code | uboop |
Print status | In Print |
Pages | 468 |
User level | Intermediate |
Keywords | functional programming, oop, object-oriented, kotlin, java, design patterns, |
Related titles | vskotlin |
ISBN | 9781680508451 |
Other ISBN |
Channel epub: 9798888650462 Channel PDF: 9798888650479 Safari: 9798888650455 |
BISACs | COM051210 COMPUTERS / Programming / Object OrientedCOM051280 COMPUTERS / Programming Languages / JavaCOM051280 COMPUTERS / Programming Languages / Java |
Highlight
Build applications quicker and with less effort using functional programming and Kotlin. Learn by building a complete application, from gathering requirements to delivering a microservice architecture following functional programming principles. Learn how to implement CQRS and EventSourcing in a functional way to map the domain into code better and to keep the cost of change low for the whole application life cycle.
If you’re curious about functional programming or you are struggling with how to put it into practice, this guide will help you increase your productivity composing small functions together instead of creating fat objects.
Description
Switching to the functional paradigm isn’t easy when you’re used to object-oriented programming. You need more than just lambdas and mapping over collections to get a declarative style and disentangle the state from the computations. Use transformations and compositions to help you write less code with better results. Boost your productivity and harness the power of functional programming by creating real-world applications rather than focusing on theoretical concepts.
Work through a series of short exercises to find and compose pure functions, and create data structures that work like algebra. Get rid of mutable state in your software to eliminate the main source of bugs. Apply CQRS and EventSourcing patterns to translate stakeholder requirements into functional design and then into code. See how Kotlin’s easy-to-learn syntax and functional-friendly approach make it a great option for a pragmatic language that integrates well with existing Java code and libraries.
Leverage functional programming to build and deliver robust applications in less time and with fewer defects.
Contents and Extracts
- Acknowledgments
- Preface
- About This Book
- Introduction: Why Functional Programming?
- Why Kotlin?
- What Functional Programming Is Really About
- Unlearning Object-Oriented Programming
- Recap
- Preparing a New Application
- Defining the Sample Application
- Zettai: An Innovative To-Do List Application
- Letting Tests Guide Development
- Setting Up the Project
- Making Unit Tests Functional
- Recap
- Exercises
- Handling HTTP Using Functions
- Kicking Off the Project
- Serving HTML Pages Functionally
- Starting Zettai
- Designing with Arrows
- Serving Lists from a Map
- Recap
- Exercises
- Defining the Domain and Testing It
- Improving the Acceptance Tests
- Using Higher-Order Functions
- Separating the Domain from the Infrastructure
- Driving the Tests from the Domain
- Converting DDT to Pesticide
- Recap
- Exercises
- Modeling the Domain and the Adapters
- Starting a New Story to Modify a List excerpt
- Using Functional Dependency Injection
- Debugging Functional Code
- Functional Domain Modeling
- Recap
- Exercises
- Using Events to Modify the State
- Creating and Displaying To-Do Lists
- Storing the State Changes
- Unleashing the Power of Recursion
- Folding Events
- Discovering the Monoid
- Recap
- Exercises
- Executing Commands to Generate Events
- Creating a New List
- Using Commands to Change the State
- Modeling the Domain with States and Events
- Writing Functional State Machines
- Connecting the Hub
- Understanding Commands and Events Better
- Recap
- Exercises
- Handling Errors Functionally
- Handling Errors Better
- Learning Functors and Categories
- Using Functors to Handle Errors
- Working with Outcomes
- Recap
- Exercises
- Using Functors to Project Events
- Projecting Our Events
- Running Queries on Functors
- Thinking in Terms of Functors
- Command and Query Responsibility Segregation (CQRS)
- Recap
- Exercises
- Using Monads to Persist Data Safely
- Persisting Safely
- Connecting to the Database with Kotlin
- Accessing Remote Data in a Functional Way
- Exploring the Power of Monads
- Recap
- Exercises
- Reading Context to Handle Commands
- Accessing the Database with Monads excerpt
- Handling Commands with Context Reader
- Querying Projections from Database
- Modeling the Domain with Event Sourcing
- Recap
- Exercises
- Validating Data with Applicatives
- Renaming a List
- Transforming Functions with Two Parameters
- Validating with Validations
- Combining Applicative Functors
- Improving the User Interface
- Recap
- Exercises
- Monitoring and Functional JSON
- Monitoring Our Application
- Structured Logging
- Making JSON Functional
- Meeting Profunctors
- Logging Database Calls
- Recap
- Exercises
- Designing a Functional Architecture
- Chasing Simplicity
- Designing a Whole System
- Translating to Code
- Final Considerations
- Exercises
- What Is Functional Programming?
- The Origins
- Achieving Referential Transparency
- Think in Morphisms
- Recap
- About Functional Kotlin
- Setting Up Kotlin
- Kotlin 101
- Exploring the Kotlin Type System
- A Pinch of Theory
- Category Theory
- It’s All About Morphisms
- Types over Types
- Functors Are Mappers
- The Mysterious Monad
- Connecting Everything with Yoneda
- Conclusion
- Additional Resources
- Programming
- Category Theory