Romain Berthon
#JobHacker
@RomainTrm
romainberthon.blog
Il peut exister un décalage les intentions et leur réalisations
public User GetUser(Guid id)
// ...
Prend un identifiant et retourne l'utilisateur correspondant
public User GetUser(Guid id)
// ...
Prend un identifiant et retourne l'utilisateur correspondant
public User GetUser(Guid id)
// ...
var user = GetUser(id);
public User GetUser(Guid id)
// ...
var user = GetUser(id);
if (user != null)
{
// ...
}
on ne retourne pas toujours un utilisateur
Charles Antony Richard Hoare. Pendant les années 60, il invente le pointeur null alors qu'il écrivait le compilateur du langage Algol 60.
Pendant une conférence en 2009, il s'en excuse en ces termes :
« Je l’appelle mon erreur à un milliard de dollars. En 1965, je concevais le premier système de typage complet pour un langage orienté objet et je n'ai pas pu résister à ajouter la référence nulle, simplement parce que c'était si facile à implémenter. Ceci a conduit à un nombre incalculable d'erreurs, … qui ont probablement causé des dommages d'un milliard de dollars dans les quarante dernières années. »
> string s = null;
> var result = s is string;
> result
> string s = null;
> var result = s is string;
> result
false
public Maybe<User> GetUser(Guid id)
// ...
var maybeUser = GetUser(id);
type Maybe<'T> =
| Just of 'T
| Nothing
public Maybe<User> GetUser(Guid id)
// ...
var maybeUser = GetUser(id);
maybeUser.Match(
nothing: () => /*Do something*/,
just: user => /*Do something else*/);
Maybe<int> maybeX = //...
Maybe<int> maybeY = //...
// Select
Maybe<int> result =
from x in maybeX
select x * 2;
// SelectMany
Maybe<int> result =
from x in maybeX
from y in maybeY
select x * y;
public User GetUser(Guid id)
// ...
try
{
var user = GetUser(id);
// ...
}
catch (Exception ex)
{
// ...
}
on peut recevoir une erreur
public User GetUser(Guid id)
// ...
var user = GetUser(id);
// ...
public User getUser(Guid id) throws Exception {
// ...
}
public Either<User, Error> GetUser(Guid id)
// ...
var result = GetUser(id);
type Either<'TLeft, 'TRight> =
| Left of 'TLeft
| Right of 'TRight
public Either<User, Error> GetUser(Guid id)
// ...
var result = GetUser(id);
result.Match(
left: user => /*Do something*/,
right: error => /*Do something else*/);
List<int> ids = //...
List<string> resut = ids
.Where(id => id > 0)
.Select(id => $"Id: {id}")
.ToArray();
Task<int> task = //...
Task<string> result =
task.ContinueWith(t => $"Id: {t.Result}");
Language-Ext
SuccincT
Vavr
Functional Java
Romain Berthon
#JobHacker
@RomainTrm
romainberthon.blog