Dans la partie de 3 : Nous allons utiliser le functor Maybe avec l’instruction bind
.
Soit le tableau suivant.
Dans la partie de 3 : Nous allons utiliser le functor Maybe avec l’instruction bind
.
Soit le tableau suivant.
Nous avons vue dans le précédent post un pseudo-container qui nous permet d’emballer nos valeurs. Nous allons muscler un peu notre container mais partons d’un exemple.
Je souhaite récupérer le mail du client “bob” ou afficher “pas de mail”
1 2 3 4 5 6 7 |
|
Facile non ?
Nous allons voir ensemble les monades. Nous allons voir la monade Identity. elle n’est pas très utile mais nécessaire si vous voulez comprendre la monade/functor Maybe qui j’espère va changer votre façon de voir votre code mais ce sera dans le post suivant.
Les monades sont des structures de la programmation fonctionnelle. Très utilisées dans le langage Haskell. En pratique Haskell serait moins attractifs sans cette structure. (Je ne suis absolument pas développeur Haskell.)
Un problème que j’ai eu au travail.
Soit les deux fichiers suivants csv suivant
1 2 3 4 5 |
|
1 2 3 4 |
|
Je souhaite faire un merge de ces deux csv. Comment faire ?
Dans le post précédent j’ai parlé des commandes linux patch
et diff
. des fonctionnalités ou on utiliserait plutôt Git. Ici je vais faire le contraire : utiliser git sans utiliser les commandes linux. Je vais parler de git grep
.
l’utilisation est très simple
1
|
|
On peut utiliser une regex
le résultat s’affiche dans un pager (sous linux c’est souvent less
).
Nous allons jouer un peu avec les diff et les patchs.
Soit le fichier suivant README.md
1 2 3 4 5 |
|
Modifions le fichier par ceci.
1 2 3 4 5 6 7 8 9 |
|
Enregistrons celui-ci en README2.md
Et lançons la commande suivante
1
|
|
Nous obtenons le résultat suivant
1 2 3 4 5 6 7 |
|
Il y a en fait plusieurs formats
Essayez la commande suivante
1
|
|
On obtient le fichier suivant
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Troisième partie sur la SPL et les listes chainées.
Nous allons implémenter l’interface ArrayAccess
. Donc notre liste chainée va se comporter comme un array.
Je vais rajouter deux méthodes. Attention les Array
commencent traditionnellement à 0 d’où le $this->count -1
En effet le héros dans le film 2 arrive le 21 octobre 2015. Bon on n’a pas les voitures volantes. Et c’est toujours le même éditeur de texte (vi date de 1976 !).
Pour annuler de VIM c’est plutôt simple u
pour undo. Pour refaire c’est moins simple <CTRL + r>
. Mais en pratique c’est plus puissant que cela.
En fait on peut voyager dans le temps avec VIM.
Grâce à la commande :earlier
:earlier 5m
reviens en arrière de 5 minutes:earlier 10
annule 10 modifications:earlier 5h
annule 5 heures.:earlier 1f
ramène le fichier avant le dernier enregistrement:earlier 2f
ramène le fichier à l’avant-dernier enregistrementBien sur on peut faire un retour vers futur avec la commande suivante.
:later 5m
retourne 5 minute plus tard.:later 10
refait les 10 derniers modificationsEncore plus fort se déplacer dans l’historique de VIM
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
|
Dans la partie 1 nous avons appris à surcharger le count
ainsi que les différentes méthodes de ArrayAccess
. Pour faire un exemple un peu plus concret, je vais impémenter les listes chainées. Les listes doublement chainée sont déja implémentées dans la SPL via SplDoublyLinkedList.
Le liste chainée (linked list en anglais) est une structure de donnée. Nous allons essayer d’implémenter une liste chainée en PHP. Cela nous permettra de comprendre l’idée. Nous allons implémenter l’interface Countable
. (J’implémente ArrayAccess
et Iterator
dans le post suivant).
Une liste chainée est constituée de Node
ou noeud/chainon.
Un node a deux propriétés.