@dempfi
Best practices,
exploring!
@dempfi
Software Engineer at VChain
Ike Ku
!
@dempfi
Эээ..?
@dempfi
Первые годные планеры
188x Полет Уйтхэда
1901 Полет братьев Райт
1903
Математика крыла
191x Серийный тяжелый самолет
1917 Формула Глоэрта
1928
@dempfi
500,000 проданных копий
41 переизданий
Design Patterns: Elements of
Reusable Object-Oriented Software
Банда четырех
1994
@dempfi
Композиция
@dempfi
toLower: String !" String
log: Number !" Number
not: Boolean !" Boolean
length: String !" Number
isOdd: Number !" Boolean
@dempfi
String
Number
Boolean
length isOdd
toLower not
log
@dempfi
(length ◦ isOdd)(x) ""# isOdd(length(x))
length ◦ toLower ""# length ""# log ◦ length
String
Number
Boolean
length isOdd
length ◦ isOdd
toLower not
log
@dempfi
f ◦ (g ◦ h) ""# (f ◦ g) ◦ h
1ᴮ ◦ f ""# f ""# f ◦ 1ᴬ
A
B
C
f g
f ◦ g
1ᴬ 1&
1ᴮ
@dempfi
Don’t Repeat Youself
@dempfi
A
B
C
f
g
h
f: A !" B
g: A !" B
h: B !" C
@dempfi
A
B
C
f
g
h
h ◦ g
h ◦ f
h ◦ f ""# h ◦ gh ◦ f ""# h ◦ g
@dempfi
toLower: String !" String
toUpper: String !" String
length: String !" Number
length ◦ toUpper !!$ length ◦ toLower
@dempfi
https://hoogle.haskell.org/?hoogle=String->String
@dempfi
Keep It Simple, Stupid
@dempfi
@dempfi
A
B
D
C
E
f
g
h
k
@dempfi
A
B
D
C
E
f
g
h ◦ g
h
k
@dempfi
f: A !" B
g: A !" C
k: A !" D
h: C !" E
t: A !" E !!# h ◦ g
@dempfi
A
B
D
C
E
f
m
h
l
@dempfi
l ◦ (m ◦ f)
A
B
D
C
E
f
m
h
m ◦ f
l ◦ m
h ◦ m
h ◦ (m ◦ f)
l
@dempfi
f: A !" B
m: B !" C
l: C !" D
h: C !" E
g: A !" C !!# m ◦ f
k: A !" D !!# l ◦ g !!# l ◦ (m ◦ f)
t: A !" E !!# h ◦ g !!# h ◦ (m ◦ f)
u: B !" E !!# h ◦ m
j: B !" D !!# l ◦ m
@dempfi
id: a !" a
@dempfi
❤
@dempfi
Embrace abstraction
@dempfi
DRY + KISS
@dempfi
Separation of Concerns
@dempfi
@dempfi
@dempfi
!
Спасибо
за внимание!

Best practices. Exploring - Ike Kurghinyan (RUS) | Ruby Meditation 26