2. Wprowadzenie
Przykłady
Podsumowanie
Czym jest programowanie funkcyjne?
Dlaczego zainteresowa´ sie FP?
c ˛
Czym jest programowanie funkcyjne?
Programowanie funkcyjne (FP) polega na:
• unikaniu skutków ubocznych,
• stosowaniu funkcji wy˙ szego rz˛
z
edu.
Maciek Godek
Programowanie funkcyjne w PHP
3. Wprowadzenie
Przykłady
Podsumowanie
Czym jest programowanie funkcyjne?
Dlaczego zainteresowa´ sie FP?
c ˛
Czym jest programowanie funkcyjne?
Programowanie funkcyjne (FP) polega na:
• unikaniu skutków ubocznych,
• stosowaniu funkcji wy˙ szego rz˛
z
edu.
Maciek Godek
Programowanie funkcyjne w PHP
4. Wprowadzenie
Przykłady
Podsumowanie
Czym jest programowanie funkcyjne?
Dlaczego zainteresowa´ sie FP?
c ˛
Czym jest programowanie funkcyjne?
Programowanie funkcyjne (FP) polega na:
• unikaniu skutków ubocznych,
• stosowaniu funkcji wy˙ szego rz˛
z
edu.
Maciek Godek
Programowanie funkcyjne w PHP
5. Wprowadzenie
Przykłady
Podsumowanie
Czym jest programowanie funkcyjne?
Dlaczego zainteresowa´ sie FP?
c ˛
Sformułowanie problemu
Jaki problem chcemy rozwiazac?
˛ ´
- Uczyni´ programowanie jak maksymalnie efektywnym, czyli:
c
• musie´ jak najmniej pamieta´ , oraz
c
˛ c
• móc jak najwiecej wnioskowa´ .
˛
c
Maciek Godek
Programowanie funkcyjne w PHP
6. Wprowadzenie
Przykłady
Podsumowanie
Czym jest programowanie funkcyjne?
Dlaczego zainteresowa´ sie FP?
c ˛
Sformułowanie problemu
Jaki problem chcemy rozwiazac?
˛ ´
- Uczyni´ programowanie jak maksymalnie efektywnym, czyli:
c
• musie´ jak najmniej pamieta´ , oraz
c
˛ c
• móc jak najwiecej wnioskowa´ .
˛
c
Maciek Godek
Programowanie funkcyjne w PHP
7. Wprowadzenie
Przykłady
Podsumowanie
Czym jest programowanie funkcyjne?
Dlaczego zainteresowa´ sie FP?
c ˛
Sformułowanie problemu
Jaki problem chcemy rozwiazac?
˛ ´
- Uczyni´ programowanie jak maksymalnie efektywnym, czyli:
c
• musie´ jak najmniej pamieta´ , oraz
c
˛ c
• móc jak najwiecej wnioskowa´ .
˛
c
Maciek Godek
Programowanie funkcyjne w PHP
8. Wprowadzenie
Przykłady
Podsumowanie
Czym jest programowanie funkcyjne?
Dlaczego zainteresowa´ sie FP?
c ˛
Sformułowanie problemu
Jaki problem chcemy rozwiazac?
˛ ´
- Uczyni´ programowanie jak maksymalnie efektywnym, czyli:
c
• musie´ jak najmniej pamieta´ , oraz
c
˛ c
• móc jak najwiecej wnioskowa´ .
˛
c
Maciek Godek
Programowanie funkcyjne w PHP
11. Wprowadzenie
Przykłady
Podsumowanie
Czym jest programowanie funkcyjne?
Dlaczego zainteresowa´ sie FP?
c ˛
Sposoby na usprawnienie pracy z kodem
Pomysły:
• korzystanie z Integrated Development Environment
• u˙ ywanie statycznej kontroli typów
z
• stosowanie konwencji w nazewnictwie obiektów
• ogólniej: przestrzeganie konwencji w sposobie u˙ ycja
z
jezyka
˛
Maciek Godek
Programowanie funkcyjne w PHP
12. Wprowadzenie
Przykłady
Podsumowanie
Czym jest programowanie funkcyjne?
Dlaczego zainteresowa´ sie FP?
c ˛
Sposoby na usprawnienie pracy z kodem
Pomysły:
• korzystanie z Integrated Development Environment
• u˙ ywanie statycznej kontroli typów
z
• stosowanie konwencji w nazewnictwie obiektów
• ogólniej: przestrzeganie konwencji w sposobie u˙ ycja
z
jezyka
˛
Maciek Godek
Programowanie funkcyjne w PHP
13. Wprowadzenie
Przykłady
Podsumowanie
Czym jest programowanie funkcyjne?
Dlaczego zainteresowa´ sie FP?
c ˛
Sposoby na usprawnienie pracy z kodem
Pomysły:
• korzystanie z Integrated Development Environment
• u˙ ywanie statycznej kontroli typów
z
• stosowanie konwencji w nazewnictwie obiektów
• ogólniej: przestrzeganie konwencji w sposobie u˙ ycja
z
jezyka
˛
Maciek Godek
Programowanie funkcyjne w PHP
14. Wprowadzenie
Przykłady
Podsumowanie
Czym jest programowanie funkcyjne?
Dlaczego zainteresowa´ sie FP?
c ˛
Sposoby na usprawnienie pracy z kodem
Pomysły:
• korzystanie z Integrated Development Environment
• u˙ ywanie statycznej kontroli typów
z
• stosowanie konwencji w nazewnictwie obiektów
• ogólniej: przestrzeganie konwencji w sposobie u˙ ycja
z
jezyka
˛
Maciek Godek
Programowanie funkcyjne w PHP
15. Wprowadzenie
Przykłady
Podsumowanie
Czym jest programowanie funkcyjne?
Dlaczego zainteresowa´ sie FP?
c ˛
Sposoby na usprawnienie pracy z kodem
Pomysły:
• korzystanie z Integrated Development Environment
• u˙ ywanie statycznej kontroli typów
z
• stosowanie konwencji w nazewnictwie obiektów
• ogólniej: przestrzeganie konwencji w sposobie u˙ ycja
z
jezyka
˛
Maciek Godek
Programowanie funkcyjne w PHP
16. Wprowadzenie
Przykłady
Podsumowanie
Czym jest programowanie funkcyjne?
Dlaczego zainteresowa´ sie FP?
c ˛
Konwencje w sposobie u˙ ycia jezyka
z
˛
Kilka popularnych konwencji:
• notacja wegierska
˛
• metodologia OOP (hermetyzacja, enkapsulacja,
polimorfizm, dziedziczenie, ...)
• programowanie funkcyjne
Maciek Godek
Programowanie funkcyjne w PHP
17. Wprowadzenie
Przykłady
Podsumowanie
Czym jest programowanie funkcyjne?
Dlaczego zainteresowa´ sie FP?
c ˛
Konwencje w sposobie u˙ ycia jezyka
z
˛
Kilka popularnych konwencji:
• notacja wegierska
˛
• metodologia OOP (hermetyzacja, enkapsulacja,
polimorfizm, dziedziczenie, ...)
• programowanie funkcyjne
Maciek Godek
Programowanie funkcyjne w PHP
18. Wprowadzenie
Przykłady
Podsumowanie
Czym jest programowanie funkcyjne?
Dlaczego zainteresowa´ sie FP?
c ˛
Konwencje w sposobie u˙ ycia jezyka
z
˛
Kilka popularnych konwencji:
• notacja wegierska
˛
• metodologia OOP (hermetyzacja, enkapsulacja,
polimorfizm, dziedziczenie, ...)
• programowanie funkcyjne
Maciek Godek
Programowanie funkcyjne w PHP
19. Wprowadzenie
Przykłady
Podsumowanie
Czym jest programowanie funkcyjne?
Dlaczego zainteresowa´ sie FP?
c ˛
Konwencje w sposobie u˙ ycia jezyka
z
˛
Kilka popularnych konwencji:
• notacja wegierska
˛
• metodologia OOP (hermetyzacja, enkapsulacja,
polimorfizm, dziedziczenie, ...)
• programowanie funkcyjne
Maciek Godek
Programowanie funkcyjne w PHP
20. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
Zagadka: co robi poni˙ szy kod?
z
function złoncz($słowa) {
$wynik = ”;
$n = count($słowa);
if($n < 1) { return $wynik; }
˙˛
$biezace = reset($słowa);
for($i = 0; $i < $n; $i++) {
˙˛
$wynik .= $biezace;
if($i < $n-2) { $wynik .= ’, ’; }
elseif($i == $n-2) { $wynik .= ’ i ’; }
˙˛
$biezace = next($słowa);
}
return $wynik;
}
Maciek Godek
Programowanie funkcyjne w PHP
21. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
Zagadka: co robi poni˙ szy kod?
z
function złoncz($słowa) {
$wynik = ”;
$n = count($słowa);
if($n < 1) { return $wynik; }
˙˛
$biezace = reset($słowa);
for($i = 0; $i < $n; $i++) {
˙˛
$wynik .= $biezace;
if($i < $n-2) { $wynik .= ’, ’; }
elseif($i == $n-2) { $wynik .= ’ i ’; }
˙˛
$biezace = next($słowa);
}
return $wynik;
}
Maciek Godek
Programowanie funkcyjne w PHP
22. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
Rozwiazanie: łaczenie słów naturalnymi spójnikami
˛
˛
Rozwiazanie: złacza słowa spójnikami, w taki sposób, w jaki
˛
˛
łaczymy słowa w mowie potocznej, tzn. sklejamy wszystkie
˛
słowa przecinkami, za wyjatkiem dwóch ostatnich, które
˛
sklejamy spójnikiem ’i’.
Maciek Godek
Programowanie funkcyjne w PHP
23. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
Przykład u˙ ycia
z
złaczenie([]) = ”;
˛
złaczenie([’Ola’]) = ’Ola’;
˛
złaczenie([’Ola’, ’Ala’]) = ’Ola i Ala’;
˛
złaczenie([’Ola’, ’Ala’, ’Ula’]) = ’Ola, Ala i Ula’;
˛
złaczenie([’Ola’, ’Ala’, ’Ula’, ’Ela’])
˛
= ’Ola, Ala, Ula i Ela’;
Maciek Godek
Programowanie funkcyjne w PHP
24. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
Abstrakcja!
złaczenie([]) = ”;
˛
złaczenie([$a]) = $a;
˛
złaczenie([$a, $b]) = $a . ’ i ’ .$b;
˛
złaczenie([$a, $b, $c, ...])
˛
= $a . ’, ’ . złaczenie([$b, $c, ...]);
˛
Maciek Godek
Programowanie funkcyjne w PHP
25. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
W strone PHP
˛
function złaczone($słowa) { // marze´
˛
n
match($słowa) {
case []:
return ”;
case [$a]:
return $a;
case [$a, $b]:
return $a . ’ i ’ . $b;
case [$a, $b, $c, ...]:
return $a . ’, ’
. złaczone([$b, $c, ...]);
˛
}
}
Maciek Godek
Programowanie funkcyjne w PHP
26. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
Faktyczna implementacja w PHP
function złaczone($słowa) {
˛
switch(count($słowa)) {
case 0:
return ”;
case 1:
return array_pop($a);
default:
$ostatnie = array_pop($słowa);
return implode(’, ’, $słowa)
. ’ i ’ . $ostatnie;
}
}
Maciek Godek
Programowanie funkcyjne w PHP
29. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
Pierwsza próba:
usort($tablica, function($a, $b) {
return length($a) - length($b);
});
Pytanie: czy powy˙ sze wywołanie posortuje tablice
z
˛
rosnaco, czy malejaco?
˛
˛
Maciek Godek
Programowanie funkcyjne w PHP
30. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
Pierwsza próba:
usort($tablica, function($a, $b) {
return length($a) - length($b);
});
Pytanie: czy powy˙ sze wywołanie posortuje tablice
z
˛
rosnaco, czy malejaco?
˛
˛
Maciek Godek
Programowanie funkcyjne w PHP
31. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
Druga próba:
usort($tablica, ascending(’length’)) ,
gdzie
function ascending($property) {
return function($a, $b) use($property) {
return $property($a) - $property($b);
};
}
Maciek Godek
Programowanie funkcyjne w PHP
32. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
Druga próba:
usort($tablica, ascending(’length’)) ,
gdzie
function ascending($property) {
return function($a, $b) use($property) {
return $property($a) - $property($b);
};
}
Maciek Godek
Programowanie funkcyjne w PHP
33. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
Sortowanie malejaco
˛
function descending ($prop) {
return function($a, $b) use($prop) {
return -call_user_func(ascending($prop),
$a, $b);
};
}
je˙ eli is_callable($f),
z
to zapis call_user_func($f, $argumenty ...)
jest równowa˙ ny zapisowi $f($argumenty ...)
z
Maciek Godek
Programowanie funkcyjne w PHP
34. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
Sortowanie malejaco
˛
function descending ($prop) {
return function($a, $b) use($prop) {
return -call_user_func(ascending($prop),
$a, $b);
};
}
je˙ eli is_callable($f),
z
to zapis call_user_func($f, $argumenty ...)
jest równowa˙ ny zapisowi $f($argumenty ...)
z
Maciek Godek
Programowanie funkcyjne w PHP
35. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
Popularne funkcje wy˙ szego rz˛
z
edu
• call_user_func_array($function, $array)
• array_map($callback, $a1, $a2, ...)
• array_filter($array, $callback)
• array_reduce($callback, $array [, $init])
Maciek Godek
Programowanie funkcyjne w PHP
36. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
Popularne funkcje wy˙ szego rz˛
z
edu
• call_user_func_array($function, $array)
• array_map($callback, $a1, $a2, ...)
• array_filter($array, $callback)
• array_reduce($callback, $array [, $init])
Maciek Godek
Programowanie funkcyjne w PHP
37. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
Popularne funkcje wy˙ szego rz˛
z
edu
• call_user_func_array($function, $array)
• array_map($callback, $a1, $a2, ...)
• array_filter($array, $callback)
• array_reduce($callback, $array [, $init])
Maciek Godek
Programowanie funkcyjne w PHP
38. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
Popularne funkcje wy˙ szego rz˛
z
edu
• call_user_func_array($function, $array)
• array_map($callback, $a1, $a2, ...)
• array_filter($array, $callback)
• array_reduce($callback, $array [, $init])
Maciek Godek
Programowanie funkcyjne w PHP
39. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
call_user_func_array – synonimy 1
Zastosowanie call_user_func_array – tworzenie
synonimów:
function apply() {
return call_user_func_array(
’call_user_func_array’,
func_get_args()
);
}
Maciek Godek
Programowanie funkcyjne w PHP
40. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
call_user_func_array – synonimy 1
Zastosowanie call_user_func_array – tworzenie
synonimów:
function apply() {
return call_user_func_array(
’call_user_func_array’,
func_get_args()
);
}
Maciek Godek
Programowanie funkcyjne w PHP
41. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
call_user_func_array – synonimy 2
Zastosowanie call_user_func_array – tworzenie
synonimów:
function map() {
return apply(’array_map’, func_get_args());
}
function filter() {
return apply(’array_filter’, func_get_args());
}
function reduce() {
return apply(’array_reduce’, func_get_args());
}
Maciek Godek
Programowanie funkcyjne w PHP
42. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
call_user_func_array – synonimy 2
Zastosowanie call_user_func_array – tworzenie
synonimów:
function map() {
return apply(’array_map’, func_get_args());
}
function filter() {
return apply(’array_filter’, func_get_args());
}
function reduce() {
return apply(’array_reduce’, func_get_args());
}
Maciek Godek
Programowanie funkcyjne w PHP
43. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
call_user_func_array – synonimy 2
Zastosowanie call_user_func_array – tworzenie
synonimów:
function map() {
return apply(’array_map’, func_get_args());
}
function filter() {
return apply(’array_filter’, func_get_args());
}
function reduce() {
return apply(’array_reduce’, func_get_args());
}
Maciek Godek
Programowanie funkcyjne w PHP
44. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
call_user_func_array – synonimy 2
Zastosowanie call_user_func_array – tworzenie
synonimów:
function map() {
return apply(’array_map’, func_get_args());
}
function filter() {
return apply(’array_filter’, func_get_args());
}
function reduce() {
return apply(’array_reduce’, func_get_args());
}
Maciek Godek
Programowanie funkcyjne w PHP
45. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
call_user_func_array – synonimy 3
Zastosowanie call_user_func_array do tworzenia
synonimów – problemy:
• brak argumentów formalnych – utrudnia współprace z IDE
˛
• brak obsługi referencji
function pop() {
return apply(’array_pop’, func_get_args());
} // ´le!!!
z
• generuje narzuty wywołan (kod działa wolniej)
´
• a co z obsługa argumentów domy´ lnych?
˛
s
Maciek Godek
Programowanie funkcyjne w PHP
46. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
call_user_func_array – synonimy 3
Zastosowanie call_user_func_array do tworzenia
synonimów – problemy:
• brak argumentów formalnych – utrudnia współprace z IDE
˛
• brak obsługi referencji
function pop() {
return apply(’array_pop’, func_get_args());
} // ´le!!!
z
• generuje narzuty wywołan (kod działa wolniej)
´
• a co z obsługa argumentów domy´ lnych?
˛
s
Maciek Godek
Programowanie funkcyjne w PHP
47. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
call_user_func_array – synonimy 3
Zastosowanie call_user_func_array do tworzenia
synonimów – problemy:
• brak argumentów formalnych – utrudnia współprace z IDE
˛
• brak obsługi referencji
function pop() {
return apply(’array_pop’, func_get_args());
} // ´le!!!
z
• generuje narzuty wywołan (kod działa wolniej)
´
• a co z obsługa argumentów domy´ lnych?
˛
s
Maciek Godek
Programowanie funkcyjne w PHP
48. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
call_user_func_array – synonimy 3
Zastosowanie call_user_func_array do tworzenia
synonimów – problemy:
• brak argumentów formalnych – utrudnia współprace z IDE
˛
• brak obsługi referencji
function pop() {
return apply(’array_pop’, func_get_args());
} // ´le!!!
z
• generuje narzuty wywołan (kod działa wolniej)
´
• a co z obsługa argumentów domy´ lnych?
˛
s
Maciek Godek
Programowanie funkcyjne w PHP
49. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
call_user_func_array – synonimy 3
Zastosowanie call_user_func_array do tworzenia
synonimów – problemy:
• brak argumentów formalnych – utrudnia współprace z IDE
˛
• brak obsługi referencji
function pop() {
return apply(’array_pop’, func_get_args());
} // ´le!!!
z
• generuje narzuty wywołan (kod działa wolniej)
´
• a co z obsługa argumentów domy´ lnych?
˛
s
Maciek Godek
Programowanie funkcyjne w PHP
50. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
call_user_func_array – synonimy 3
Zastosowanie call_user_func_array do tworzenia
synonimów – problemy:
• brak argumentów formalnych – utrudnia współprace z IDE
˛
• brak obsługi referencji
function pop() {
return apply(’array_pop’, func_get_args());
} // ´le!!!
z
• generuje narzuty wywołan (kod działa wolniej)
´
• a co z obsługa argumentów domy´ lnych?
˛
s
Maciek Godek
Programowanie funkcyjne w PHP
52. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
array_map – przykład
map: odwzorowanie zbioru funkcja. Na przykład, chcac usuna´
˛
˛
˛c
białe znaki ze stringów bedacych elementami tablicy przy
˛ ˛
pomocy funkcji trim, mo˙ emy napisa´ :
z
c
$ogolone_napisy = map(’trim’, $napisy)
Maciek Godek
Programowanie funkcyjne w PHP
53. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
array_map – przykład
˛
˛c
map: odwzorowanie zbioru funkcja. Na przykład, chcac usuna´
˛
białe znaki ze stringów bedacych elementami tablicy przy
˛ ˛
pomocy funkcji trim, mo˙ emy napisa´ :
z
c
$ogolone_napisy = map(’trim’, $napisy)
Maciek Godek
Programowanie funkcyjne w PHP
55. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
array_map – rozwiazanie
˛
Rozwiazanie: max(map(’length’, $tablica))
˛
Uwaga! To jest po prostu zdanie „najwieksza spo´ ród długo´ ci
˛
s
s
elementów w $tablicy” wyra˙ one w PHP!
z
Maciek Godek
Programowanie funkcyjne w PHP
56. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
array_map – rozwiazanie
˛
Rozwiazanie: max(map(’length’, $tablica))
˛
Uwaga! To jest po prostu zdanie „najwieksza spo´ ród długo´ ci
˛
s
s
elementów w $tablicy” wyra˙ one w PHP!
z
Maciek Godek
Programowanie funkcyjne w PHP
57. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
array_map – ciekawostka
Ciekawostka:
map(’f’, map(’g’, $a)) = map(’f’ ◦ ’g’, $a),
gdzie symbol ◦ oznacza zło˙ enie funkcji, tj. f (g(x))
z
Zadanie: napisz funkcje ’compose’, która pobiera jako
˛
argumenty funkcje jednoargumentowe i zwraca funkcje bedaca
˛ ˛ ˛ ˛
ich zło˙ eniem
z
Maciek Godek
Programowanie funkcyjne w PHP
58. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
array_map – ciekawostka
Ciekawostka:
map(’f’, map(’g’, $a)) = map(’f’ ◦ ’g’, $a),
gdzie symbol ◦ oznacza zło˙ enie funkcji, tj. f (g(x))
z
Zadanie: napisz funkcje ’compose’, która pobiera jako
˛
argumenty funkcje jednoargumentowe i zwraca funkcje bedaca
˛ ˛ ˛ ˛
ich zło˙ eniem
z
Maciek Godek
Programowanie funkcyjne w PHP
59. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
array_filter – przykład
filter: odsiewanie elementów spełniajacych dane kryterium,
˛
np. chcemy znale´ c wszystkie liczby z danej tablicy,
z´
mieszczace sie w przedziale (2, 5)
˛
˛
˙
$liczby_2_5 = filter($rózne_liczby, function($x) {
return (2 < $x) && ($x < 5);
});
Maciek Godek
Programowanie funkcyjne w PHP
60. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
array_filter – przykład
filter: odsiewanie elementów spełniajacych dane kryterium,
˛
np. chcemy znale´ c wszystkie liczby z danej tablicy,
z´
mieszczace sie w przedziale (2, 5)
˛
˛
˙
$liczby_2_5 = filter($rózne_liczby, function($x) {
return (2 < $x) && ($x < 5);
});
Maciek Godek
Programowanie funkcyjne w PHP
61. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
array_filter – przykład
filter: odsiewanie elementów spełniajacych dane kryterium,
˛
np. chcemy znale´ c wszystkie liczby z danej tablicy,
z´
mieszczace sie w przedziale (2, 5)
˛
˛
˙
$liczby_2_5 = filter($rózne_liczby, function($x) {
return (2 < $x) && ($x < 5);
});
Maciek Godek
Programowanie funkcyjne w PHP
62. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
array_reduce – wzmianka
reduce: funkcyjna bestia
´
zastosowanie: uogólnianie dwuargumentowych działan
łacznych na dowolna ilo´ c argumentów
˛
˛ s´
Maciek Godek
Programowanie funkcyjne w PHP
63. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
array_reduce – wzmianka
reduce: funkcyjna bestia
´
zastosowanie: uogólnianie dwuargumentowych działan
łacznych na dowolna ilo´ c argumentów
˛
˛ s´
Maciek Godek
Programowanie funkcyjne w PHP
64. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
Składnia $_
Problem: mamy tablice obiektów. Chcieliby´ my mie´ tablice
˛
s
c
˛
rzutów tych obiektów na ich pewne własno´ ci, które mo˙ emy
s
z
otrzyma´ przez wywołanie odpowiedniej metody.
c
Klasyczne rozwiazanie:
˛
$rzuty = [];
foreach($obiekty as $obiekt) {
$rzuty[] = $obiekt->pobierzWłasno´´();
sc
}
Funkcyjne rozwiazanie:
˛
global $_; // drobne oszustwo
$rzuty = map($_->pobierzWłasno´´(), $obiekty);
sc
Maciek Godek
Programowanie funkcyjne w PHP
65. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
Składnia $_
Problem: mamy tablice obiektów. Chcieliby´ my mie´ tablice
˛
s
c
˛
rzutów tych obiektów na ich pewne własno´ ci, które mo˙ emy
s
z
otrzyma´ przez wywołanie odpowiedniej metody.
c
Klasyczne rozwiazanie:
˛
$rzuty = [];
foreach($obiekty as $obiekt) {
$rzuty[] = $obiekt->pobierzWłasno´´();
sc
}
Funkcyjne rozwiazanie:
˛
global $_; // drobne oszustwo
$rzuty = map($_->pobierzWłasno´´(), $obiekty);
sc
Maciek Godek
Programowanie funkcyjne w PHP
66. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
Składnia $_
Problem: mamy tablice obiektów. Chcieliby´ my mie´ tablice
˛
s
c
˛
rzutów tych obiektów na ich pewne własno´ ci, które mo˙ emy
s
z
otrzyma´ przez wywołanie odpowiedniej metody.
c
Klasyczne rozwiazanie:
˛
$rzuty = [];
foreach($obiekty as $obiekt) {
$rzuty[] = $obiekt->pobierzWłasno´´();
sc
}
Funkcyjne rozwiazanie:
˛
global $_; // drobne oszustwo
$rzuty = map($_->pobierzWłasno´´(), $obiekty);
sc
Maciek Godek
Programowanie funkcyjne w PHP
67. Wprowadzenie
Przykłady
Podsumowanie
Spójniki
Sortowanie tablicy
Inne funkcje wy˙ szego rz˛
z
edu
Łaczenie OOP i FP
˛
Składnia $_
Problem: mamy tablice obiektów. Chcieliby´ my mie´ tablice
˛
s
c
˛
rzutów tych obiektów na ich pewne własno´ ci, które mo˙ emy
s
z
otrzyma´ przez wywołanie odpowiedniej metody.
c
Klasyczne rozwiazanie:
˛
$rzuty = [];
foreach($obiekty as $obiekt) {
$rzuty[] = $obiekt->pobierzWłasno´´();
sc
}
Funkcyjne rozwiazanie:
˛
global $_; // drobne oszustwo
$rzuty = map($_->pobierzWłasno´´(), $obiekty);
sc
Maciek Godek
Programowanie funkcyjne w PHP
70. Wprowadzenie
Przykłady
Podsumowanie
Podsumowanie
Zalety FP:
• łatwiejsza analiza kodu
• dobra kompozycjonalno´ c (nie trzeba sie przejmowa´
s´
˛
c
kopiowaniem i referencjami)
• bardzo naturalne testowanie
• uproszczona paralelizacja
Wady FP:
• nie wsz˛
edzie daje sie stosowa´
˛
c
• brak wsparcia ze strony narz˛
edzi
• kod mo˙ e działa´ niewydajnie
z
c
Maciek Godek
Programowanie funkcyjne w PHP
71. Wprowadzenie
Przykłady
Podsumowanie
Podsumowanie
Zalety FP:
• łatwiejsza analiza kodu
• dobra kompozycjonalno´ c (nie trzeba sie przejmowa´
s´
˛
c
kopiowaniem i referencjami)
• bardzo naturalne testowanie
• uproszczona paralelizacja
Wady FP:
• nie wsz˛
edzie daje sie stosowa´
˛
c
• brak wsparcia ze strony narz˛
edzi
• kod mo˙ e działa´ niewydajnie
z
c
Maciek Godek
Programowanie funkcyjne w PHP
72. Wprowadzenie
Przykłady
Podsumowanie
Podsumowanie
Zalety FP:
• łatwiejsza analiza kodu
• dobra kompozycjonalno´ c (nie trzeba sie przejmowa´
s´
˛
c
kopiowaniem i referencjami)
• bardzo naturalne testowanie
• uproszczona paralelizacja
Wady FP:
• nie wsz˛
edzie daje sie stosowa´
˛
c
• brak wsparcia ze strony narz˛
edzi
• kod mo˙ e działa´ niewydajnie
z
c
Maciek Godek
Programowanie funkcyjne w PHP
73. Wprowadzenie
Przykłady
Podsumowanie
Podsumowanie
Zalety FP:
• łatwiejsza analiza kodu
• dobra kompozycjonalno´ c (nie trzeba sie przejmowa´
s´
˛
c
kopiowaniem i referencjami)
• bardzo naturalne testowanie
• uproszczona paralelizacja
Wady FP:
• nie wsz˛
edzie daje sie stosowa´
˛
c
• brak wsparcia ze strony narz˛
edzi
• kod mo˙ e działa´ niewydajnie
z
c
Maciek Godek
Programowanie funkcyjne w PHP
74. Wprowadzenie
Przykłady
Podsumowanie
Podsumowanie
Zalety FP:
• łatwiejsza analiza kodu
• dobra kompozycjonalno´ c (nie trzeba sie przejmowa´
s´
˛
c
kopiowaniem i referencjami)
• bardzo naturalne testowanie
• uproszczona paralelizacja
Wady FP:
• nie wsz˛
edzie daje sie stosowa´
˛
c
• brak wsparcia ze strony narz˛
edzi
• kod mo˙ e działa´ niewydajnie
z
c
Maciek Godek
Programowanie funkcyjne w PHP
75. Wprowadzenie
Przykłady
Podsumowanie
Podsumowanie
Zalety FP:
• łatwiejsza analiza kodu
• dobra kompozycjonalno´ c (nie trzeba sie przejmowa´
s´
˛
c
kopiowaniem i referencjami)
• bardzo naturalne testowanie
• uproszczona paralelizacja
Wady FP:
• nie wsz˛
edzie daje sie stosowa´
˛
c
• brak wsparcia ze strony narz˛
edzi
• kod mo˙ e działa´ niewydajnie
z
c
Maciek Godek
Programowanie funkcyjne w PHP
76. Wprowadzenie
Przykłady
Podsumowanie
Podsumowanie
Zalety FP:
• łatwiejsza analiza kodu
• dobra kompozycjonalno´ c (nie trzeba sie przejmowa´
s´
˛
c
kopiowaniem i referencjami)
• bardzo naturalne testowanie
• uproszczona paralelizacja
Wady FP:
• nie wsz˛
edzie daje sie stosowa´
˛
c
• brak wsparcia ze strony narz˛
edzi
• kod mo˙ e działa´ niewydajnie
z
c
Maciek Godek
Programowanie funkcyjne w PHP
77. Wprowadzenie
Przykłady
Podsumowanie
Podsumowanie
Zalety FP:
• łatwiejsza analiza kodu
• dobra kompozycjonalno´ c (nie trzeba sie przejmowa´
s´
˛
c
kopiowaniem i referencjami)
• bardzo naturalne testowanie
• uproszczona paralelizacja
Wady FP:
• nie wsz˛
edzie daje sie stosowa´
˛
c
• brak wsparcia ze strony narz˛
edzi
• kod mo˙ e działa´ niewydajnie
z
c
Maciek Godek
Programowanie funkcyjne w PHP
78. Wprowadzenie
Przykłady
Podsumowanie
Podsumowanie
Zalety FP:
• łatwiejsza analiza kodu
• dobra kompozycjonalno´ c (nie trzeba sie przejmowa´
s´
˛
c
kopiowaniem i referencjami)
• bardzo naturalne testowanie
• uproszczona paralelizacja
Wady FP:
• nie wsz˛
edzie daje sie stosowa´
˛
c
• brak wsparcia ze strony narz˛
edzi
• kod mo˙ e działa´ niewydajnie
z
c
Maciek Godek
Programowanie funkcyjne w PHP
79. Wprowadzenie
Przykłady
Podsumowanie
Podsumowanie
Zalety FP:
• łatwiejsza analiza kodu
• dobra kompozycjonalno´ c (nie trzeba sie przejmowa´
s´
˛
c
kopiowaniem i referencjami)
• bardzo naturalne testowanie
• uproszczona paralelizacja
Wady FP:
• nie wsz˛
edzie daje sie stosowa´
˛
c
• brak wsparcia ze strony narz˛
edzi
• kod mo˙ e działa´ niewydajnie
z
c
Maciek Godek
Programowanie funkcyjne w PHP