Introduction |
|
xv | |
Chapter 1 Have A Beginner's Mind |
|
1 | (30) |
|
|
2 | (14) |
|
|
2 | (3) |
|
|
5 | (3) |
|
|
8 | (3) |
|
|
11 | (1) |
|
When You Really Do Need to Mutate |
|
|
12 | (3) |
|
|
15 | (1) |
|
|
16 | (1) |
|
Doing Object-Oriented Better |
|
|
16 | (7) |
|
Polymorphic Dispatch with defmulti |
|
|
18 | (2) |
|
Defining Types with deftype and defrecord |
|
|
20 | (1) |
|
|
21 | (1) |
|
|
22 | (1) |
|
Persistent Data Structures |
|
|
23 | (4) |
|
|
27 | (2) |
|
|
29 | (2) |
Chapter 2 Rapid Feedback Cycles With Clojure |
|
31 | (22) |
|
|
32 | (8) |
|
Basic REPL Usage with Leiningen |
|
|
32 | (2) |
|
|
34 | (1) |
|
REPL Usage with a Real Application |
|
|
35 | (4) |
|
Connecting Your Editor to a REPL |
|
|
39 | (1) |
|
|
40 | (11) |
|
Reloading Code from the REPL |
|
|
40 | (3) |
|
Automatically Reloading Code |
|
|
43 | (6) |
|
|
49 | (2) |
|
|
51 | (2) |
Chapter 3 Web Services |
|
53 | (46) |
|
|
53 | (2) |
|
|
54 | (1) |
|
Elements of a Web Service |
|
|
55 | (19) |
|
Libraries, Not Frameworks |
|
|
55 | (1) |
|
|
55 | (9) |
|
|
64 | (6) |
|
|
70 | (4) |
|
|
74 | (20) |
|
|
75 | (1) |
|
|
75 | (2) |
|
|
77 | (1) |
|
|
78 | (5) |
|
|
83 | (5) |
|
|
88 | (1) |
|
|
89 | (5) |
|
|
94 | (3) |
|
|
94 | (1) |
|
Compiling an Uberjar or Uberwar |
|
|
95 | (1) |
|
|
96 | (1) |
|
|
97 | (2) |
Chapter 4 Testing |
|
99 | (30) |
|
Testing Basics with clojure.test |
|
|
100 | (4) |
|
|
101 | (1) |
|
|
101 | (1) |
|
|
102 | (1) |
|
|
103 | (1) |
|
|
104 | (8) |
|
|
104 | (2) |
|
|
106 | (2) |
|
Mocking/Stubbing Using with-redefs |
|
|
108 | (2) |
|
|
110 | (1) |
|
|
111 | (1) |
|
|
112 | (7) |
|
Code Coverage with Cloverage |
|
|
112 | (2) |
|
Static Analysis with kibit and bikeshed |
|
|
114 | (2) |
|
Keeping Dependencies Under Control |
|
|
116 | (3) |
|
Testing Framework Alternatives |
|
|
119 | (8) |
|
|
119 | (1) |
|
|
119 | (1) |
|
|
120 | (6) |
|
|
126 | (1) |
|
|
127 | (2) |
Chapter 5 Reactive Web Pages In Clojurescript |
|
129 | (40) |
|
ClojureScript Is a Big Deal |
|
|
129 | (2) |
|
A First Brush with ClojureScript |
|
|
131 | (20) |
|
Starting a New ClojureScript Project |
|
|
132 | (1) |
|
Getting Fast Feedback with Figwheel |
|
|
132 | (2) |
|
|
134 | (1) |
|
|
135 | (1) |
|
Responding to Events and Handling State Change |
|
|
136 | (1) |
|
Understanding Errors and Warnings |
|
|
137 | (4) |
|
|
141 | (1) |
|
|
141 | (1) |
|
Form Inputs and Form Handling |
|
|
142 | (3) |
|
|
145 | (2) |
|
HTTP Calls: Talking to a Server |
|
|
147 | (2) |
|
|
149 | (1) |
|
|
150 | (1) |
|
|
151 | (8) |
|
Form 1: A Function That Returns a Vector |
|
|
151 | (1) |
|
Form 2: A Function That Returns a Component |
|
|
152 | (1) |
|
Form 3: A Function That Returns a Class |
|
|
153 | (1) |
|
|
154 | (1) |
|
|
155 | (1) |
|
|
156 | (2) |
|
|
158 | (1) |
|
Testing Components with Devcards |
|
|
159 | (3) |
|
|
162 | (2) |
|
One Language, One Idiom, Many Platforms |
|
|
164 | (1) |
|
Things to Know About the Closure Compiler and Library |
|
|
164 | (1) |
|
Modeling State with DataScript |
|
|
165 | (1) |
|
Go Routines in Your Browser with core.async |
|
|
166 | (1) |
|
|
167 | (2) |
Chapter 6 The Datomic Database |
|
169 | (48) |
|
|
170 | (18) |
|
|
170 | (2) |
|
|
172 | (3) |
|
|
175 | (6) |
|
|
181 | (2) |
|
Indexes Really Tie Your Data Together |
|
|
183 | (4) |
|
Datomic's Unique Architecture |
|
|
187 | (1) |
|
Modeling Application Data |
|
|
188 | (9) |
|
Example Schema for Task Tracker App |
|
|
188 | (8) |
|
Entity ids and Partitions |
|
|
196 | (1) |
|
|
197 | (9) |
|
|
197 | (3) |
|
Experimenting in the REPL |
|
|
200 | (6) |
|
Building Applications with Datomic |
|
|
206 | (9) |
|
|
206 | (3) |
|
|
209 | (1) |
|
|
210 | (3) |
|
|
213 | (1) |
|
|
214 | (1) |
|
|
215 | (2) |
Chapter 7 Performance |
|
217 | (18) |
|
|
219 | (1) |
|
Choosing the Right Data Structure Is a Prerequisite for Performance |
|
|
219 | (2) |
|
|
221 | (4) |
|
|
221 | (2) |
|
Use Criterium for Timing Fast Things |
|
|
223 | (2) |
|
Use Test Selectors for Performance Tests |
|
|
225 | (1) |
|
|
225 | (1) |
|
|
226 | (1) |
|
|
227 | (1) |
|
Persistent Data Structures |
|
|
228 | (1) |
|
Safe Mutation with Transients |
|
|
228 | (1) |
|
|
229 | (1) |
|
Avoiding Reflection with Type Hinting |
|
|
230 | (2) |
|
|
232 | (1) |
|
|
232 | (1) |
|
|
232 | (3) |
Index |
|
235 | |