Programming in handstand
-
Upload
attila-magyar -
Category
Engineering
-
view
638 -
download
4
description
Transcript of Programming in handstand
![Page 1: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/1.jpg)
Programming in handstand
PHP Meetup, 2014. 04. 23.
![Page 2: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/2.jpg)
Programming in handstand
Attila Magyar (@athoshun)http://athoshun.eu
2/149
![Page 3: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/3.jpg)
Programming in handstand
Attila Magyar (@athoshun)http://athoshun.eu
http://balabit.com
3/149
![Page 4: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/4.jpg)
Programming in handstand
Attila Magyar (@athoshun)http://athoshun.eu
http://balabit.com
Rafael Ördög (@devillsroom)http://c0de-x.comhttp://leanpoker.org
4/149
![Page 5: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/5.jpg)
Programming in handstand
Attila Magyar (@athoshun)http://athoshun.eu
http://balabit.com
Rafael Ördög (@devillsroom)http://c0de-x.comhttp://leanpoker.org
http://coderetreat.orghttp://www.meetup.com/Coderetreat-Budapest/
5/149
![Page 6: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/6.jpg)
Programming in handstand
Attila Magyar (@athoshun)http://athoshun.eu
http://balabit.com
Rafael Ördög (@devillsroom)http://c0de-x.comhttp://leanpoker.org
http://coderetreat.orghttp://www.meetup.com/Coderetreat-Budapest/
Gergely Nagy (@algernoone)http://asylum.madhouse-project.org/http://syslog-ng.org/
6/149
![Page 7: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/7.jpg)
FizzBuzz
Write a program that iterates through the numbers from 1 to 100 and:
For multiples of 3 print "Fizz" For multiples of 5 print "Buzz" For numbers which are multiples of both 3
and 5 print "FizzBuzz" For others, print the number itself
7/149
![Page 8: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/8.jpg)
FizzBuzz
Write a program that iterates through the numbers from 1 to 100 and:
For multiples of 3 print "Fizz" For multiples of 5 print "Buzz" For numbers which are multiples of both 3
and 5 print "FizzBuzz" For others, print the number itself
1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz,11, Fizz, 13, 14, FizzBuzz, 16, 17, Fizz, 19,Buzz, Fizz, 22, 23, Fizz, Buzz, 26, Fizz, 28,29, FizzBuzz, ...
8/149
![Page 9: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/9.jpg)
FizzBuzz
for ($i = 0; $i < 100; ++$i) {
if ($i % 3 === 0) { print "Fizz"; } if ($i % 5 === 0) { print "Buzz"; } if ($i % 3 !== 0 && $i % 5 !== 0) { print $i; }
print ", "; }
9/149
![Page 10: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/10.jpg)
FizzBuzz
for ($i = 0; $i < 100; ++$i) {
if ($i % 3 === 0) { print "Fizz"; } if ($i % 5 === 0) { print "Buzz"; } if ($i % 3 !== 0 && $i % 5 !== 0) { print $i; }
print ", "; }
10/149
![Page 11: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/11.jpg)
FizzBuzzfunction fizzbuzz(){ $sequence = array();
for ($i = 0; $i < 100; ++$i) { $formatted = "";
if ($i % 3 === 0) { $formatted .= "Fizz"; } if ($i % 5 === 0) { $formatted .= "Buzz"; } if ($i % 3 !== 0 && $i % 5 !== 0) { $formatted = "$i"; }
$sequence[] = $formatted; }
return $sequence;}
11/149
![Page 12: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/12.jpg)
FizzBuzzfunction fizzbuzz(){ $sequence = array();
for ($i = 0; $i < 100; ++$i) { $formatted = "";
if ($i % 3 === 0) { $formatted .= "Fizz"; } if ($i % 5 === 0) { $formatted .= "Buzz"; } if ($i % 3 !== 0 && $i % 5 !== 0) { $formatted = "$i"; }
$sequence[] = $formatted; }
return $sequence;}
12/149
![Page 13: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/13.jpg)
FizzBuzzfunction fizzbuzz(){ $sequence = array();
for ($i = 1; $i < 101; ++$i) { $formatted = "";
if ($i % 3 === 0) { $formatted .= "Fizz"; } if ($i % 5 === 0) { $formatted .= "Buzz"; } if ($i % 3 !== 0 && $i % 5 !== 0) { $formatted = "$i"; }
$sequence[] = $formatted; }
return $sequence;}
13/149
![Page 14: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/14.jpg)
FizzBuzzfunction fizzbuzz(){ $sequence = array();
for ($i = 1; $i < 101; ++$i) { $formatted = "";
if ($i % 3 === 0) { $formatted .= "Fizz"; } if ($i % 5 === 0) { $formatted .= "Buzz"; } if ($i % 3 !== 0 && $i % 5 !== 0) { $formatted = "$i"; }
$sequence[] = $formatted; }
return $sequence;}
14/149
![Page 15: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/15.jpg)
FizzBuzzfunction fizzbuzz(){ $sequence = array();
for ($i = 1; $i < 101; ++$i) { $formatted = "";
if ($i % 3 === 0) { $formatted .= "Fizz"; } if ($i % 5 === 0) { $formatted .= "Buzz"; } if ($formatted === "") { $formatted = "$i"; }
$sequence[] = $formatted; }
return $sequence;}
15/149
![Page 16: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/16.jpg)
FizzBuzzBeepfunction fizzbuzz(){ $sequence = array();
for ($i = 1; $i < 101; ++$i) { $formatted = "";
if ($i % 3 === 0) { $formatted .= "Fizz"; } if ($i % 5 === 0) { $formatted .= "Buzz"; } if ($formatted === "") { $formatted = "$i"; }
$sequence[] = $formatted; }
return $sequence;}
16/149
![Page 17: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/17.jpg)
FizzBuzzBeepfunction fizzbuzz($with_beep = false){ $sequence = array();
for ($i = 1; $i < 101; ++$i) { $formatted = "";
if ($i % 3 === 0) $formatted .= "Fizz"; if ($i % 5 === 0) $formatted .= "Buzz"; if ($with_beep && $i % 7 === 0) $formatted .= "Beep"; if ($formatted === "") { $formatted = "$i"; }
$sequence[] = $formatted; }
return $sequence;}
17/149
![Page 18: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/18.jpg)
FizzBuzzBeepfunction fizzbuzz($with_beep = false, $with_digits = false){ $sequence = array();
for ($i = 1; $i < 101; ++$i) { $formatted = "";
if ($i % 3 === 0 || ($with_digits && strpos...)) $formatted .= "Fizz"; if ($i % 5 === 0 || ($with_digits && strpos...)) $formatted .= "Buzz"; if ($with_beep && $i % 7 === 0 || ($with_digits ...)) $formatted .= "Beep"; if ($formatted === "") { $formatted = "$i"; }
$sequence[] = $formatted; }
return $sequence;}
18/149
![Page 19: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/19.jpg)
FizzBuzzBeepfunction fizzbuzz($with_beep = false, $with_digits = false){ $sequence = array();
for ($i = 1; $i < 101; ++$i) { $formatted = "";
if ($i % 3 === 0 || ($with_digits && strpos...)) $formatted .= "Fizz"; if ($i % 5 === 0 || ($with_digits && strpos...)) $formatted .= "Buzz"; if ($with_beep && $i % 7 === 0 || ($with_digits ...)) $formatted .= "Beep"; if ($formatted === "") { $formatted = "$i"; }
$sequence[] = $formatted; }
return $sequence;}
19/149
![Page 20: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/20.jpg)
No loops!20/149
![Page 21: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/21.jpg)
No loops!21/149
![Page 22: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/22.jpg)
No loops!function fizzbuzz(){ $sequence = array();
for ($i = 1; $i < 101; ++$i) { $formatted = "";
if ($i % 3 === 0) { $formatted .= "Fizz"; } if ($i % 5 === 0) { $formatted .= "Buzz"; } if ($formatted === "") { $formatted = "$i"; }
$sequence[] = $formatted; }
return $sequence;}
22/149
![Page 23: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/23.jpg)
No loops!function fizzbuzz($i = 1, array $result = array()){ if ($i > 100) return $result;
$formatted = ""; if ($i % 3 === 0) { $formatted .= "Fizz"; } if ($i % 5 === 0) { $formatted .= "Buzz"; } if ($formatted === "") { $formatted .= "$i"; }
return fizzbuzz( $i + 1, array_merge($result, array($formatted)) );}
23/149
![Page 24: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/24.jpg)
No loops!function fizzbuzz($i = 1, array $result = array()){ if ($i > 100) return $result;
$formatted = ""; if ($i % 3 === 0) { $formatted .= "Fizz"; } if ($i % 5 === 0) { $formatted .= "Buzz"; } if ($formatted === "") { $formatted .= "$i"; }
return fizzbuzz( $i + 1, array_merge($result, array($formatted)) );}
PHP Fatal error: Maximumfunction nesting levelof '100' Reached, aborting!
24/149
![Page 25: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/25.jpg)
No loops!function fizzbuzz(){ $sequence = array();
for ($i = 1; $i < 101; ++$i) { $formatted = "";
if ($i % 3 === 0) { $formatted .= "Fizz"; } if ($i % 5 === 0) { $formatted .= "Buzz"; } if ($formatted === "") { $formatted = "$i"; }
$sequence[] = $formatted; }
return $sequence;}
25/149
![Page 26: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/26.jpg)
array_map($callable, $array)function fizzbuzz(){ $sequence = array();
for ($i = 1; $i < 101; ++$i) { $formatted = "";
if ($i % 3 === 0) { $formatted .= "Fizz"; } if ($i % 5 === 0) { $formatted .= "Buzz"; } if ($formatted === "") { $formatted = "$i"; }
$sequence[] = $formatted; }
return $sequence;}
array_map( function ($x) { return 2*$x; }, array(1, 2, 3));
// array(2, 4, 6)
26/149
![Page 27: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/27.jpg)
No loops!function fizzbuzz(){ $sequence = array();
for ($i = 1; $i < 101; ++$i) { $formatted = "";
if ($i % 3 === 0) { $formatted .= "Fizz"; } if ($i % 5 === 0) { $formatted .= "Buzz"; } if ($formatted === "") { $formatted = "$i"; }
$sequence[] = $formatted; }
return $sequence;}
array_map( function ($x) { return 2*$x; }, array(1, 2, 3));
// array(2, 4, 6)
27/149
![Page 28: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/28.jpg)
No loops!function fizzbuzz(){ return array_map( function ($i) {
$formatted = "";
if ($i % 3 === 0) { $formatted .= "Fizz"; } if ($i % 5 === 0) { $formatted .= "Buzz"; } if ($formatted === "") { $formatted = "$i"; }
return $formatted; }, range(1, 100) );}
array_map( function ($x) { return 2*$x; }, array(1, 2, 3));
// array(2, 4, 6)
28/149
![Page 29: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/29.jpg)
No loops!function fizzbuzz(){ return array_map( function ($i) {
$formatted = "";
if ($i % 3 === 0) { $formatted .= "Fizz"; } if ($i % 5 === 0) { $formatted .= "Buzz"; } if ($formatted === "") { $formatted = "$i"; }
return $formatted; }, range(1, 100) );}
29/149
![Page 30: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/30.jpg)
Still complex, rigidfunction fizzbuzz($with_beep = false, $with_digits = false){ return array_map( function ($i) use ($with_beep, $with_digits) {
$formatted = "";
if ($i % 3 === 0 || ($with_digits && strpos...)) $formatted .= "Fizz"; if ($i % 5 === 0 || ($with_digits && strpos...)) $formatted .= "Buzz"; if ($with_beep && (...)) $formatted .= "Buzz"; if ($formatted === "") $formatted = "$i";
return $formatted; }, range(1, 100) );}
30/149
![Page 31: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/31.jpg)
No conditional statements!function fizzbuzz(){ return array_map( function ($i) {
$formatted = "";
if ($i % 3 === 0) { $formatted .= "Fizz"; } if ($i % 5 === 0) { $formatted .= "Buzz"; } if ($formatted === "") { $formatted = "$i"; }
return $formatted; }, range(1, 100) );}
31/149
![Page 32: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/32.jpg)
Create some duplicationfunction fizzbuzz(){ return array_map( function ($i) {
$formatted = "";
if ($i % 3 === 0) { $formatted .= "Fizz"; } if ($i % 5 === 0) { $formatted .= "Buzz"; } if ($formatted === "") { $formatted = "$i"; }
return $formatted; }, range(1, 100) );}
32/149
![Page 33: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/33.jpg)
Create some duplicationfunction fizzbuzz(){ return array_map( function ($i) {
$formatted = "";
if ($i % 3 === 0) { $formatted .= "Fizz"; } if ($i % 5 === 0) { $formatted .= "Buzz"; } if ($formatted === "") { $formatted = "$i"; }
return $formatted; }, range(1, 100) );}
33/149
![Page 34: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/34.jpg)
Uniformizefunction fizzbuzz(){ return array_map( function ($i) {
$formatted = "";
if ($i % 3 === 0) { $formatted .= "Fizz"; } if ($i % 5 === 0) { $formatted .= "Buzz"; } if ($formatted === "") { $formatted .= "$i"; }
return $formatted; }, range(1, 100) );}
34/149
![Page 35: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/35.jpg)
Scalar vector→function fizzbuzz(){ return array_map( function ($i) {
$formatted = "";
if ($i % 3 === 0) { $formatted .= "Fizz"; } if ($i % 5 === 0) { $formatted .= "Buzz"; } if ($formatted === "") { $formatted .= "$i"; }
return $formatted; }, range(1, 100) );}
35/149
![Page 36: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/36.jpg)
Scalar vector→function fizzbuzz(){ return array_map( function ($i) {
$formatted = array();
if ($i % 3 === 0) { $formatted[] = "Fizz"; } if ($i % 5 === 0) { $formatted[] = "Buzz"; } if (count($formatted) === 0) { $formatted[] = "$i"; }
return implode($formatted); }, range(1, 100) );}
36/149
![Page 37: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/37.jpg)
Extract conditionfunction fizzbuzz(){ return array_map( function ($i) {
$formatted = array();
if ($i % 3 === 0) { $formatted[] = "Fizz"; } if ($i % 5 === 0) { $formatted[] = "Buzz"; } if (count($formatted) === 0) { $formatted[] = "$i"; }
return implode($formatted); }, range(1, 100) );}
37/149
![Page 38: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/38.jpg)
Extract conditionfunction fizzbuzz(){ return array_map( function ($i) { $formatted = array(); $condition = $i % 3 === 0; if ($condition) { $formatted[] = "Fizz"; } $condition = $i % 5 === 0; if ($condition) { $formatted[] = "Buzz"; } $condition = count($formatted) === 0; if ($condition) { $formatted[] = "$i"; } return implode($formatted); }, range(1, 100) );}
38/149
![Page 39: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/39.jpg)
Extract representationfunction fizzbuzz(){ return array_map( function ($i) { $formatted = array(); $condition = $i % 3 === 0; if ($condition) { $formatted[] = "Fizz"; } $condition = $i % 5 === 0; if ($condition) { $formatted[] = "Buzz"; } $condition = count($formatted) === 0; if ($condition) { $formatted[] = "$i"; } return implode($formatted); }, range(1, 100) );}
39/149
![Page 40: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/40.jpg)
Extract representationfunction fizzbuzz(){ return array_map( function ($i) { $formatted = array(); $condition = $i % 3 === 0; $representation = "Fizz"; if ($condition) $formatted[] = $representation;
$condition = $i % 5 === 0; $representation = "Buzz"; if ($condition) $formatted[] = $representation;
$condition = count($formatted) === 0; $representation = "$i"; if ($condition) $formatted[] = $representation;
return implode($formatted); }, range(1, 100) );}
40/149
![Page 41: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/41.jpg)
Eliminate duplicationfunction fizzbuzz(){ return array_map( function ($i) { $formatted = array(); $condition = $i % 3 === 0; $representation = "Fizz"; if ($condition) $formatted[] = $representation;
$condition = $i % 5 === 0; $representation = "Buzz"; if ($condition) $formatted[] = $representation;
$condition = count($formatted) === 0; $representation = "$i"; if ($condition) $formatted[] = $representation;
return implode($formatted); }, range(1, 100) );}
41/149
![Page 42: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/42.jpg)
Eliminate duplicationfunction fizzbuzz(){ return array_map( function ($i) { $formatted = array(); $condition = $i % 3 === 0; $representation = "Fizz"; if ($condition) $formatted[] = $representation;
$condition = $i % 5 === 0; $representation = "Buzz"; if ($condition) $formatted[] = $representation;
$condition = count($formatted) === 0; $representation = "$i"; if ($condition) $formatted[] = $representation;
return implode($formatted); }, range(1, 100) );}
42/149
![Page 43: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/43.jpg)
Eliminate duplicationfunction fizzbuzz(){ return array_map( function ($i) { $formatted = array(); $rules = array(array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"));
foreach ($rules as $rule) { list($condition, $representation) = $rule; if ($condition) $formatted[] = $representation; }
$condition = count($formatted) === 0; $representation = "$i"; if ($condition) $formatted[] = $representation;
return implode($formatted); }, range(1, 100) );}
43/149
![Page 44: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/44.jpg)
array_filter($array, $callable)function fizzbuzz(){ return array_map( function ($i) { $formatted = array(); $rules = array(array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"));
foreach ($rules as $rule) { list($condition, $representation) = $rule; if ($condition) $formatted[] = $representation; }
$condition = count($formatted) === 0; $representation = "$i"; if ($condition) $formatted[] = $representation;
return implode($formatted); }, range(1, 100) );}
array_filter(array(1, 2, 3, 4), function ($x) { return $x > 2; });
// array(3, 4)
44/149
![Page 45: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/45.jpg)
Eliminate conditionalfunction fizzbuzz(){ return array_map( function ($i) { $formatted = array(); $rules = array(array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"));
foreach ($rules as $rule) { list($condition, $representation) = $rule; if ($condition) $formatted[] = $representation; }
$condition = count($formatted) === 0; $representation = "$i"; if ($condition) $formatted[] = $representation;
return implode($formatted); }, range(1, 100) );}
45/149
![Page 46: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/46.jpg)
Eliminate conditionalfunction fizzbuzz(){ return array_map( function ($i) { $formatted = array(); $rules = array_filter( array(array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz")), function (array $rule) { return $rule[0]; }); foreach ($rules as $rule) { list($condition, $representation) = $rule; $formatted[] = $representation; } $condition = count($formatted) === 0; $representation = "$i"; if ($condition) $formatted[] = $representation;
return implode($formatted); }, range(1, 100) );}
46/149
![Page 47: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/47.jpg)
Remove some noisefunction fizzbuzz(){ return array_map( function ($i) { $formatted = array(); $rules = array_filter( array(array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz")), function (array $rule) { return $rule[0]; }); foreach ($rules as $rule) { list($condition, $representation) = $rule; $formatted[] = $representation; } $condition = count($formatted) === 0; $representation = "$i"; if ($condition) $formatted[] = $representation;
return implode($formatted); }, range(1, 100) );}
47/149
![Page 48: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/48.jpg)
Remove some noisefunction fizzbuzz(){ return array_map( function ($i) { $formatted = array(); $rules = array_filter( array(array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz")), function (array $rule) { return $rule[0]; }); foreach ($rules as $rule) {
$formatted[] = $rule[1]; } $condition = count($formatted) === 0; $representation = "$i"; if ($condition) $formatted[] = $representation;
return implode($formatted); }, range(1, 100) );}
48/149
![Page 49: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/49.jpg)
Remove some noisefunction fizzbuzz(){ return array_map( function ($i) { $formatted = array(); $rules = array_filter( array(array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz")), function (array $rule) { return $rule[0]; }); foreach ($rules as $rule) {
$formatted[] = $rule[1]; } $condition = count($formatted) === 0; $representation = "$i"; if ($condition) $formatted[] = $representation;
return implode($formatted); }, range(1, 100) );}
49/149
![Page 50: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/50.jpg)
Zoom infunction fizzbuzz(){ return array_map( function ($i) { $formatted = array(); $rules = array_filter( array(array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz")), function (array $rule) { return $rule[0]; }); foreach ($rules as $rule) {
$formatted[] = $rule[1]; } $condition = count($formatted) === 0; $representation = "$i"; if ($condition) $formatted[] = $representation;
return implode($formatted); }, range(1, 100) );}
50/149
![Page 51: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/51.jpg)
Zoom in$formatted = array();$rules = array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; });
foreach ($rules as $rule) { $formatted[] = $rule[1];}
$condition = count($formatted) === 0;$representation = "$i";if ($condition) { $formatted[] = $representation;}
return implode($formatted);
51/149
![Page 52: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/52.jpg)
$formatted $rules→$formatted = array();$rules = array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; });
foreach ($rules as $rule) { $formatted[] = $rule[1];}
$condition = count($formatted) === 0;$representation = "$i";if ($condition) { $formatted[] = $representation;}
return implode($formatted);
52/149
![Page 53: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/53.jpg)
$formatted $rules→$formatted = array();$rules = array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; });
foreach ($rules as $rule) { $formatted[] = $rule[1];}
$condition = count($rules) === 0;$representation = "$i";if ($condition) { $formatted[] = $representation;}
return implode($formatted);
53/149
![Page 54: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/54.jpg)
Uniformize$formatted = array();$rules = array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; });
foreach ($rules as $rule) { $formatted[] = $rule[1];}
$condition = count($rules) === 0;$representation = "$i";if ($condition) { $formatted[] = $representation;}
return implode($formatted);
54/149
![Page 55: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/55.jpg)
Uniformize$formatted = array();$rules = array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; });
foreach ($rules as $rule) { $formatted[] = $rule[1];}
$rule = array(count($rules) === 0, "$i");
if ($rule[0]) { $formatted[] = $rule[1];}
return implode($formatted);
55/149
![Page 56: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/56.jpg)
$formatted $rules→$formatted = array();$rules = array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; });
foreach ($rules as $rule) { $formatted[] = $rule[1];}
$rule = array(count($rules) === 0, "$i");
if ($rule[0]) { $formatted[] = $rule[1];}
return implode($formatted);
56/149
![Page 57: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/57.jpg)
$formatted $rules→$formatted = array();$rules = array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; });
foreach ($rules as $rule) { $formatted[] = $rule[1];}
if (count($rules) === 0) { $rules[] = array(count($rules) === 0, "$i");}
return implode($formatted);
57/149
![Page 58: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/58.jpg)
$formatted $rules→$formatted = array();$rules = array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; });
foreach ($rules as $rule) { $formatted[] = $rule[1];}
if (count($rules) === 0) { $rules[] = array(count($rules) === 0, "$i");}
return implode($formatted);
58/149
![Page 59: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/59.jpg)
$formatted $rules→$formatted = array();$rules = array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; });
if (count($rules) === 0) { $rules[] = array(count($rules) === 0, "$i");}
foreach ($rules as $rule) { $formatted[] = $rule[1];}
return implode($formatted);
59/149
![Page 60: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/60.jpg)
Remove some redundancy$formatted = array();$rules = array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; });
if (count($rules) === 0) { $rules[] = array(count($rules) === 0, "$i");}
foreach ($rules as $rule) { $formatted[] = $rule[1];}
return implode($formatted);
60/149
![Page 61: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/61.jpg)
Remove some redundancy$formatted = array();$rules = array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; });
if (count($rules) === 0) { $rules[] = array(true, "$i");}
foreach ($rules as $rule) { $formatted[] = $rule[1];}
return implode($formatted);
61/149
![Page 62: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/62.jpg)
array_pad($array, $size, $value)$formatted = array();$rules = array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; });
if (count($rules) === 0) { $rules[] = array(true, "$i");}
foreach ($rules as $rule) { $formatted[] = $rule[1];}
return implode($formatted);
array_pad(array(1, 2), 5, 42); // array(1, 2, 42, 42, 42)
array_pad(array(1, 2), 1, 42); // array(1, 2)
62/149
![Page 63: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/63.jpg)
array_pad(array(1, 2), 5, 42); // array(1, 2, 42, 42, 42)
array_pad(array(1, 2), 1, 42); // array(1, 2)
Padding$formatted = array();$rules = array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; });
if (count($rules) === 0) { $rules[] = array(true, "$i");}
foreach ($rules as $rule) { $formatted[] = $rule[1];}
return implode($formatted);
63/149
![Page 64: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/64.jpg)
Padding$formatted = array();$rules = array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; });
if (count($rules) === 0) { $rules[] = array(true, "$i");}
foreach ($rules as $rule) { $formatted[] = $rule[1];}
return implode($formatted);
64/149
![Page 65: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/65.jpg)
Padding$formatted = array();$rules = array_pad(array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; } ), 1, array(true, "$i"));
foreach ($rules as $rule) { $formatted[] = $rule[1];}
return implode($formatted);
65/149
![Page 66: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/66.jpg)
Padding$formatted = array();$rules = array_pad( array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; } ), 1, array(true, "$i"));
foreach ($rules as $rule) { $formatted[] = $rule[1];}
return implode($formatted);
66/149
![Page 67: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/67.jpg)
foreach array_map()→$formatted = array();$rules = array_pad( array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; } ), 1, array(true, "$i"));
foreach ($rules as $rule) { $formatted[] = $rule[1];}
return implode($formatted);
67/149
![Page 68: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/68.jpg)
foreach array_map()→$formatted = array_map(function(array $rule){return $rule[1];}, array_pad( array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; } ), 1, array(true, "$i")));
return implode($formatted);
68/149
![Page 69: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/69.jpg)
foreach array_map→$formatted = array_map( function (array $rule) { return $rule[1]; }, array_pad( array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; } ), 1, array(true, "$i") ));
return implode($formatted);
69/149
![Page 70: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/70.jpg)
inline implode$formatted = array_map( function (array $rule) { return $rule[1]; }, array_pad( array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; } ), 1, array(true, "$i") ));
return implode($formatted);
70/149
![Page 71: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/71.jpg)
inline implodereturn implode(array_map( function (array $rule) { return $rule[1]; }, array_pad( array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; } ), 1, array(true, "$i") )));
71/149
![Page 72: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/72.jpg)
inline implodereturn implode( array_map( function (array $rule) { return $rule[1]; }, array_pad( array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; } ), 1, array(true, "$i") ) ));
72/149
![Page 73: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/73.jpg)
Eliminate unneeded valuesreturn implode( array_map( function (array $rule) { return $rule[1]; }, array_pad( array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; } ), 1, array(true, "$i") ) ));
73/149
![Page 74: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/74.jpg)
array_pad() array_map()↔return implode( array_map( function (array $rule) { return $rule[1]; }, array_pad( array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; } ), 1, array(true, "$i") ) ));
74/149
![Page 75: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/75.jpg)
array_pad() array_map()↔return implode( array_pad( array_map( function (array $rule) { return $rule[1]; }, array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; } ) ), 1, "$i" ));
75/149
![Page 76: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/76.jpg)
array_map() for_all()→return implode( array_pad( array_map( function (array $rule) { return $rule[1]; }, array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; } ) ), 1, "$i" ));
76/149
![Page 77: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/77.jpg)
array_map() for_all()→
return implode( array_pad( array_map( function (array $rule) { return $rule[1]; }, array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; } ) ), 1, "$i" ));
77/149
![Page 78: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/78.jpg)
array_map() for_all()→
return implode( array_pad( array_map( function (array $rule) { return $rule[1]; }, array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; } ) ), 1, "$i" ));
78/149
![Page 79: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/79.jpg)
array_map() for_all()→
return implode( array_pad( array_map( function (array $rule) { return $rule[1]; }, array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; } ) ), 1, "$i" ));
79/149
![Page 80: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/80.jpg)
array_map() for_all()→
return implode( array_pad( array_map( function (array $rule) { return $rule[1]; }, array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; } ) ), 1, "$i" ));
80/149
![Page 81: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/81.jpg)
array_map() for_all()→
return implode( array_pad( array_map( function (array $rule) { return $rule[1]; }, array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; } ) ), 1, "$i" ));
81/149
![Page 82: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/82.jpg)
array_map() for_all()→
return implode( array_pad( array_map( function (array $rule) { return $rule[1]; }, array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; } ) ), 1, "$i" ));
82/149
![Page 83: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/83.jpg)
array_map() for_all()→function for_all(array $items, $action){ return array_map($action, $items);}
return implode( array_pad( for_all(
array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; } ), function (array $rule) { return $rule[1]; } ), 1, "$i" ));
83/149
![Page 84: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/84.jpg)
array_filter matching_rules→function for_all(array $items, $action){ return array_map($action, $items);}
return implode( array_pad( for_all(
array_filter( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), ), function (array $rule) { return $rule[0]; } ), function (array $rule) { return $rule[1]; } ), 1, "$i" ));
84/149
![Page 85: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/85.jpg)
array_filter matching_rules→function matching_rules(array $rules) { return array_filter( $rules, function (array $rule) { return $rule[0]; }); }
return implode( array_pad( for_all(
matching_rules( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), )
), function (array $rule) { return $rule[1]; } ), 1, "$i" ));
85/149
![Page 86: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/86.jpg)
For all matching rules...function matching_rules(array $rules) { return array_filter( $rules, function (array $rule) { return $rule[0]; }); }
return implode( array_pad( for_all(
matching_rules( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), )
), function (array $rule) { return $rule[1]; } ), 1, "$i" ));
86/149
![Page 87: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/87.jpg)
select representation
return implode( array_pad( for_all(
matching_rules( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), )
), function (array $rule) { return $rule[1]; } ), 1, "$i" ));
87/149
![Page 88: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/88.jpg)
select representation$select_representation = function (array $rule) { return $rule[1]; };
return implode( array_pad( for_all(
matching_rules( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), )
), $select_representation ), 1, "$i" ));
88/149
![Page 89: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/89.jpg)
select representationfunction select_representation(){ return function (array $rule) { return $rule[1]; };}
return implode( array_pad( for_all(
matching_rules( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), )
), select_representation() ), 1, "$i" ));
89/149
![Page 90: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/90.jpg)
array_pad() either_or_else()→function select_representation(){ return function (array $rule) { return $rule[1]; };}
return implode( array_pad( for_all(
matching_rules( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), )
), select_representation() ), 1, "$i" ));
90/149
![Page 91: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/91.jpg)
array_pad() either_or_else()→function either_or_else(array $either, $or_else){ return array_pad($either, 1, $or_else);}
return implode( either_or_else( for_all(
matching_rules( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), )
), select_representation() ),
"$i" ));
91/149
![Page 92: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/92.jpg)
implode() concat()→function either_or_else(array $either, $or_else){ return array_pad($either, 1, $or_else);}
return implode( either_or_else( for_all(
matching_rules( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), )
), select_representation() ),
"$i" ));
92/149
![Page 93: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/93.jpg)
implode() concat()→function concat(array $parts){ return implode($parts);}
return concat( either_or_else( for_all(
matching_rules( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), )
), select_representation() ),
"$i" ));
93/149
![Page 94: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/94.jpg)
Parametric rules: conditionsfunction concat(array $parts){ return implode($parts);}
return concat( either_or_else( for_all(
matching_rules( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), )
), select_representation() ),
"$i" ));
94/149
![Page 95: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/95.jpg)
Parametric rules: conditionsfunction matching_rules(array $rules) { return array_filter( $rules, function (array $rule) { return $rule[0]; }); }
return concat( either_or_else( for_all(
matching_rules( array( array($i % 3 === 0, "Fizz"), array($i % 5 === 0, "Buzz"), )
), select_representation() ),
"$i" ));
95/149
![Page 96: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/96.jpg)
Parametric rules: conditionsfunction matching_rules($n, array $rules) { return array_filter( $rules, function (array $rule) use ($n) {return $rule[0]($n);});}
return concat( either_or_else( for_all( matching_rules( $i, array( array(function ($n) { return $n%3 === 0; }, "Fizz"), array(function ($n) { return $n%5 === 0; }, "Buzz"), ) ), select_representation() ), "$i" ));
96/149
![Page 97: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/97.jpg)
Remove duplicationfunction matching_rules($n, array $rules) { return array_filter( $rules, function (array $rule) use ($n) {return $rule[0]($n);});}
return concat( either_or_else( for_all( matching_rules( $i, array( array(function ($n) { return $n%3 === 0; }, "Fizz"), array(function ($n) { return $n%5 === 0; }, "Buzz"), ) ), select_representation() ), "$i" ));
97/149
![Page 98: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/98.jpg)
Remove duplicationfunction is_multiple_of($divisor) { return function ($n) use ($divisor) { return $n % $divisor === 0; };}
return concat( either_or_else( for_all( matching_rules( $i, array( array(is_multiple_of(3), "Fizz"), array(is_multiple_of(5), "Buzz"), ) ), select_representation() ), "$i" ));
98/149
![Page 99: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/99.jpg)
Parametric representationfunction is_multiple_of($divisor) { return function ($n) use ($divisor) { return $n % $divisor === 0; };}
return concat( either_or_else( for_all( matching_rules( $i, array( array(is_multiple_of(3), "Fizz"), array(is_multiple_of(5), "Buzz"), ) ), select_representation() ), "$i" ));
99/149
![Page 100: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/100.jpg)
Parametric representation
return concat( either_or_else( for_all( matching_rules( $i, array( array(is_multiple_of(3), function ($n) { return "Fizz"; }), array(is_multiple_of(5), function ($n) { return "Buzz"; }), ) ), select_representation() ), function ($n) { return "$n"; } ));
100/149
![Page 101: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/101.jpg)
Parametric representation
return concat(for_all( either_or_else( for_all( matching_rules( $i, array( array(is_multiple_of(3), function ($n) { return "Fizz"; }), array(is_multiple_of(5), function ($n) { return "Buzz"; }), ) ), select_representation() ), function ($n) { return "$n"; } ), function ($f) use ($i) { return $f($i); }));
101/149
![Page 102: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/102.jpg)
Parametric representation
return concat( for_all( either_or_else( for_all( matching_rules( $i, array(array(is_multiple_of(3), function ($n){return "Fizz";}), array(is_multiple_of(5), function ($n){return "Buzz";}),) ), select_representation() ), function ($n) { return "$n"; } ), function ($f) use ($i) { return $f($i); } ));
102/149
![Page 103: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/103.jpg)
Parametric actionfunction select_representation() { return function (array $rule) { return $rule[1]; };}
return concat( for_all( either_or_else( for_all( matching_rules( $i, array(array(is_multiple_of(3), function ($n){return "Fizz";}), array(is_multiple_of(5), function ($n){return "Buzz";}),) ), select_representation() ), function ($n) { return "$n"; } ), function ($f) use ($i) { return $f($i); } ));
103/149
![Page 104: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/104.jpg)
Parametric actionfunction select_action() { return function (array $rule) { return $rule[1]; };}
return concat( for_all( either_or_else( for_all( matching_rules( $i, array(array(is_multiple_of(3), function ($n){return "Fizz";}), array(is_multiple_of(5), function ($n){return "Buzz";}),) ), select_action() ), function ($n) { return "$n"; } ), function ($f) use ($i) { return $f($i); } ));
104/149
![Page 105: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/105.jpg)
Parametric actionfunction select_action() { return function (array $rule) { return $rule[1]; };}
return concat( for_all( either_or_else( for_all( matching_rules( $i, array(array(is_multiple_of(3), function ($n){return "Fizz";}), array(is_multiple_of(5), function ($n){return "Buzz";}),) ), select_action() ), function ($n) { return "$n"; } ), function ($f) use ($i) { return $f($i); } ));
105/149
![Page 106: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/106.jpg)
Parametric action
return concat( for_all( either_or_else( for_all( matching_rules( $i, array(array(is_multiple_of(3), function ($n){return "Fizz";}), array(is_multiple_of(5), function ($n){return "Buzz";}),) ), select_action() ), function ($n) { return "$n"; } ), function ($f) use ($i) { return $f($i); } ));
106/149
![Page 107: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/107.jpg)
Parametric actionfunction apply_with($n) { return function ($f) use ($n) { return $f($n); };}
return concat( for_all( either_or_else( for_all( matching_rules( $i, array(array(is_multiple_of(3), function ($n){return "Fizz";}), array(is_multiple_of(5), function ($n){return "Buzz";}),) ), select_action() ), function ($n) { return "$n"; } ), apply_with($i) ));
107/149
![Page 108: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/108.jpg)
Parametric actionfunction apply_with($n) { return function ($f) use ($n) { return $f($n); };}
return concat( for_all( either_or_else( for_all( matching_rules( $i, array(array(is_multiple_of(3), function ($n){return "Fizz";}), array(is_multiple_of(5), function ($n){return "Buzz";}),) ), select_action() ), function ($n) { return "$n"; } ), apply_with($i) ));
108/149
![Page 109: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/109.jpg)
Remove duplication
return concat( for_all( either_or_else( for_all( matching_rules( $i, array(array(is_multiple_of(3), function ($n){return "Fizz";}), array(is_multiple_of(5), function ($n){return "Buzz";}),) ), select_action() ), function ($n) { return "$n"; } ), apply_with($i) ));
109/149
![Page 110: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/110.jpg)
Remove duplicationfunction const_fn($const) { return function ($n) use ($const) { return $const; };}
return concat( for_all( either_or_else( for_all( matching_rules( $i, array(array(is_multiple_of(3), const_fn("Fizz")), array(is_multiple_of(5), const_fn("Buzz")),) ), select_action() ), function ($n) { return "$n"; } ), apply_with($i) ));
110/149
![Page 111: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/111.jpg)
Name thingsfunction const_fn($const) { return function ($n) use ($const) { return $const; };}
return concat( for_all( either_or_else( for_all( matching_rules( $i, array(array(is_multiple_of(3), const_fn("Fizz")), array(is_multiple_of(5), const_fn("Buzz")),) ), select_action() ), function ($n) { return "$n"; } ), apply_with($i) ));
111/149
![Page 112: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/112.jpg)
Name thingsfunction to_string() { return function ($n) { return "$n"; };}
return concat( for_all( either_or_else( for_all( matching_rules( $i, array(array(is_multiple_of(3), const_fn("Fizz")), array(is_multiple_of(5), const_fn("Buzz")),) ), select_action() ), to_string() ), apply_with($i) ));
112/149
![Page 113: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/113.jpg)
Encapsulationfunction to_string() { return function ($n) { return "$n"; };}
return concat( for_all( either_or_else( for_all( matching_rules( $i, array(array(is_multiple_of(3), const_fn("Fizz")), array(is_multiple_of(5), const_fn("Buzz")),) ), select_action() ), to_string() ), apply_with($i) ));
113/149
![Page 114: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/114.jpg)
Encapsulationfunction when($condition, $action) { return array($condition, $action);}
return concat( for_all( either_or_else( for_all( matching_rules( $i, array(when( is_multiple_of(3), const_fn("Fizz")), when( is_multiple_of(5), const_fn("Buzz")),) ), select_action() ), to_string() ), apply_with($i) ));
114/149
![Page 115: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/115.jpg)
When ... then ...function when($condition, $action) { return array($condition, $action);}
return concat( for_all( either_or_else( for_all( matching_rules( $i, array(when( is_multiple_of(3), const_fn("Fizz")), when( is_multiple_of(5), const_fn("Buzz")),) ), select_action() ), to_string() ), apply_with($i) ));
115/149
![Page 116: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/116.jpg)
When ... then ...function then($action) { return $action;}
return concat( for_all( either_or_else( for_all( matching_rules( $i, array(when( is_multiple_of(3), then(const_fn("Fizz"))), when( is_multiple_of(5), then(const_fn("Buzz"))),) ), select_action() ), to_string() ), apply_with($i) ));
116/149
![Page 117: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/117.jpg)
Extract ugly detailsfunction then($action) { return $action;}
return concat( for_all( either_or_else( for_all( matching_rules( $i, array(when( is_multiple_of(3), then(const_fn("Fizz"))), when( is_multiple_of(5), then(const_fn("Buzz"))),) ), select_action() ), to_string() ), apply_with($i) ));
117/149
![Page 118: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/118.jpg)
Extract ugly detailsfunction apply_rules($n, array $rules, $otherwise_fn){ return concat( for_all( either_or_else( for_all(matching_rules($n, $rules), select_action()), $otherwise_fn ), apply_with($n) ) );}
return apply_rules( $i, array( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))), ), to_string());
118/149
![Page 119: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/119.jpg)
Extract ugly detailsfunction apply_rules($n, array $rules, $otherwise_fn){ return concat( for_all( either_or_else( for_all(matching_rules($n, $rules), select_action()), $otherwise_fn ), apply_with($n) ) );}
return apply_rules( $i, array( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))), ), to_string());
119/149
![Page 120: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/120.jpg)
Extract ugly details
function fizzbuzz(){ return for_all( range(1, 100), function ($i) { apply_rules( $i, array( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))), ), to_string() ) } );}
120/149
![Page 121: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/121.jpg)
Extract ugly details
function fizzbuzz(){ return for_all( range(1, 100), function ($i) { apply_rules( $i, array( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))), ), to_string() ) } );}
121/149
![Page 122: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/122.jpg)
Extract ugly detailsfunction apply_rules(array $rules, $otherwise_fn) { return function ($n) use ($rules, $otherwise_fn) { return concat(for_all( ... )); };}function fizzbuzz(){ return for_all( range(1, 100), apply_rules(
array( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))), ), to_string() )
);}
122/149
![Page 123: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/123.jpg)
Readability refinementsfunction apply_rules(array $rules, $otherwise_fn) { return function ($n) use ($rules, $otherwise_fn) { return concat(for_all( ... )); };}function fizzbuzz(){ return for_all( range(1, 100), apply_rules(
array( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))), ), to_string() )
);}
123/149
![Page 124: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/124.jpg)
Readability refinementsfunction otherwise($action) { return $action;}
function fizzbuzz(){ return for_all( range(1, 100), apply_rules(
array( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))), ), otherwise(to_string()) )
);}
124/149
![Page 125: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/125.jpg)
Readability refinementsfunction otherwise($action) { return $action;}
function fizzbuzz(){ return for_all( range(1, 100), apply_rules(
array( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))), ), otherwise(to_string()) )
);}
125/149
![Page 126: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/126.jpg)
Readability refinementsfunction otherwise($action) { return $action;}
function fizzbuzz(){ return for_all( range(1, 100), apply_rules(
array( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))), ), otherwise(convert_to_string()) )
);}
126/149
![Page 127: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/127.jpg)
Extract, extract, extract
function fizzbuzz(){ return for_all( range(1, 100), apply_rules(
array( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))), ), otherwise(convert_to_string()) )
);}
127/149
![Page 128: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/128.jpg)
Extract, extract, extractfunction format_numbers(array $rules) { return for_all(range(1, 100), apply_rules($rules, otherwise(convert_to_string())));}function fizzbuzz(){ return
array( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))), )
;}
128/149
![Page 129: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/129.jpg)
The resulting algorithmfunction format_numbers(array $rules){ return for_all(range(1, 100), apply_rules($rules, otherwise(convert_to_string())));}function fizzbuzz(){ return array( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))), );}
129/149
![Page 130: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/130.jpg)
The resulting algorithmfunction format_numbers(array $rules){ return for_all(range(1, 100), apply_rules($rules, otherwise(convert_to_string())));}function fizzbuzz(){ return array( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))), );}
130/149
![Page 131: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/131.jpg)
The resulting algorithmfunction format_numbers(array $rules){ return for_all(range(1, 100), apply_rules($rules, otherwise(convert_to_string())));}function fizzbuzz_rules(){ return array( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))), );}function fizzbuzz(){ return format_numbers(fizzbuzz_rules());}
131/149
![Page 132: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/132.jpg)
The resulting algorithmfunction format_numbers(array $rules){ return for_all(range(1, 100), apply_rules($rules, otherwise(convert_to_string())));}function fizzbuzz_rules(){ return array( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))), );}function fizzbuzz(){ return format_numbers(fizzbuzz_rules());}
132/149
![Page 133: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/133.jpg)
The resulting algorithmfunction format_numbers(array $rules){ return for_all(range(1, 100), apply_rules($rules, otherwise(convert_to_string())));}function fizzbuzz_rules(){ return rules( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))) );}function fizzbuzz(){ return format_numbers(fizzbuzz_rules());}function rules(){ return func_get_args();}
133/149
![Page 134: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/134.jpg)
SOLID: Open/Closed Principlefunction format_numbers(array $rules){ return for_all(range(1, 100), apply_rules($rules, otherwise(convert_to_string())));}function fizzbuzz_rules(){ return rules( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))) );}
134/149
![Page 135: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/135.jpg)
SOLID: Open/Closed Principlefunction format_numbers(array $rules){ return for_all(range(1, 100), apply_rules($rules, otherwise(convert_to_string())));}function fizzbuzz_rules(){ return rules( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))) );}function fizzbuzzbeep_rules(){ return append( fizzbuzz_rules(), when(is_multiple_of(7), then(const_fn("Beep"))) );}
135/149
![Page 136: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/136.jpg)
SOLID: Open/Closed Principlefunction format_numbers(array $rules){ return for_all(range(1, 100), apply_rules($rules, otherwise(convert_to_string())));}function fizzbuzz_rules(){ return rules( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))) );}function fizzbuzzbeep_rules(){ return append( fizzbuzz_rules(), when(is_multiple_of(7), then(const_fn("Beep"))) );}function append(array $array, $item) { ... }
136/149
![Page 137: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/137.jpg)
SOLID: What about the others?function format_numbers(array $rules){ return for_all( range(1, 100), apply_rules( $rules, otherwise(convert_to_string()) ) );}function fizzbuzz_rules(){ return rules( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))) );}function fizzbuzz(){ return format_numbers(fizzbuzz_rules());}
137/149
![Page 138: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/138.jpg)
SOLID: Single Responsibilityfunction format_numbers(array $rules){ return for_all( range(1, 100), apply_rules( $rules, otherwise(convert_to_string()) ) );}function fizzbuzz_rules(){ return rules( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))) );}function fizzbuzz(){ return format_numbers(fizzbuzz_rules());}
138/149
![Page 139: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/139.jpg)
SOLID: Single Responsibility ✓function format_numbers(array $rules){ return for_all( range(1, 100), apply_rules( $rules, otherwise(convert_to_string()) ) );}function fizzbuzz_rules(){ return rules( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))) );}function fizzbuzz(){ return format_numbers(fizzbuzz_rules());}
139/149
![Page 140: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/140.jpg)
SOLID: Liskov Substitutionfunction format_numbers(array $rules){ return for_all( range(1, 100), apply_rules( $rules, otherwise(convert_to_string()) ) );}function fizzbuzz_rules(){ return rules( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))) );}function fizzbuzz(){ return format_numbers(fizzbuzz_rules());}
140/149
![Page 141: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/141.jpg)
SOLID: Liskov Substitution ✓function format_numbers(array $rules){ return for_all( range(1, 100), apply_rules( $rules, otherwise(convert_to_string()) ) );}function fizzbuzz_rules(){ return rules( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))) );}function fizzbuzz(){ return format_numbers(fizzbuzz_rules());}
141/149
![Page 142: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/142.jpg)
SOLID: Interface Segregationfunction format_numbers(array $rules){ return for_all( range(1, 100), apply_rules( $rules, otherwise(convert_to_string()) ) );}function fizzbuzz_rules(){ return rules( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))) );}function fizzbuzz(){ return format_numbers(fizzbuzz_rules());}
142/149
![Page 143: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/143.jpg)
SOLID: Interface Segregation ✓function format_numbers(array $rules){ return for_all( range(1, 100), apply_rules( $rules, otherwise(convert_to_string()) ) );}function fizzbuzz_rules(){ return rules( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))) );}function fizzbuzz(){ return format_numbers(fizzbuzz_rules());}
143/149
![Page 144: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/144.jpg)
SOLID: Dependency Inversionfunction format_numbers(array $rules){ return for_all( range(1, 100), apply_rules( $rules, otherwise(convert_to_string()) ) );}function fizzbuzz_rules(){ return rules( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))) );}function fizzbuzz(){ return format_numbers(fizzbuzz_rules());}
144/149
![Page 145: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/145.jpg)
SOLID: Dependency Inversion ✓function format_numbers(array $rules){ return for_all( range(1, 100), apply_rules( $rules, otherwise(convert_to_string()) ) );}function fizzbuzz_rules(){ return rules( when(is_multiple_of(3), then(const_fn("Fizz"))), when(is_multiple_of(5), then(const_fn("Buzz"))) );}function fizzbuzz(){ return format_numbers(fizzbuzz_rules());}
145/149
![Page 146: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/146.jpg)
Wait a sec: isn't SOLID for OOP?146/149
![Page 147: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/147.jpg)
Wait a sec: isn't SOLID for OOP?
If you have OO, you can have FP: Iterator Lazy evaluation→ Iterator, Command Map, Filter→ Command, Factory High order functions→ Immutability Composition Over Inheritance
147/149
![Page 148: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/148.jpg)
Get out of your comfort zone
And extend your mental toolbox!
![Page 149: Programming in handstand](https://reader031.fdocuments.us/reader031/viewer/2022013102/53f4a66a8d7f72c80e8b4ae8/html5/thumbnails/149.jpg)
Thank you!