Behind every programming language lies a vision of how programs should be built. The vision behind Clojure is of a radically simple language framework holding together a sophisticated collection of programming features. Learning Clojure involves much more than just learning the mechanics of the language. To really get Clojure you need to understand the ideas underlying this structure of framework and features. You need this book: an accessible introduction to Clojure that focuses on the ideas behind the language as well as the practical details of writing code.
Clojure attracts developers on the cutting edge and is arguably the best language for learning to program in the functional style without compromise. But this comes with a steep learning curve. Getting Clojure directly addresses this by teaching you how to think functionally as it teaches you the language. You'll learn about Clojure's powerful data structures and high-level functions, but you'll also learn what it means for a language to be functional, and how to think in Clojure's functional way.
Each chapter of Getting Clojure takes a feature or two or three from the language, explains the syntax and the mechanics behind that feature so that you can make it work before digging into the deeper questions: What is the thinking behind the feature? And how does it fit in with the rest of the language? In Getting Clojure you'll learn Clojure's very simple syntax, but you'll also learn why that syntax is integral the way the language is constructed. You'll discover that most data structures in Clojure are immutable, but also why that leads to more reliable programs. And you'll see how easy it is to write Clojure functions and also how you can use those functions to build complex and capable systems.
With real-world examples of how working Clojure programmers use the language, Getting Clojure will help you see the challenges of programming through the eye of experienced Clojure developers.
What You Need:
You will need to some background in programming. To follow along with the examples in the book, you will need Java 6 or new, Clojure 1.8 or 1.9, and Leiningen 2.
Author(s): Russ Olsen
Edition: 1
Publisher: Pragmatic Bookshelf
Year: 2018
Language: English
Pages: 290
City: Raleigh, NC
Cover
Table of Contents
Acknowledgments
Preface
Who Is This Book For?
How Is This Book Organized?
About the Code Examples
Online Resources
Part I—Basics
1. Hello, Clojure
The Very Basics
Arithmetic
Not Variable Assignment, but Close
A Function of Your Own
In the Wild
Staying Out of Trouble
Wrapping Up
2. Vectors and Lists
One Thing After Another
A Toolkit of Functions
Growing Your Vectors
Lists
Lists versus Vectors
Staying Out of Trouble
In the Wild
Wrapping Up
3. Maps, Keywords, and Sets
This Goes with That
Keywords
Changing Your Map Without Changing It
Other Handy Map Functions
Sets
In the Wild
Staying Out of Trouble
Wrapping Up
4. Logic
The Fundamental If
Asking Questions
Truthy and Falsy
Do and When
Dealing with Multiple Conditions
Throwing and Catching
In the Wild
Staying Out of Trouble
Wrapping Up
5. More Capable Functions
One Function, Different Parameters
Arguments with Wild Abandon
Multimethods
Deeply Recursive
Docstrings
Pre and Post Conditions
Staying Out of Trouble
In the Wild
Wrapping Up
6. Functional Things
Functions Are Values
Functions on the Fly
A Functional Toolkit
Function Literals
In the Wild
Staying Out of Trouble
Wrapping Up
7. Let
A Local, Temporary Place for Your Stuff
Let Over Fn
Variations on the Theme
In the Wild
Staying Out of Trouble
Wrapping Up
8. Def, Symbols, and Vars
A Global, Stable Place for Your Stuff
Symbols Are Things
Bindings Are Things Too
Varying Your Vars
Staying Out of Trouble
In the Wild
Wrapping Up
9. Namespaces
A Place for Your Vars
Loading Namespaces
A Namespace of Your Own
As and Refer
Namespaces, Symbols, and Keywords
In the Wild
Staying Out of Trouble
Wrapping Up
Part II—Intermediate
10. Sequences
One Thing After Another
A Universal Interface
A Rich Toolkit …
… Made Richer with Functional Values
Map
Reduce
Composing a Solution
Other Sources of Sequences
In the Wild
Staying Out of Trouble
Wrapping Up
11. Lazy Sequences
Sequences Without End
More Interesting Laziness
Lazy Friends
Laziness in Practice
Behind the Scenes
Staying Out of Trouble
In the Wild
Wrapping Up
12. Destructuring
Pry Open Your Data
Getting Less than Everything
Destructuring in Sequence
Destructuring Function Arguments
Digging into Maps
Diving into Nested Maps
The Final Frontier: Mixing and Matching
Going Further
Staying Out of Trouble
In the Wild
Wrapping Up
13. Records and Protocols
The Trouble with Maps
Striking a More Specific Bargain with Records
Records Are Maps
The Record Advantage
Protocols
Decentralized Polymorphism
Record Confusion
In the Wild
Staying Out of Trouble
Wrapping Up
14. Tests
Spotting Bugs with clojure.test
Testing Namespaces and Projects
Property-Based Testing
Checking Properties
Staying Out of Trouble
In the Wild
Wrapping Up
15. Spec
This Is the Data You’re Looking For
Spec’ing Collections
Registering Specs
Spec’ing Maps (Again)
Why? Why? Why?
Function Specs
Spec-Driven Tests
Staying Out of Trouble
In the Wild
Wrapping Up
Part III—Advanced
16. Interoperating with Java
A Peek at Java …
… And Back to Clojure
Packages
Class Methods and Fields
In the Wild
Staying Out of Trouble
Wrapping Up
17. Threads, Promises, and Futures
Great Power …
… And Great Responsibility
Good Fences Make Happy Threads
Promise Me a Result
A Value with a Future
Staying Out of Trouble
In the Wild
Wrapping up
18. State
It’s Made of Atoms
Swapping Maps
Refs: Team-Oriented Atoms
Agents
Choose Wisely
In the Wild
Staying Out of Trouble
Wrapping Up
19. Read and Eval
You Got Data On My Code!
Reading and Evaluating
The Homoiconic Advantage
An Eval of Your Own
In the Wild
Staying Out of Trouble
Wrapping Up
20. Macros
There Are Three Kinds of Numbers in the World
Macros to the Rescue
Easier Macros with Syntax Quoting
In the Wild
Staying Out of Trouble
Wrapping Up
21. Conclusion
Index
– SYMBOLS –
– DIGITS –
– A –
– B –
– C –
– D –
– E –
– F –
– G –
– H –
– I –
– J –
– K –
– L –
– M –
– N –
– O –
– P –
– Q –
– R –
– S –
– T –
– U –
– V –
– W –
– Z –